博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Scrapy Item Loaders使用方法
阅读量:4100 次
发布时间:2019-05-25

本文共 3508 字,大约阅读时间需要 11 分钟。

image

使用方法实例

以爬取伯乐文章为例,使用itemloader后:

from scrapy.loader.processors import MapCompose,TakeFirstimport datetimefrom scrapy.loader import ItemLoaderclass ArticleItemLoader(ItemLoader):    """自定制ItemLoader,取值都会调用TakeFirst函数"""    default_output_processor = TakeFirst()def transform_date(publish_date):    """在item赋值前处理之前xpath定位的的publish_date字段并返回"""    try:        publish_date = publish_date.strip().split(' ')[0]        publish_date = datetime.datetime.strptime(publish_date, "%Y/%m/%d")    except:        publish_date = datetime.datetime.now()    return publish_datedef get_collect_num(value):    """在item赋值前处理之前xpath定位的的 collect_num 字段并返回"""    try:        collect_num = int(value.strip().split(' ')[0])    except:        collect_num=0    return collect_numdef return_value(value):    """覆盖output_processor,保持默认的状态"""    return valueclass JobboleArticleItem(scrapy.Item):    title = scrapy.Field()    publish_date = scrapy.Field(        # 对传入到item的值调用指定的函数进行预处理,且自动传入传入当前字段值        input_processor= MapCompose(transform_date),    )    cate = scrapy.Field()    favor_num = scrapy.Field(        input_processor=MapCompose(lambda x:int(x))    )    collect_num = scrapy.Field(        input_processor=MapCompose(get_collect_num)    )  # 收藏    img_url=scrapy.Field(        output_processor=MapCompose(return_value)    )  # 封面图片    img_save_path=scrapy.Field(    )  # 封面图片    url = scrapy.Field()  # 当前图片路径
jobbole_spider.py
from scrapy.loader import ItemLoaderfrom ..items import JobboleArticleItem,ArticleItemLoaderdef parse_detail(self,response):    """解析文章的具体字段"""    img_url = response.meta.get('img_url','')    img_url = urljoin(response.url,img_url)        # 1、实例化ArticleItemLoader对象    item_loader= ArticleItemLoader(item=JobboleArticleItem(), response=response)        # 2、搜集数据,指定保存的字段名和xpath路径,    # item_loader.add_css('title','...')    item_loader.add_xpath('title', '//*[@class="entry-header"]/h1/text()')    item_loader.add_xpath('publish_date', '//*[@class="entry-meta-hide-on-mobile"]/text()[1]')    item_loader.add_xpath('cate', '//p[@class="entry-meta-hide-on-mobile"]/a[1]/text()')    item_loader.add_xpath('favor_num', '//*[@class="post-adds"]/span[1]/h10/text()')    item_loader.add_xpath('collect_num','//*[@class="post-adds"]/span[2]/text()')        # 2、添加已经确定的值到loader中    item_loader.add_value('img_url', [img_url])  # 特殊字段,必须输入列表或元祖对象,供默认的imagepipeline使用    item_loader.add_value('url', response.url)    item_loader.add_value('img_save_path', '')        # 3、调用load_item方法取出最终的item对象并返回    loaded_item = item_loader.load_item()    return loaded_item# 通过item css 实现  # front_image_url = response.meta.get("front_image_url", "")  # 文章封面图        # item_loader = ArticleItemLoader(item=JobBoleArticleItem(), response=response)        # item_loader.add_css("title", ".entry-header h1::text")        # item_loader.add_value("url", response.url)        # item_loader.add_value("url_object_id", get_md5(response.url))        # item_loader.add_css("create_date", "p.entry-meta-hide-on-mobile::text")        # item_loader.add_value("front_image_url", [front_image_url])        # item_loader.add_css("praise_nums", ".vote-post-up h10::text")        # item_loader.add_css("comment_nums", "a[href='#article-comment'] span::text")        # item_loader.add_css("fav_nums", ".bookmark-btn::text")        # item_loader.add_css("tags", "p.entry-meta-hide-on-mobile a::text")        # item_loader.add_css("content", "div.entry")        #         # article_item = item_loader.load_item()        # yield article_item

转载地址:http://cuksi.baihongyu.com/

你可能感兴趣的文章
用idea创建一个maven web项目
查看>>
Kafka
查看>>
9.1 为我们的角色划分权限
查看>>
维吉尼亚之加解密及破解
查看>>
DES加解密
查看>>
TCP/IP协议三次握手与四次握手流程解析
查看>>
PHP 扩展开发 : 编写一个hello world !
查看>>
inet_ntoa、 inet_aton、inet_addr
查看>>
用模板写单链表
查看>>
用模板写单链表
查看>>
链表各类操作详解
查看>>
C++实现 简单 单链表
查看>>
数据结构之单链表——C++模板类实现
查看>>
Linux的SOCKET编程 简单演示
查看>>
正则匹配函数
查看>>
Linux并发服务器编程之多线程并发服务器
查看>>
聊聊gcc参数中的-I, -L和-l
查看>>
[C++基础]034_C++模板编程里的主版本模板类、全特化、偏特化(C++ Type Traits)
查看>>
C语言内存检测
查看>>
Linux epoll模型
查看>>