什么是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

  

scrapy_ItemLoader的更多相关文章

随机推荐

  1. 安卓电量优化之WakeLock锁机制全面解析

    版权声明:本文出自汪磊的博客,转载请务必注明出处. 一.WakeLock概述 wakelock是一种锁的机制,只要有应用拿着这个锁,CPU就无法进入休眠状态,一直处于工作状态.比如,手机屏幕在屏幕关闭 ...

  2. Oracle COMMIT语句的处理顺序

    Oracle COMMIT语句相信大家都有一定的了解,下面就为您介绍Oracle COMMIT语句的处理步骤,希望对您能有所帮助. Oracle COMMIT语句处理顺序 当事务提交时,Oracle分 ...

  3. TypeScript体验

    TypeScript 在线玩 http://www.typescriptlang.org/play/index.html ts最终编译成js  网站最终还是要引用js.  ts面向对象的感念更加直观, ...

  4. UML中类图的一些基本知识

    一.类 类(class)封装了数据和行为,是面向对象的重要组成部分,他是具有相同操作.属性.关系的对象集合的总称. 在软件运行时,类被实例化成对象(object),对象对应某个具体的事物,是类的实例( ...

  5. 简单单页面路由跳转demo

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. Node.js学习笔记(三): 事件机制

    大部分的nodejs核心api都建立在异步的事件驱动架构之上,所以events是Node.js 最重要的模块,它提供了唯一的接口.events 模块不仅用于用户代码与 Node.js 下层事件循环的交 ...

  7. java.io与网络通信

    文件IO java.io.File是用于操作文件或目录的类: File file = new File("hello.txt"); 实例化File时不关心路径的目标并不会去读取文件 ...

  8. js中的for循环案例

    打印99乘法表 for(var x=1; x<=9; x++) {         for(var y=1; y<=x; y++) { document.write(y+"*&q ...

  9. Scrapy运行错误:ImportError: No module named win32api

    需要安装pypiwin32,直接通过官网安装exe会出现很多错误,所以直接运行以下命令: pip install pypiwin32

  10. 从头开始基于Maven搭建SpringMVC+Mybatis项目(2)

    接上文内容,本节介绍Maven的聚合和继承. 从头阅读传送门 互联网时代,软件正在变得越来越复杂,开发人员通常会对软件划分模块,以获得清晰的设计.良好的分工及更高的可重用性.Maven的聚合特性能把多 ...