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

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云数据库 MongoDB,通用型 2核4GB
简介: "当然, 并不是所有数据都适合"在学习爬虫的过程中, 遇到过不少坑.今天这个坑可能以后你也会遇到, 随着爬取数据量的增加, 以及爬取的网站数据字段的变化, 以往在爬虫入门时使用的方法局限性可能会骤增.

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

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

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

怎么个骤增法?

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

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
2天前
|
人工智能 Cloud Native 大数据
涛思数据荣获 CCF 数据库专委会铂金合作伙伴
CCF SiftDB 2024在南宁落幕,聚焦数据库前沿,200余专家共议数据要素。涛思数据签署成为CCF铂金合作伙伴,创始人陶建辉强调技术创新与生态建设,TDengine已服务全球超545k实例,广泛应用于多元领域。未来,将持续深化合作,共创数据库产业辉煌。
10 0
|
3天前
|
关系型数据库 MySQL API
实时计算 Flink版操作报错合集之同步MySQL数据到另一个MySQL数据库,第一次同步后源表数据发生变化时目标表没有相应更新,且Web UI中看不到运行的任务,该怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
3天前
|
SQL 弹性计算 API
云服务器 ECS产品使用问题之如何通过API调用阿里云服务器上SQL Server数据库中的数据
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
4天前
|
存储 监控 物联网
时间序列数据库:处理时间数据的利器
【6月更文挑战第16天】时间序列数据库(TSDB)是处理按时间顺序排列数据的专用工具,优化了数据压缩、查询性能和可扩展性,适合高并发写入与实时查询。TSDB在存储成本、查询效率和实时分析上具优势,广泛应用在物联网、金融、能源和制造业等领域,随着技术发展,其重要性日益凸显。
|
4天前
|
存储 NoSQL 算法
图数据库:连接数据的新模式
【6月更文挑战第16天】图数据库是处理复杂关系数据的新兴技术,使用节点、边和属性表示数据间关系。它提供强大的关系表达能力、灵活性、实时性和扩展性。新模式包括关系网络可视化、基于路径的查询、内置图算法支持,适用于推荐系统和社交网络分析,助力企业挖掘数据价值并应对大数据时代挑战。随着技术发展,图数据库将在数据连接和分析中扮演关键角色。
|
4天前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用问题之在进行Oracle数据库的全量同步时,只同步了一条数据而源表实际上包含多条数据,是什么原因
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
4天前
|
数据采集 存储 数据挖掘
Python网络爬虫实战:抓取并分析网页数据
使用Python的`requests`和`BeautifulSoup`,本文演示了一个简单的网络爬虫,抓取天气网站数据并进行分析。步骤包括发送HTTP请求获取HTML,解析HTML提取温度和湿度信息,以及计算平均温度。注意事项涉及遵守robots.txt、控制请求频率及处理动态内容。此基础爬虫展示了数据自动收集和初步分析的基础流程。【6月更文挑战第14天】
69 9
|
5天前
|
SQL 关系型数据库 数据库
实时计算 Flink版产品使用问题之如何同步一个数据库的数据转换到另一个库
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
1天前
|
数据采集 前端开发 JavaScript
Python爬虫技术:动态JavaScript加载音频的解析
Python爬虫技术:动态JavaScript加载音频的解析
|
13天前
|
数据采集 存储 Web App开发
Python爬虫实战:从入门到精通
Python是开发网络爬虫的首选语言,因其简洁语法和丰富库如requests, BeautifulSoup, Scrapy。爬虫涉及HTTP交互、HTML解析及法律道德问题。以下是爬取豆瓣电影Top250的步骤:确定目标,分析网站,安装必要库(requests, BeautifulSoup),编写代码抓取电影名称、评分和简介,处理异常并优化,如设置请求间隔、使用代理IP和遵循Robots协议。

热门文章

最新文章