Scrapy框架的学习(6.item介绍以及items的使用(提前定义好字段名))
在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的使用(提前定义好字段名))相关推荐
- Scrapy框架的学习(3.pipeline介绍以及多个爬虫的pipeline的使用)
上个博客最后面写到了,pipeline的简单使用以及参数的配置含义:https://blog.csdn.net/wei18791957243/article/details/86157707 1.从p ...
- Scrapy框架的学习(一)
1. Scrapy概述 1. 为什么要学习scrapy框架 爬虫必备的技术,面试会问相关的知识. 让我们的爬虫更快更强大.(支持异步爬虫) 2. 什么是Scrapy? 异步爬虫框架:Scrapy是一个 ...
- scrapy框架菜鸟学习记录
scrapy框架菜鸟学习记录 scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架.其可以应用在数据挖掘,信息处理或储存历史数据等一系列的程序中.其最初是为了页面抓取(更确切的说,网络抓 ...
- Scrapy框架的学习(2.scrapy入门,简单爬取页面,并使用管道(pipelines)保存数据)
上个博客写了: Scrapy的概念以及Scrapy的详细工作流程 https://blog.csdn.net/wei18791957243/article/details/86154068 1.sc ...
- Scrapy 框架【学习笔记01】
Scrapy 框架 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页 ...
- scrapy框架基础学习之囧事百科
基础: 一.安装scrapy框架 pip install scrapy pip --default-timeout=2000 install -U scrapy 来下载scrapy让它的延迟检测时间变 ...
- python爬虫--scrapy框架的学习和使用(七)⭐---第二部分
文章目录 九.CrawlSpider⭐⭐⭐ 实战项目 问题总结 十.分布式爬虫 十一.增量式爬虫 总结 九.CrawlSpider⭐⭐⭐ 是一个类,基于Spider的子类. 子类继承父类所有的功能,并 ...
- Scrapy框架的学习(5.scarpy实现翻页爬虫,以及scrapy.Request的相关参数介绍)
1. 创建爬虫项目 : scrapy startporject tencent 然后进入到项目中: cd tencent 创建爬虫:scrapy genspider tencent_spide ...
- scrapy框架_Python学习之Scrapy框架
爬虫界江湖地位No.1 说起Python,不得不说到它的爬虫应用,由于Python的短小精悍,用它来开发爬虫应用是最合适不过了,基于Python抓取网页的库有很多,例如requests,beatifu ...
最新文章
- python数据挖掘主要特点_python数据挖掘(从数据集中抽取特征)
- 一分钟经理“游戏图”提要
- 个人开发者微信支付和支付宝支付
- 成功解决_catboost.CatBoostError: Bad value for num_feature: Cannot convert ‘b‘\x8f\x91‘‘ to float
- 【2022年蓝桥杯】蓝桥杯第一次海选考试题(5题考试大二)(C#题解)
- SqlMap常用参数(一)
- 牛客国庆集训派对day6T A-	2016【矩阵乘法】
- futuretask java 并发请求_Java并发编程:Callable、Future和FutureTask
- linux启动找不到内核,linux – PXE启动 – 在TFTP服务器上找不到内核
- linux怎样修改目录字体颜色
- Java编程练习题3
- RadASM配色方案工具fix
- 第十六周助教心得体会
- wed基础和http
- 互联网大佬“打脸”简史:马云/雷军/罗永浩/刘强东...
- Appium swip滑动
- linux端口共享打印机,linux如何共享打印机
- 盗号、薅羊毛、机器注册、恶意爬虫——618大促背后涌动的欺诈暗流
- 华中数控系统CNC数据采集
- 无人停车场运行收费系统
热门文章
- 判断非负整数是否是3的倍数_二、因数与倍数教案
- modis数据介绍_【更新90篇】地理数据科学技术文章合集,欢迎大家点赞、在看、转发三连!...
- 牛客题霸 NC3 链表中环的入口结点
- 华硕老毛子(Padavan)——校园局域网路由表设置(校园网优先局域网访问)
- CG CTF MISC MD5
- 模拟电梯1.0(类与对象实验)
- C++的cin和cout取消同步
- Twitter的分布式自增ID算法Snowflake实现分析及其Java、Php和Python版
- 关于tomcat出现闪退问题
- 【CentOS Linux 7】【Linux系统及应用---调研报告】