Python编程:PyThink数据库交互模块提高爬虫编写速度

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS MySQL,高可用系列 2核4GB
简介: Python编程:PyThink数据库交互模块提高爬虫编写速度

PyThink模块 提供了一些快捷方式,用于数据库的基本增、删、改、查

可以让你 如丝般顺滑地向MySQL插入数据

github: https://github.com/mouday/PyThink

安装

pip install pythink

一、使用方式

1、定义数据Model

# -*- coding: utf-8 -*-


from pythink import ThinkModel, ThinkDatabase

# 1、定义数据Model, 定义方式类似peewee
db_url = "mysql://root:123456@127.0.01:3306/demo"
db = ThinkDatabase(db_url)


# demo库的基类,以便复用
class DemoThinkModel(ThinkModel):
database = db


# 方便之处在于不用定义字段
class StudentThinkModel(DemoThinkModel):
"""
学生表
"""

2、插入数据

# -- coding: utf-8 --

# 插入数据
data = {
"name": "Tom",
"age": 23
}

StudentThinkModel.insert(data)


# 插入多条数据
lst = [
{
"name": "Tom",
"age": 23
},
{
"name": "Jack",
"age": 24
}
]

StudentThinkModel.insert(lst)

二、配合Scrapy框架使用

首先回忆一下Scrapy 所提供的数据操作流程

1.png

思路很清晰,不过有个更快的方式

2.png

如果字段过多,而且一次性抓取,实在没必要去定义那么多类,而且项目文件数量会以惊人的速度增加

下面采用后者写一个简单的实例

1、定义model demo_models.py

# -- coding: utf-8 --

# @Date : 2019-05-15
# @Author : Peng Shiyu


from pythink import ThinkModel, ThinkDatabase

db_url = "mysql://root:123456@127.0.01:3306/demo"
db = ThinkDatabase(db_url, echo=True)


class DemoThinkModel(ThinkModel):
database = db


class TitleThinkModel(DemoThinkModel):
"""
定义title 表

create table title(
id int(11) primary key auto_increment,
title varchar(50),
url varchar(100)
) comment '存放爬虫数据'
"""

2、编写爬虫 baidu_spider.py

# -- coding: utf-8 --

from scrapy import Spider
from demo_models import TitleThinkModel


# 定义百度spider
class BaiduSpider(Spider):
name = "baidu_spider"

start_urls = [
"https://www.baidu.com/";
]

def parse(self, response):
title = response.css("title::text").extract_first("")

item = {
"title": title,
"url": response.url
}

TitleThinkModel.insert(item)

3、运行爬虫

$ scrapy runspider baidu_spider.py

4、 查看数据库的数据,数据已经成功入库

mysql> select * from title;

+----+-----------------------------+------------------------+
| id | title | url |
+----+-----------------------------+------------------------+
| 1 | 百度一下,你就知道 | https://www.baidu.com/ |
+----+-----------------------------+------------------------+
1 row in set (0.00 sec)

三、总结

第一、项目结构

回头看下,按照原来的方式,我们应该至少会定义 3 个文件:


  1. spider
  2. item
  3. pipline

现在,我们一共定义了2个文件

  1. spider
  2. model

文件减少,意味着项目文件会减少,代码量减少,何乐不为?

第二、性能

原有方式,使用yield 返回Item对象,速度上是要快一些


不过你必须在项目中使用全局搜索,才能搜索到哪个地方在处理这个Item ,在IDE中不能直接跳转,很不方便


使用后者,能够轻松的知道是哪个地方在处理这个数据,使得项目易于维护


使用ThinkModel 还可以在其中进行自定义扩展,增加其他操作,那是后话了


最后

总之,使用item-pipline 方式编写复杂,性能好;使用model 方式编写容易,会降低性能。

当然,一个折中的方式是将model写入操作移到pipline中使用

            </div>
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
7月前
|
数据采集 测试技术 C++
无headers爬虫 vs 带headers爬虫:Python性能对比
无headers爬虫 vs 带headers爬虫:Python性能对比
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
524 6
|
7月前
|
数据采集 存储 监控
Python 原生爬虫教程:网络爬虫的基本概念和认知
网络爬虫是一种自动抓取互联网信息的程序,广泛应用于搜索引擎、数据采集、新闻聚合和价格监控等领域。其工作流程包括 URL 调度、HTTP 请求、页面下载、解析、数据存储及新 URL 发现。Python 因其丰富的库(如 requests、BeautifulSoup、Scrapy)和简洁语法成为爬虫开发的首选语言。然而,在使用爬虫时需注意法律与道德问题,例如遵守 robots.txt 规则、控制请求频率以及合法使用数据,以确保爬虫技术健康有序发展。
1084 31
|
6月前
|
数据采集 存储 NoSQL
分布式爬虫去重:Python + Redis实现高效URL去重
分布式爬虫去重:Python + Redis实现高效URL去重
|
7月前
|
数据采集 XML 存储
Headers池技术在Python爬虫反反爬中的应用
Headers池技术在Python爬虫反反爬中的应用
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
829 4
|
数据采集 存储 JSON
从零到一构建网络爬虫帝国:HTTP协议+Python requests库深度解析
【7月更文挑战第31天】在网络数据的海洋中,使用Python的`requests`库构建网络爬虫就像探索未知的航船。HTTP协议指导爬虫与服务器交流,收集信息。HTTP请求包括请求行、头和体,响应则含状态行、头和体。`requests`简化了发送各种HTTP请求的过程。
251 4
|
数据采集 存储 搜索推荐
打造个性化网页爬虫:从零开始的Python教程
【8月更文挑战第31天】在数字信息的海洋中,网页爬虫是一艘能够自动搜集网络数据的神奇船只。本文将引导你启航,用Python语言建造属于你自己的网页爬虫。我们将一起探索如何从无到有,一步步构建一个能够抓取、解析并存储网页数据的基础爬虫。文章不仅分享代码,更带你理解背后的逻辑,让你能在遇到问题时自行找到解决方案。无论你是编程新手还是有一定基础的开发者,这篇文章都会为你打开一扇通往数据世界的新窗。
|
数据采集 存储 数据挖掘
深入探索 Python 爬虫:高级技术与实战应用
本文介绍了Python爬虫的高级技术,涵盖并发处理、反爬虫策略(如验证码识别与模拟登录)及数据存储与处理方法。通过asyncio库实现异步爬虫,提升效率;利用tesseract和requests库应对反爬措施;借助SQLAlchemy和pandas进行数据存储与分析。实战部分展示了如何爬取电商网站的商品信息及新闻网站的文章内容。提醒读者在实际应用中需遵守法律法规。
460 66
|
数据采集 前端开发 中间件
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第26天】Python是一种强大的编程语言,在数据抓取和网络爬虫领域应用广泛。Scrapy作为高效灵活的爬虫框架,为开发者提供了强大的工具集。本文通过实战案例,详细解析Scrapy框架的应用与技巧,并附上示例代码。文章介绍了Scrapy的基本概念、创建项目、编写简单爬虫、高级特性和技巧等内容。
523 4