scrapy_ItemLoader

什么是Itemloader?

       一种容器,实现直白高效字段提取

直接赋值取值的方式,会出现一下几个问题

  1. 代码量一多,各种css和xpath选择器,充斥整个代码逻辑,没有规则,不利于维护
  2. 对于一个字段的预处理,不明确,也不应该出现在主逻辑中

如何解决以上两个问题?

       通过scrapy中的ItemLoader模块来处理

那如何使用呢?

  1. 声明一个容器

  2. 往容器中添加值

  3. 加载容器

  4. 把值传yield给 items

    def analysie_go(self, response):
        """解析页面,提取字段值"""
        # 通过response.meta.get方式获取meta传过来的值
        img_url = response.meta.get('img_url', '0')
        # 声明一个容器,接收item实例和response参数
        load_item = ItemLoader(item=JobboleItem(), response=response)
        # 指定value添加值
        load_item.add_value('img_url', img_url)
        load_item.add_value('cont_url', response.url)
        load_item.add_value('cont_id', response.url)
        # css方式解析值
        load_item.add_css('title', '.entry-header h1::text')
        load_item.add_css('publish_time', '.entry-meta-hide-on-mobile::text')
        # xpath解析值
        load_item.add_xpath('cont', '//div[@class="entry"]//text()')
        load_item.add_css('link_num', '.vote-post-up h10::text')
        load_item.add_css('collection_num', '.bookmark-btn::text')
        load_item.add_css('comment_num', '.post-adds a span::text')
        # 加载load_item()
        article_items = load_item.load_item()
        # 把获取的字段交给items
        yield article_items

  

原文地址:https://www.cnblogs.com/2bjiujiu/p/7237443.html