2017/4/20 scrapy response
2017-04-20 本文已影响131人
Carpe
作业代码
spider.py
# -*- coding: utf-8 -*-
import scrapy
from jianshu.items import JianshuItem
import sys
import re
import requests
import json
class WeekSpider(scrapy.Spider):
name = "weekhot"
def start_requests(self):
for i in range(1, 6):
self.url = 'http://www.jianshu.com/trending/weekly?&page=%s' % i
yield scrapy.Request(self.url, self.get_url)
def get_url(self, response):
base_url = 'http://www.jianshu.com'
total_url = response.xpath('//a[@class="title"]').extract()
for i in total_url:
link = b = re.findall('href="(.*?)">', i, re.S)[0]
url = base_url + link
yield scrapy.Request(url,callback=self.parse)
def parse(self, response):
#total = response.xpath('//div[@class="content"]')
#item = []
item = JianshuItem()
item['author'] = response.xpath('//span[@class="name"]/a/text()').extract()
item['post_date'] = response.xpath('//span[@class="publish-time"]/text()').extract()
item['wordage'] = response.xpath('//span[@class="wordage"]/text()').extract()
item['title'] = response.xpath('//div[@class="article"]/h1/text()').extract()
item['read_num'] = re.search('views_count":(.*?),', response.text, re.S).group()
item['comment_num'] = re.search('comments_count":(.*?),', response.text, re.S).group()
item['like_num'] = re.search('likes_count":(.*?),', response.text, re.S).group()
# 获取专题信息
id = re.findall('{"id":(.*?),', response.text, re.S)[0]
url = 'http://www.jianshu.com/notes/%s/included_collections?page=1' % id
datas = []
result = requests.get(url)
data = json.loads(result.text)
for one in data['collections']:
datas.append(one['title'])
count = data['total_pages']
for one in range(2, count + 1):
url = 'http://www.jianshu.com/notes/{}/included_collections?page={}'.format(id, one)
result = requests.get(url)
data = json.loads(result.text)
for one in data['collections']:
datas.append(one['title'])
try:
item['zhuanti'] = " ".join(datas).encode('utf-8')
except:
item['sp_title'] = u''
yield item
item.py
import scrapy
class JianshuItem(scrapy.Item):
# define the fields for your item here like:
author = scrapy.Field()
post_date = scrapy.Field()
title = scrapy.Field()
read_num = scrapy.Field()
comment_num = scrapy.Field()
like_num = scrapy.Field()
作业结果
作业结果作业思路梳理
越来越觉得,思路这东西,如果没有足够清楚的思路以及保持这个思路前进与经过思考的修正,花再多的时间都是白费。
在作业中,困扰我的主要是start_url, start_resquest(), 这两个的区别,本来是虽然不能区分,但是也理得清楚,后面越做就越理不清了,陷入死循环了
对于这两点,因为时间的关系,没有查询,从刚才的调试中来谈下吧,从字面的意思上看,start_url是开始抓取的入口中,start_request()是一个函数,开始处理信息的入口,结合昨天的作业来看,这两个分别适应的情景,如果是一级页面,用start_url便可以了,而如果是有多层页面,start_request()来定义抓取的url,然后再写一个函数来爬取下一层的页面。
还有一个问题没有解决,就是提取被收录的专题,这个因为时间的原因,没有理解清楚。
在作业中发现的不足
- 总是有这样一个坏习惯,在做的过程中,如果遇到不懂的,第一选择往往是去谷歌,主要谷歌的对象是别人的经验,看下别人有没有类似的项目,然后快速扫一遍,看似能够比较快地解决问题,但是却是很零碎地知识,不系统,前期还好,但是在后面,可以预见地是懒于思考,会在一个个的问题上困扰更久。
- 没有很好地建立自己的知识索引系统,有一些问题,之前也是遇到过了,但是找起来还是不够快,这是物理上的索引,在大脑里的索引就是没有很好地总结归类。