scrapy items的使用

练习(二)

目标抓取

  1. https://segmentfault.com/news 热门头条
  2. 过滤点赞为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,
}

完整代码下载https://www.jianguoyun.com/p/DcuVb5AQvrm_BhjO1TI

你可能感兴趣的:(scrapy items的使用)