糗事百科段子爬取
2021-10-24 本文已影响0人
汪小鱼
项目示例:糗事百科段子爬取并基于终端进行持久化存储
![](https://img.haomeiwen.com/i26963789/ef6a14473dd5b79b.png)
1)创建项目
![](https://img.haomeiwen.com/i26963789/683aca96702ab446.png)
2)编写爬虫
![](https://img.haomeiwen.com/i26963789/b907b8c05545269a.png)
3)修改配置
![](https://img.haomeiwen.com/i26963789/cf243da9d56b824f.png)
4)执行程序
![](https://img.haomeiwen.com/i26963789/dd7274cee8c400e6.png)
基于终端指令的持久化存储
要求:只可以将 parse 方法的返回值存储到本地的文本文件中
注意:持久化存储对应的文本文件的类型只可以为:'json', 'csv' 等指定类型
指令:scrapy crawl spidername -o filepath
好处:简介高效便捷
缺点:局限性比较强(数据只可以存储到指定后缀的文本文件中)
基于管道的持久化存储
1)数据解析(参照上文)
![](https://img.haomeiwen.com/i26963789/37819627500f93ce.png)
2)在 item 类中定义相关的属性(items.py:数据结构模板文件,定义数据属性)
![](https://img.haomeiwen.com/i26963789/43bb34856225124f.png)
3)将解析的数据封装存储到 item 类型的对象
![](https://img.haomeiwen.com/i26963789/d2b5f8c20a5ce6a9.png)
4)将 item 类型的对象提交给管道进行持久化存储的操作
![](https://img.haomeiwen.com/i26963789/076d886a43e3045e.png)
5)在管道类的 process_item 中要将其接受到的 item 对象中存储的数据进行持久化存储操作
![](https://img.haomeiwen.com/i26963789/410123d2a33cb8c6.png)
6)在配置文件中开启管道
![](https://img.haomeiwen.com/i26963789/2aa350640998a24f.png)
- 程序执行
![](https://img.haomeiwen.com/i26963789/1a534dbb09a9e870.png)
- 好处:通用性更强
补充
如果最终需要将爬取到的数据值一份存储到磁盘文件,一份存储到数据库中,则应该如何操作 scrapy?
![](https://img.haomeiwen.com/i26963789/ca22d28a813b9bdb.png)
![](https://img.haomeiwen.com/i26963789/0249bf5d705c1ac3.png)
![](https://img.haomeiwen.com/i26963789/c5ccf5086f39b89f.png)
上述代码中,字典中的两组键值分别表示会执行管道文件中对应的两个管道类中的 process_item 方法,实现两种不同形式的持久化操作。
知识小结
1)管道文件中一个管道类对应的是将数据存储到一种平台
2)爬虫文件提交的item只会给管道文件中第一个被执行的管道类接受
3)process_item 中的 return item 表示将 item 传递给下一个即将被执行的管道类