什么是Itemloader?
一种容器,实现直白高效字段提取
直接赋值取值的方式,会出现一下几个问题
- 代码量一多,各种css和xpath选择器,充斥整个代码逻辑,没有规则,不利于维护
- 对于一个字段的预处理,不明确,也不应该出现在主逻辑中
如何解决以上两个问题?
通过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