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

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

import scrapyclass 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,TencentItem3class 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 item

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

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

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

(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 TencentItemclass TencentSpiderSpider(scrapy.Spider):passdef parse(self, response):passfor tr in tr_list:"""使用定义好的腾讯爬虫的类的字段"""item = TencentItem()yield item

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

import scrapy
# 导入不同爬虫的类字段
from JD.items import JdItemclass JdSpiderSpider(scrapy.Spider):passdef parse(self, response):passfor tr in tr_list:"""使用定义好的腾讯爬虫的类的字段"""item = JdItem()yield item

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

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

'''分别导入不同爬虫的字段类'''
from tencent.items import TencentItem, JdItem2class TencentPipeline(object):def process_item(self, item, spider):'''针对与不同的爬虫字段类的对象,做不同的处理'''if isinstance(item, TencentItem):passif isinstance(item, JdItem2):passreturn item

Scrapy框架的学习(6.item介绍以及items的使用(提前定义好字段名))相关推荐

  1. Scrapy框架的学习(3.pipeline介绍以及多个爬虫的pipeline的使用)

    上个博客最后面写到了,pipeline的简单使用以及参数的配置含义:https://blog.csdn.net/wei18791957243/article/details/86157707 1.从p ...

  2. Scrapy框架的学习(一)

    1. Scrapy概述 1. 为什么要学习scrapy框架 爬虫必备的技术,面试会问相关的知识. 让我们的爬虫更快更强大.(支持异步爬虫) 2. 什么是Scrapy? 异步爬虫框架:Scrapy是一个 ...

  3. scrapy框架菜鸟学习记录

    scrapy框架菜鸟学习记录 scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架.其可以应用在数据挖掘,信息处理或储存历史数据等一系列的程序中.其最初是为了页面抓取(更确切的说,网络抓 ...

  4. Scrapy框架的学习(2.scrapy入门,简单爬取页面,并使用管道(pipelines)保存数据)

    上个博客写了:  Scrapy的概念以及Scrapy的详细工作流程 https://blog.csdn.net/wei18791957243/article/details/86154068 1.sc ...

  5. Scrapy 框架【学习笔记01】

    Scrapy 框架 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页 ...

  6. scrapy框架基础学习之囧事百科

    基础: 一.安装scrapy框架 pip install scrapy pip --default-timeout=2000 install -U scrapy 来下载scrapy让它的延迟检测时间变 ...

  7. python爬虫--scrapy框架的学习和使用(七)⭐---第二部分

    文章目录 九.CrawlSpider⭐⭐⭐ 实战项目 问题总结 十.分布式爬虫 十一.增量式爬虫 总结 九.CrawlSpider⭐⭐⭐ 是一个类,基于Spider的子类. 子类继承父类所有的功能,并 ...

  8. Scrapy框架的学习(5.scarpy实现翻页爬虫,以及scrapy.Request的相关参数介绍)

    1. 创建爬虫项目 : scrapy startporject tencent  然后进入到项目中: cd tencent    创建爬虫:scrapy genspider tencent_spide ...

  9. scrapy框架_Python学习之Scrapy框架

    爬虫界江湖地位No.1 说起Python,不得不说到它的爬虫应用,由于Python的短小精悍,用它来开发爬虫应用是最合适不过了,基于Python抓取网页的库有很多,例如requests,beatifu ...

最新文章

  1. python数据挖掘主要特点_python数据挖掘(从数据集中抽取特征)
  2. 一分钟经理“游戏图”提要
  3. 个人开发者微信支付和支付宝支付
  4. 成功解决_catboost.CatBoostError: Bad value for num_feature: Cannot convert ‘b‘\x8f\x91‘‘ to float
  5. 【2022年蓝桥杯】蓝桥杯第一次海选考试题(5题考试大二)(C#题解)
  6. SqlMap常用参数(一)
  7. 牛客国庆集训派对day6T A- 2016【矩阵乘法】
  8. futuretask java 并发请求_Java并发编程:Callable、Future和FutureTask
  9. linux启动找不到内核,linux – PXE启动 – 在TFTP服务器上找不到内核
  10. linux怎样修改目录字体颜色
  11. Java编程练习题3
  12. RadASM配色方案工具fix
  13. 第十六周助教心得体会
  14. wed基础和http
  15. 互联网大佬“打脸”简史:马云/雷军/罗永浩/刘强东...
  16. Appium swip滑动
  17. linux端口共享打印机,linux如何共享打印机
  18. 盗号、薅羊毛、机器注册、恶意爬虫——618大促背后涌动的欺诈暗流
  19. 华中数控系统CNC数据采集
  20. 无人停车场运行收费系统

热门文章

  1. 判断非负整数是否是3的倍数_二、因数与倍数教案
  2. modis数据介绍_【更新90篇】地理数据科学技术文章合集,欢迎大家点赞、在看、转发三连!...
  3. 牛客题霸 NC3 链表中环的入口结点
  4. 华硕老毛子(Padavan)——校园局域网路由表设置(校园网优先局域网访问)
  5. CG CTF MISC MD5
  6. 模拟电梯1.0(类与对象实验)
  7. C++的cin和cout取消同步
  8. Twitter的分布式自增ID算法Snowflake实现分析及其Java、Php和Python版
  9. 关于tomcat出现闪退问题
  10. 【CentOS Linux 7】【Linux系统及应用---调研报告】