在Scrapy框架中的items.py的作用

  1.可以预先定义好要爬取的字段     items.py

  1. import scrapy
  2.  
  3.  
  4. class TencentItem(scrapy.Item):
  5. # define the fields for your item here like:
  6. # name = scrapy.Field()
  7. """定义好字段,并不代表真正的值,只是占一个位置,用的时候直接赋值就行"""
  8. position = scrapy.Field()
  9. category = scrapy.Field()
  10. date = scrapy.Field()

2. 把字段定义好之后 ,就可以在爬虫中进行使用

在用的时候, item的键名要和在items.py里面定义好的字段名称一致

  1. import scrapy
  2. ''' 导入不同爬虫的类字段'''
  3. from tencent.items import TencentItem,TencentItem2,TencentItem3
  4.  
  5. class TencentSpiderSpider(scrapy.Spider):
  6. name = 'tencent_spider'
  7. allowed_domains = ['tencent.com']
  8. start_urls = ['https://hr.tencent.com/position.php']
  9.  
  10. def parse(self, response):
  11. tr_list = response.xpath("//table[@class='tablelist']//tr")[1:-1]
  12. for tr in tr_list:
  13. """使用定义好的类"""
  14. item = TencentItem()
  15. """里面的键名,必须提前在items里面定义好之后才能用"""
  16. item["position"] = tr.xpath("./td/a/text()").extract_first()
  17. item["category"] = tr.xpath(".//td[2]/text()").extract_first()
  18. item["date"] = tr.xpath(".//td[5]/text()").extract_first()
  19. yield item

3. 如果想在pipelines.py中使用的方法是大同小异,只是在进行处理的时候item传过来的是一个类对象,要对其进行相应        的  转化

  1. '''分别导入不同爬虫的字段类'''
  2. from tencent.items import TencentItem, TencentItem2, TencentItem3
  3.  
  4.  
  5. class TencentPipeline(object):
  6. def process_item(self, item, spider):
  7. """使用item的时候这里接收的是TencentItem类的对象,我们可以把它转化字典"""
  8. print(dict(item))
  9. '''针对与不同的爬虫字段类的对象,做不同的处理'''
  10. return item

4. 这样做有什么好处呢,个人理解:

(1)  可以直接看items.py,可以看出来要爬取那些字段

(2) 防止我们在item["键名"]  输入键名的时候输入错误

有多个爬虫时Item的处理

例如有个腾讯爬虫、有个京东爬虫,怎样处理

1. 在items.py里面创建不同的类,分别保存各自的字段

  1. class TencentItem(scrapy.Item):
  2. """腾讯爬虫要爬取的字段"""
  3. """定义好字段,并不代表真正的值,只是占一个位置,用的时候直接赋值就行"""
  4. position = scrapy.Field()
  5. category = scrapy.Field()
  6. date = scrapy.Field()
  7.  
  8. class JdItem(scrapy.Item):
  9. """京东爬虫要爬取的字段"""
  10. """定义好字段,并不代表真正的值,只是占一个位置,用的时候直接赋值就行"""
  11. position = scrapy.Field()
  12. category = scrapy.Field()
  13. date = scrapy.Field()

2. 然后在不同的爬虫程序里使用对应的类即可

在腾讯的爬虫里 ,  导入和使用

  1. import scrapy
  2. # 导入不同爬虫的类字段
  3. from tencent.items import TencentItem
  4.  
  5. class TencentSpiderSpider(scrapy.Spider):
  6. pass
  7. def parse(self, response):
  8. pass
  9. for tr in tr_list:
  10. """使用定义好的腾讯爬虫的类的字段"""
  11. item = TencentItem()
  12. yield item

在京东的爬虫中,可以这样使用

  1. import scrapy
  2. # 导入不同爬虫的类字段
  3. from JD.items import JdItem
  4.  
  5. class JdSpiderSpider(scrapy.Spider):
  6. pass
  7. def parse(self, response):
  8. pass
  9. for tr in tr_list:
  10. """使用定义好的腾讯爬虫的类的字段"""
  11. item = JdItem()
  12. yield item

3. 对于多个爬虫,在pipelines,py中可以进行判断,分别对不同的爬虫的字段进行不同的处理

    isinstance() 函数来判断一个对象是否是一个已知的类型

  1. '''分别导入不同爬虫的字段类'''
  2. from tencent.items import TencentItem, JdItem2
  3.  
  4.  
  5. class TencentPipeline(object):
  6. def process_item(self, item, spider):
  7. '''针对与不同的爬虫字段类的对象,做不同的处理'''
  8. if isinstance(item, TencentItem):
  9. pass
  10. if isinstance(item, JdItem2):
  11. pass
  12. return item

Scrapy框架的学习(6.item介绍以及items的使用(提前定义好字段名))转载https://blog.csdn.net/wei18791957243/article/details/86259688的更多相关文章

  1. K8S 使用NFS 创建PV和PVC的例子 学习From https://blog.csdn.net/xts_huangxin/article/details/51494472

    1. 获取资料 网址: https://blog.csdn.net/xts_huangxin/article/details/51494472  感谢原作者 这里面 按照自己的机器情况进行了学习模仿 ...

  2. Android 学习路线图(转载自https://blog.csdn.net/lixuce1234/article/details/77947405)

    程序设计 一.java (a)基本语法(如继承.异常.引用.泛型等) Java核心技术 卷I(适合入门) 进阶 Effective Java中文版(如何写好的Java代码) Java解惑 (介绍烂Ja ...

  3. OpenGL学习脚印: uniform blocks在着色器中的使用 转自https://blog.csdn.net/wangdingqiaoit/article/details/52717963

    写在前面 目前,我们在着色器中要传递多个uniform变量时,总是使用多个uniform,然后在主程序中设置这些变量的值:同时如果要在多个shader之间共享变量,例如投影矩阵projection和视 ...

  4. 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 ...

  5. Bootstrap学习4--Table样式(转载:https://blog.csdn.net/Fanbin168/article/details/53208869)

    备注:最新Bootstrap手册:http://www.jqhtml.com/bootstraps-syntaxhigh/index.html 将<table>标签添加class=‘tab ...

  6. 学习mongoDB的一些感受(转自:http://blog.csdn.net/liusong0605/article/details/11581019)

    曾经使用过mongoDB来保存文件,最一开始,只是想总结一下在开发中如何实现文件与mongoDB之间的交互.在此之前,并没有系统的了解过mongoDB,虽然知道我们用它来存储文件这些非结构化数据,但是 ...

  7. jbpm的学习 出处http://blog.csdn.net/hxirui/article/details/1221911

    jbpm入门例子 分类: opensourse2006-09-14 11:30 37308人阅读 评论(22) 收藏 举报 jbpmhibernate数据库oraclemysqltransition ...

  8. Mapreduce之序列化框架(转自http://blog.csdn.net/lastsweetop/article/details/9376495)

    框架简介 MapReduce仅仅可以支持Writable做key,value吗?答案是否定的.事实上,一切类型都是支持的,只需满足一个小小的条件:每个类型是以二进制流的形式传输.为此Hadoop提供了 ...

  9. H5学习系列之文件读取API--本文转自http://blog.csdn.net/jackfrued/article/details/8967667

    HTML5定义了FileReader作为文件API的重要成员用于读取文件,根据W3C的定义,FileReader接口提供了读取文件的方法和包含读取结果的事件模型. FileReader的使用方式非常简 ...

随机推荐

  1. find ctime 加减n时间范围

    看下atime的时间解释:-atime n File was last accessed n*24 hours ago. When find figures out how many 24-hour ...

  2. MySQL中TEXT与BLOB字段类型的区别

    这篇文章主要介绍了MySQL中TEXT与BLOB字段类型的区别,本文总结了6大区别,需要的朋友可以参考下   在MySQL中有两个字段类型容易让人感觉混淆,那就是TEXT与BLOB,特别是自己写博客程 ...

  3. 【原创】SAP/Oracle 集团企业海外全球化实施注意事项: 一带一路本地化 (持续更新)

    ABC集团SAP的系统平台已经扩展到全球一百来个国家和地区,SAP系统平台的全球实施项目中, 当时是需要支持当地的业务和法律法规的合规要求. 当时客户也是缺乏当地的资源以及对当地法律法规和业务实践的了 ...

  4. SAP MDM 简介 --- MDM 实施方法论 - 企业的SOA 数据总线基础

    SAP NetWeaver Master Data Management (MDM) ,SAP NetWeaver 主数据管理,MDM可以进行数据合并,降低数据维护成本,确保跨系统的数据一致性,加快业 ...

  5. linux下添加逻辑分区并挂载(手动和自动方式)

    一.查看新磁盘[root@desktop61 Desktop]# fdisk -cul /dev/sdc Disk /dev/sdc: 21.5 GB, 21474836480 bytes255 he ...

  6. winscp的root连接ubuntu“拒绝访问”的解决方法

    转载:https://www.cnblogs.com/weizhxa/p/10098640.html 解决: 1.修改ssh配置文件:sudo vim etc/ssh/sshd_config 在#Pe ...

  7. spring-boot项目建立

    使用idea来开发spring-boot项目,对于community版本的idea,由于没有spring-boot插件,所有对于开发spring-boot的web项目来说不是很方便,所以安装Ultim ...

  8. js 零散知识总结

    网页播放声音 这个非常简单,我们只需要在html和js设置即可.首先看html代码 html代码 <audio id="sound" autoplay="autop ...

  9. Oracle密码过期问题 ORA-28001:the password has expired

    如果已经过期了,首先需要修改密码,然后设置密码为无限期.修改以sys用户登陆. 修改密码:alter user username identified by password  密码可以和之前的密码相 ...

  10. 转载:sigmoid和softmax总结

    转自:http://blog.csdn.net/u014422406/article/details/52805924 sigmoid函数(也叫逻辑斯谛函数): 引用wiki百科的定义: A logi ...