scrapy items的使用
2017-08-17 本文已影响24人
直尺
练习(二)
目标抓取
- https://segmentfault.com/news 热门头条
- 过滤点赞为0的记录
在练习一的代码基础上,我们新建一个spider叫news
scrapy genspider news segmentfault.com
自定义items模块并新建newsItem类代码如下
import scrapy
class NewsItem(scrapy.Item):
praise = scrapy.Field() #点赞数量
title = scrapy.Field() #标题
url = scrapy.Field() #地址
接下来修改spider的parse方法采用itemload
代码如下
def parse(self, response):
items = response.css("div.news__item")
for item in items:
load = ItemLoader(item=NewsItem(),selector=item)
load.add_css('url', "div.news__item-info h4 a::attr(href)")
load.add_css('praise', "div.stream__item-zan span.stream__item-zan-number::text")
load.add_css('title', "div.news__item-info h4 a::text")
yield load.load_item()
目前为止我们采用item的方式完成了练习一的功能,完成了本次的目标一
接下来我们采用Item Pipeline的方式来过滤那些赞为零的数据
在pipelines.py文件中我们建立一个ZanPipeline类来过滤点赞为0的数据
class ZanPipeline(object):
def process_item(self, item, spider):
if int(item['praise'][0])>0:
return item
else:
raise DropItem("delete %s" % item['title'])
最后在settings.py中激活ZanPipeline
ITEM_PIPELINES = {
'segmentfault.pipelines.ZanPipeline': 300,
}