开发者社区> fesoncn> 正文

存储大量爬虫数据的数据库,了解一下?

简介: "当然, 并不是所有数据都适合" 在学习爬虫的过程中, 遇到过不少坑. 今天这个坑可能以后你也会遇到, 随着爬取数据量的增加, 以及爬取的网站数据字段的变化, 以往在爬虫入门时使用的方法局限性可能会骤增.
+关注继续查看

"当然, 并不是所有数据都适合"

在学习爬虫的过程中, 遇到过不少坑.

今天这个坑可能以后你也会遇到, 随着爬取数据量的增加, 以及爬取的网站数据字段的变化, 以往在爬虫入门时使用的方法局限性可能会骤增.

怎么个骤增法?

Intro 引例

在爬虫入门的时候, 我们爬取豆瓣电影Top250这些数据量并不是很大的网页时(仅计算文本数据量), 通常无需考虑数据存储的效率问题, 使用MySQL这些关系型数据库, 或者用TXT, CSV等文本格式存储, 都可以很快地存储完毕, Spider也可以跟着快速关闭. 因此我们感觉不到上述方式的弊端.

起初, 我爬的数据量在几千条时, 我选择用MySQL作为数据存储的数据库,
爬取结束时, 存储的时间花了几秒, 我还没有太在意.

爬取数据

但是当我爬取的数据量到了200M左右时, 问题非常明显了. 此时用MySQL存储, 半小时都无法关闭Spider! 如果添加了查重, 时间将会指数增长.

而使用CSV存储, 虽然关闭花不了特别多时间, 但是打开关闭文件所需的时间同样不少! Excel直接无法打开, Sublime和VS Code则要花费十几秒的时间来打开.

数据打开缓慢

图 : 正在打开CSV的Sublime Text

在后续对CSV中的数据进行基本的格式化后发送到Django可视化时, 打开网页的处理时间接近1分30秒. 速度感人.

感人的速度让我意识到要换一种方式来存储和处理数据, 本文仅对数据存储部分做过相应测试.

我将眼光瞄准了NoSQL中的MongoDB.

What's NoSQL

关系型数据库一直是计算机相关专业的必修课, 在过去的很长时间, 占据了互联网数据量的很大一部分. 但是随着大数据时代到来, 关系型数据库已然满足不了某些大数据的处理要求.

数据量变化
image.png

NoSQL,指的是非关系型的数据库。NoSQL也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。

NoSQL用于超大规模数据的存储。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

What's MongoDB

  • MongoDB是一种非关系型数据库, 是一个面向文档存储的数据库,操作起来比较简单和容易.
  • 可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性.
  • MongoDB支持RUBY,Python,Java,C++,PHP,C#等多种语言
  • Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组
  • 内建支持Map和Reduce函数, 可对数据进行批量和聚合操作.

Why MongoDB

将目光放在MongoDB这样的文档型NoSQL身上, 是因为爬取的数据

  • 对一致性要求不高
  • 读写的速度要求较高
  • 遇到数据字段发生变化时, 可以更方便的添加字段, 无需改变以前的数据结构.

How TO

1. Step 1 安装MongoDB

安装MongoDB, 参考文档https://docs.mongodb.com/manual/administration/install-community/

安装pymongo, 如果你使用pip安装方式, 直接在终端中键入
pip install pymongo

安装成功的检测, 在python的shell中import pymongo不报错即可.

2. Step 2 添加项目配置

添加配置信息
在Scrapy项目的settings.py中添加以下代码

MONGO_HOST = "127.0.0.1" #主机IP
MONGO_PORT = 27017       #端口号
MONGO_DB = "Spider"      #库名
MONGO_COLL = "jobinfo"   #collection名
# MONGO_USER = ""
# MONGO_PSW = ""

代码片中的端口号为默认端口号, 如果安装后进行了修改, 以修改后为准, 库名及Collection名同上.

MongoDB支持动态创建, 因此你并不需要提前创建数据库和下属的Collection

3. Step 3 启用MongoDB存储Pipeline

在你Scrapy项目的pipelines.py中添加以下的方法(注意函数要写在某个Pipeline类中, 并在settings.py中启用对应的Pipeline, 如果你已经启用, 直接添加即可):

# 在Python中使用mongoDB的所需的包
import pymongo

# 配置mongoDB所需的包
from scrapy.conf import settings

def __init__(self):
        # connect to db
        self.client = pymongo.MongoClient(host=settings['MONGO_HOST'], port=settings['MONGO_PORT'])
        # ADD if NEED account and password
        # 当需要使用数据库的用户名和密码, 取消以下的注释, MongoDB支持直接查询, 无需登录
        # self.client.admin.authenticate(host=settings['MONGO_USER'], settings['MONGO_PSW'])
        # 设置数据库客户端类型
        self.db = self.client[settings['MONGO_DB']]
        # 取得数据库句柄
        self.coll = self.db[settings['MONGO_COLL']]

然后在同个文件下处理item的函数末尾中添加以下代码:

def process_item(self, item, spider):
    # .....
    postItem = dict(item)
    self.coll.insert(postItem)
    # 在终端中显示你的爬取数据
    return item
4. Step 4 Enjoy

在终端中运行你的爬虫, 待数据爬取完毕, Spider迅速关闭, 而数据已经写入数据库!
在终端中键入

# 切换数据库
use Spider
# 查找所有数据, pretty()函数用于格式化数据显示
# jobinfo为collection名称
db.jobinfo.find().pretty()
image.png

QQ联系: 994342122(不闲聊)
邮箱: fesonx@foxmail.com

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
爬虫的伪装,数据乱码的解决
# 引言 今天给大家带来第二篇爬虫的文章,主要给大家从爬虫的伪装,数据乱码和视频的爬取三个方面来学习python爬虫 # 爬虫的伪装 这里分别从### **浏览器伪装** **访问地址伪装** **3.ip地址伪装** **4.控制访问速率** **5.伪装用户cookie** **6.被拒绝连接的处理** 六个方面来讲解爬虫的伪装 ## **浏览器伪装** 默认的爬虫是形如Python-[urllib](https://so.csdn.net/so/search?q=urllib&spm=1001.2101.3001.7020)/2.1的形式的,很多网站可能会在校验
16 0
星星充电 充电桩数据爬虫
星星充电 充电桩数据爬虫
98 0
爬虫识别-准备离线计算数据| 学习笔记
快速学习爬虫识别-准备离线计算数据
95 0
爬虫识别-指标碰撞-准备数据代码实现| 学习笔记
快速学习爬虫识别-指标碰撞-准备数据代码实现
58 0
爬虫识别-指标碰撞-准备数据 avi| 学习笔记
快速学习爬虫识别-指标碰撞-准备数据 avi
77 0
爬虫识别-过滤非爬虫数据总结| 学习笔记
快速学习爬虫识别-过滤非爬虫数据总结
26 0
爬虫识别-过滤非爬虫数据| 学习笔记
快速学习爬虫识别-过滤非爬虫数据
55 0
爬虫识别-Redis 爬虫数据备份-准备数据| 学习笔记
快速学习爬虫识别-Redis 爬虫数据备份-准备数据
39 0
爬虫识别-读取预处理后的数据到爬虫识别程序|学习笔记
快速学习爬虫识别-读取预处理后的数据到爬虫识别程序。
49 0
Python爬虫通过selenium自动化抓取淘宝的商品数据
淘宝的页面大量使用了js加载数据,所以采用selenium来进行爬取更为简单,selenum作为一个测试工具,主要配合无窗口浏览器phantomjs来使用。
303 0
+关注
fesoncn
Python爬虫,翻译,摄影
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
《阿里云数据库 MongoDB 专属集群版》
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关实验场景
更多