Scrapy框架学习(二)----Item Pipeline(管道)和Scrapy Shell
来源:互联网 发布:大月氏人 人种 知乎 编辑:程序博客网 时间:2024/06/04 20:11
Scrapy框架学习(二)—-Item Pipeline(管道)和Scrapy Shell
Item Pipeline(管道)
当Item在Spider中被收集之后,它将会被传递到Item Pipeline,一些组件会按照一定的顺序执行对Item进行处理。
每个Item Pipeline都是实现了简单方法的Python类,比如决定此Item是丢弃而存储。以下是Item Pipeline的典型应用:
验证爬取的数据(检查爬取的数据是否包含某些字段,数据清洗)
查重(重复的数据丢弃)
将爬取的结果保存到文件或数据库
编写Item Pipeline类
在pipelines.py文件中定义一个Pipeline类,同时必须实现下面的方法:
process_item(self,item,spider)
每个item pipeline组件都需要调用该方法,这个方法必须返回一个Item对象,或是抛出DropItem异常,被丢弃的item将不会被之后的pipeline组件处理。
代码如下:
import jsonclass BaiduPipeline(object): def process_item(self, item, spider): """ 处理item的方法,处理业务逻辑,保存数据,返回item :param item: 是items.py中定义item类 :param spider: 是spiders目录中定义的Spider类 :return: 返回需要的item数据(经过清洗,业务逻辑处理后的item数据) """ print(spider) # 输出 <BaiDuSpider 'baidu' at 0x2133caee358> print(type(spider)) # 输出 <class 'scrapydemo.spiders.baidu_spider.BaiDuSpider'> print(spider.name) # 输出 baidu print(item) # 输出 {'title': '百度一下'} print(type(item)) # 输出 <class 'scrapydemo.items.BaiduItem'> with open('baidu.json', 'w') as f: jsondata = json.dumps(dict(item)) f.write(jsondata) return item
Pipeline 除此之外还可以实现以下方法:
open_spider(self, spider)
当spider被开启是调用该方法。
spider参数:被开启的spider对象
close_spider(self, spider)
当spider被关闭时,这个方法被调用
spider参数:被关闭的spider对象
在settings配置Item Pipeline
在settings.py
文件中,将ITEM_PIPELINES
,注释打开,将我们编写的Item Pipeline配置好。
ITEM_PIPELINES = { # 我们写好的Pipeline的路径,300表示优先级,范围(0-1000),越小级别越高 'scrapydemo.pipelines.BaiduPipeline': 300,}
Scrapy Shell
Scrapy shell是一个交互终端,在未启动spider的情况下尝试及调试你的爬取代码。其本意是用来测试提取数据的代码。不过也可以将其当做正常的Python终端,在上面测试任何的Python代码。
该终端是用来测试XPath或CSS表达式,查看他们的工作方式及爬取的网页中提取的数据。该终端提供了交互性测试您的表达式代码的功能,免去了每次修改后运行spider的麻烦。
启动终端
进入项目的根目录,执行下面的命令,启动shell,以"http://www.baidu.com"
为例,如下:
scrapy shell “http://www.baidu.com”
命令执行后,结果如下图:
在我们执行scrapy shell url
命令后,Scrapy终端根据下载页面会自动创建一些方便使用的对象和可用的快捷命令,如:
可用的对象:
crawler
:当前的Crawler的对象spider
:处理URL的spider。request
:最近获取到的页面的Request对象。response
:包含最近获取到的页面的Response
对象。scrapy
:scrapy 模块 (包含 scrapy.Request, scrapy.Selector等)settings
:当前Scrapy项目的settings.py
可用的快捷命令:
shelp()
:打印可用对象及快捷命令的帮助列表fetch(request_or_url)
:根据给定的url
或request
获取到一个response
,并更新相关的对象view(response)
:在本机的浏览器打开给定的response
。会在response
的body
中添加一个<base>tag
,使得外部链接(例如图片及css
)能正常显示。
eg:
当我们执行scrapy shell "http://www.baidu.com"
命令时,通过response对象调用selector,在调用xpath()。输出xpath查询结果。
print(response.selector.xpath("//title"))# 输出结果:[<Selector xpath='//title' data='<title>百度一下</title>'>]
除此之外,我们也可以通过response.selector.css()
来解析响应的页面数据。
Scrapy还提供了快捷方式,如:response.xpath()
,response.css()
。
eg:
print(response.xpath("//title"))# 输出结果:[<Selector xpath='//title' data='<title>百度一下</title>'>]
Selector选择器
Scrapy Selector内置XPath和CSS Selector表达式机制
Selector
有四个基本的方法,最常用的还XPath
xpath()
:传入xpath
表达式,返回该表达式所对应的所有节点的Selector list
列表。ectract()
:序列化该节点为Unicode
字符串,并返回list。css()
:传入CSS
表达式,返回该表达式所对应的所有节点的selector list
列表,语法同BeautifulSoup4
。re()
:根据传入的正则表达式对数据进行提取,返回Unicode
字符串list
列表。
eg:
# 获取 title 标签的值print(response.xpath("//title/text()")[0].extract())# 输出: 百度一下
- Scrapy框架学习(二)----Item Pipeline(管道)和Scrapy Shell
- Scrapy-Item Pipeline(项目管道)
- Python:Scrapy框架中Item Pipeline组件(项目管道组件)的使用教程
- Scrapy爬虫入门教程九 Item Pipeline(项目管道)
- 爬虫框架Scrapy之Item Pipeline
- scrapy 的 item pipeline
- Scrapy学习笔记VII--Item Pipeline
- scrapy框架学习-爬取腾讯社招信息-item字段和管道文件
- Scrapy笔记(6)- Item Pipeline
- scrapy爬虫之Item Pipeline
- 爬虫Scrapy-04Item Pipeline
- Python爬虫从入门到放弃(十六)之 Scrapy框架中Item Pipeline用法
- Scrapy源码分析-Item Pipeline中文文档(四)
- Scrapy框架学习笔记二
- Scrapy框架学习(1)
- Scrapy爬取网易云音乐和评论(二、Scrapy框架每个模块的作用)
- Scrapy学习笔记(二)
- 爬虫框架--Scrapy学习笔记二
- (初中OJ)2242. 【2017.11.25普及组模拟】Bob
- 【Scikit-Learn 中文文档】集成方法
- jmeter—解决响应乱码问题
- C语言(30)年龄排序
- Laravel 虚拟开发环境Homestead安装
- Scrapy框架学习(二)----Item Pipeline(管道)和Scrapy Shell
- 【JavaWeb】Spring无法@Autowired注入
- android retrofit2.0框架的使用介绍
- 实现adb install替换Android应用的apk后应用自动运行
- Scrapy框架学习(三)----基于Scrapy框架实现的简单爬虫案例
- 【Scikit-Learn 中文文档】多类和多标签算法
- PL/SQL执行sql的原理
- UE4移动组件详解(一)——移动框架与实现原理
- QQ的信息泄露伦理问题