Scrapy框架的学习(6.item介绍以及items的使用(提前定义好字段名))转载https://blog.csdn.net/wei18791957243/article/details/86259688
在Scrapy框架中的items.py的作用
1.可以预先定义好要爬取的字段 items.py
import scrapy class TencentItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() """定义好字段,并不代表真正的值,只是占一个位置,用的时候直接赋值就行""" position = scrapy.Field() category = scrapy.Field() date = scrapy.Field()2. 把字段定义好之后 ,就可以在爬虫中进行使用
在用的时候, item的键名要和在items.py里面定义好的字段名称一致
import scrapy ''' 导入不同爬虫的类字段''' from tencent.items import TencentItem,TencentItem2,TencentItem3 class TencentSpiderSpider(scrapy.Spider): name = 'tencent_spider' allowed_domains = ['tencent.com'] start_urls = ['https://hr.tencent.com/position.php'] def parse(self, response): tr_list = response.xpath("//table[@class='tablelist']//tr")[1:-1] for tr in tr_list: """使用定义好的类""" item = TencentItem() """里面的键名,必须提前在items里面定义好之后才能用""" item["position"] = tr.xpath("./td/a/text()").extract_first() item["category"] = tr.xpath(".//td[2]/text()").extract_first() item["date"] = tr.xpath(".//td[5]/text()").extract_first() yield item3. 如果想在pipelines.py中使用的方法是大同小异,只是在进行处理的时候item传过来的是一个类对象,要对其进行相应 的 转化
'''分别导入不同爬虫的字段类''' from tencent.items import TencentItem, TencentItem2, TencentItem3 class TencentPipeline(object): def process_item(self, item, spider): """使用item的时候这里接收的是TencentItem类的对象,我们可以把它转化字典""" print(dict(item)) '''针对与不同的爬虫字段类的对象,做不同的处理''' return item4. 这样做有什么好处呢,个人理解:
(1) 可以直接看items.py,可以看出来要爬取那些字段
(2) 防止我们在item["键名"] 输入键名的时候输入错误
有多个爬虫时Item的处理
例如有个腾讯爬虫、有个京东爬虫,怎样处理
1. 在items.py里面创建不同的类,分别保存各自的字段
class TencentItem(scrapy.Item): """腾讯爬虫要爬取的字段""" """定义好字段,并不代表真正的值,只是占一个位置,用的时候直接赋值就行""" position = scrapy.Field() category = scrapy.Field() date = scrapy.Field() class JdItem(scrapy.Item): """京东爬虫要爬取的字段""" """定义好字段,并不代表真正的值,只是占一个位置,用的时候直接赋值就行""" position = scrapy.Field() category = scrapy.Field() date = scrapy.Field()2. 然后在不同的爬虫程序里使用对应的类即可
在腾讯的爬虫里 , 导入和使用
import scrapy # 导入不同爬虫的类字段 from tencent.items import TencentItem class TencentSpiderSpider(scrapy.Spider): pass def parse(self, response): pass for tr in tr_list: """使用定义好的腾讯爬虫的类的字段""" item = TencentItem() yield item在京东的爬虫中,可以这样使用
import scrapy # 导入不同爬虫的类字段 from JD.items import JdItem class JdSpiderSpider(scrapy.Spider): pass def parse(self, response): pass for tr in tr_list: """使用定义好的腾讯爬虫的类的字段""" item = JdItem() yield item3. 对于多个爬虫,在pipelines,py中可以进行判断,分别对不同的爬虫的字段进行不同的处理
isinstance() 函数来判断一个对象是否是一个已知的类型
'''分别导入不同爬虫的字段类''' from tencent.items import TencentItem, JdItem2 class TencentPipeline(object): def process_item(self, item, spider): '''针对与不同的爬虫字段类的对象,做不同的处理''' if isinstance(item, TencentItem): pass if isinstance(item, JdItem2): pass return item
Scrapy框架的学习(6.item介绍以及items的使用(提前定义好字段名))转载https://blog.csdn.net/wei18791957243/article/details/86259688的更多相关文章
- K8S 使用NFS 创建PV和PVC的例子 学习From https://blog.csdn.net/xts_huangxin/article/details/51494472
1. 获取资料 网址: https://blog.csdn.net/xts_huangxin/article/details/51494472 感谢原作者 这里面 按照自己的机器情况进行了学习模仿 ...
- Android 学习路线图(转载自https://blog.csdn.net/lixuce1234/article/details/77947405)
程序设计 一.java (a)基本语法(如继承.异常.引用.泛型等) Java核心技术 卷I(适合入门) 进阶 Effective Java中文版(如何写好的Java代码) Java解惑 (介绍烂Ja ...
- OpenGL学习脚印: uniform blocks在着色器中的使用 转自https://blog.csdn.net/wangdingqiaoit/article/details/52717963
写在前面 目前,我们在着色器中要传递多个uniform变量时,总是使用多个uniform,然后在主程序中设置这些变量的值:同时如果要在多个shader之间共享变量,例如投影矩阵projection和视 ...
- scala学习(idea编译过程https://blog.csdn.net/guiying712/article/details/68947747)
scala官网 https://www.scala-lang.org/ 菜鸟教程学习 http://www.runoob.com/scala/scala-basic-syntax.html w3sch ...
- Bootstrap学习4--Table样式(转载:https://blog.csdn.net/Fanbin168/article/details/53208869)
备注:最新Bootstrap手册:http://www.jqhtml.com/bootstraps-syntaxhigh/index.html 将<table>标签添加class=‘tab ...
- 学习mongoDB的一些感受(转自:http://blog.csdn.net/liusong0605/article/details/11581019)
曾经使用过mongoDB来保存文件,最一开始,只是想总结一下在开发中如何实现文件与mongoDB之间的交互.在此之前,并没有系统的了解过mongoDB,虽然知道我们用它来存储文件这些非结构化数据,但是 ...
- jbpm的学习 出处http://blog.csdn.net/hxirui/article/details/1221911
jbpm入门例子 分类: opensourse2006-09-14 11:30 37308人阅读 评论(22) 收藏 举报 jbpmhibernate数据库oraclemysqltransition ...
- Mapreduce之序列化框架(转自http://blog.csdn.net/lastsweetop/article/details/9376495)
框架简介 MapReduce仅仅可以支持Writable做key,value吗?答案是否定的.事实上,一切类型都是支持的,只需满足一个小小的条件:每个类型是以二进制流的形式传输.为此Hadoop提供了 ...
- H5学习系列之文件读取API--本文转自http://blog.csdn.net/jackfrued/article/details/8967667
HTML5定义了FileReader作为文件API的重要成员用于读取文件,根据W3C的定义,FileReader接口提供了读取文件的方法和包含读取结果的事件模型. FileReader的使用方式非常简 ...
随机推荐
- PCL_common模块api代码解析
pcl_common库包含大多数PCL库使用的公共数据结构和方法.核心数据结构包括PointCloud类和许多用于表示点.表面法线.RGB颜色值.特征描述符等的点类型.它还包含许多用于计算距离/范数. ...
- msm audio platform 驱动代码跟踪
sound/soc/soc-core.c static int __init snd_soc_init(void) { #ifdef CONFIG_DEBUG_FS snd_soc_debugfs_r ...
- 如何通过ajax来获取返回值
preface 今天使用ajax向后端取数据的时候,按照正常的写法,死活return不了值,所以看了下ajax的帮助手册,发现了这个参数async:false,这个参数是说async表示不是异步执行了 ...
- DeBug Python代码全靠print函数?换用这个一天2K+Star的工具吧,改进版
pysnooper是代码debug神器,比无限low print好很多和也比日志debug好一些,比断点调试也好一些,这个很犀利的装饰器. https://www.toutiao.com/a66829 ...
- Kafka认证权限配置(动态添加用户)
之前写过一篇Kafka ACL使用实战,里面演示了如何配置SASL PLAINTEXT + ACL来为Kafka集群提供认证/权限安全保障,但有一个问题经常被问到:这种方案下是否支持动态增加/移除认证 ...
- Git忽略已经被版本控制的文件(添加.gitignore不会起作用)
说明:已经被维护起来的文件(需要被远程仓库控制),即使加入.gitignore也会无济于事. .gitignore只对那些只存在在本地,而不在远程仓库的文件起作用.(untraked file). 操 ...
- gitlab-ci + k8s 之k8s (二)
k8s用自己话说,就是一种容器编排工具,部署好应用,再创建绑定应用的服务,就可以实现的服务访问了.这个理论还是得去看重点谈理论的文章,此处我们只记录本项目部署过程. 背景介绍 之前已实现gitlab- ...
- codeforce R 491 (div2)
本来打完就想写的,,奈何舍友要睡了,我开个台灯感觉怪怪的,就没写. A题竟然一开始wa了...后来发现对于c和a还有c和b的关系没有判断,,丢掉了很多罚时. B题我的方法是 计算 sum,然后 ...
- 浏览器打开exe文件
<win-r> regedit 打开注册表,然后自定义协议 自定义协议注册表.reg 打开后导入 Windows Registry Editor Version 5.00 [HKEY_CL ...
- java个人博客源码
初入博客园,请各位多关照,来而不往非礼也. 如需要源码以及学习内容,qq:1397617269,我看到就回你们资源. 直接给链接: 链接:https://pan.baidu.com/s/1S_awtg ...