当前位置: 首页 > news >正文

Python爬虫与MySQL完美结合:从环境搭建到实战优化

🔸 Windows和Linux下MySQL环境搭建

Windows下安装MySQL

首先,在Windows系统下安装MySQL。下载MySQL安装包并按照以下步骤进行安装:

  1. 双击安装包,选择"Custom"安装类型。
  2. 选择MySQL Server,Workbench等组件,点击Next。
  3. 设置Root密码并创建用户。
  4. 完成安装。
Linux下安装MySQL

在Linux系统下,通过包管理器安装MySQL:

sudo apt-get update
sudo apt-get install mysql-server
sudo systemctl start mysql
sudo systemctl enable mysql

🔹 安装完成后,使用以下命令进行安全配置:

sudo mysql_secure_installation

🔸 MySQL表结构设计

设计一个适合爬虫存储数据的MySQL表结构,例如存储文章数据的表:

CREATE TABLE articles (id INT AUTO_INCREMENT PRIMARY KEY,title VARCHAR(255) NOT NULL,author VARCHAR(100),content TEXT,url VARCHAR(255) UNIQUE,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

🔹 这个表结构包含文章的ID、标题、作者、内容、URL和创建时间,能够满足大多数爬虫存储文章数据的需求。


🔸 MySQL动态传参

在Python中使用动态参数传递插入数据到MySQL表中:

import pymysql# 连接到数据库
connection = pymysql.connect(host='localhost',user='yourusername',password='yourpassword',database='yourdatabase'
)try:with connection.cursor() as cursor:# 动态传参插入数据sql = "INSERT INTO articles (title, author, content, url) VALUES (%s, %s, %s, %s)"data = ("文章标题", "作者名", "文章内容", "http://example.com/article")cursor.execute(sql, data)connection.commit()
finally:connection.close()

🔹 通过这种方式,可以灵活地将爬取到的数据插入到MySQL表中。


🔸 MySQL写入规范

为了确保数据一致性和安全性,建议在插入数据时使用事务处理和异常捕获:

import pymysql# 连接到数据库
connection = pymysql.connect(host='localhost',user='yourusername',password='yourpassword',database='yourdatabase'
)try:with connection.cursor() as cursor:# 开始事务connection.begin()# 插入数据sql = "INSERT INTO articles (title, author, content, url) VALUES (%s, %s, %s, %s)"data = ("文章标题", "作者名", "文章内容", "http://example.com/article")cursor.execute(sql, data)# 提交事务connection.commit()
except Exception as e:# 回滚事务connection.rollback()print(f"Error: {e}")
finally:connection.close()

🔹 通过事务处理和异常捕获,可以确保数据的一致性和安全性。


🔸 MySQL对接爬虫实战

将以上知识结合起来,构建一个简单的爬虫,并将爬取到的数据存储到MySQL中:

import requests
from bs4 import BeautifulSoup
import pymysql# 爬取网页数据
url = 'http://example.com/articles'
response = requests.get(url)
html_content = response.content
soup = BeautifulSoup(html_content, 'html.parser')# 连接到数据库
connection = pymysql.connect(host='localhost',user='yourusername',password='yourpassword',database='yourdatabase'
)try:with connection.cursor() as cursor:# 开始事务connection.begin()# 解析并插入数据articles = soup.find_all('div', class_='article')for article in articles:title = article.find('h1').textauthor = article.find('span', class_='author').textcontent = article.find('p', class_='content').texturl = article.find('a')['href']sql = "INSERT INTO articles (title, author, content, url) VALUES (%s, %s, %s, %s)"data = (title, author, content, url)cursor.execute(sql, data)# 提交事务connection.commit()
except Exception as e:# 回滚事务connection.rollback()print(f"Error: {e}")
finally:connection.close()

🔹 在这个示例中,我们爬取网页中的文章数据,并将其插入到MySQL表中,实现了爬虫和数据库的完美对接。


🔸 MySQL优化

为了提升MySQL的性能,可以考虑以下优化措施:

  1. 索引优化:为常用的查询字段添加索引,例如文章表中的titleurl字段。

    CREATE INDEX idx_title ON articles(title);
    CREATE UNIQUE INDEX idx_url ON articles(url);
    
  2. 批量插入:一次性插入多条记录,减少事务提交次数。

    sql = "INSERT INTO articles (title, author, content, url) VALUES (%s, %s, %s, %s)"
    data = [("标题1", "作者1", "内容1", "http://example.com/1"),("标题2", "作者2", "内容2", "http://example.com/2"),# 更多数据...
    ]
    cursor.executemany(sql, data)
    connection.commit()
    
  3. 查询优化:使用适当的查询语句,避免全表扫描。

    SELECT * FROM articles WHERE title LIKE 'Python%' LIMIT 10;
    

🔹 通过这些优化措施,可以显著提升MySQL的性能和查询效率。


🔸 总结

🔹 通过本次学习,我们掌握了在Windows和Linux系统下安装MySQL,设计适合爬虫存储数据的表结构,使用动态参数传递数据,并通过事务处理和异常捕获确保数据的一致性和安全性。此外,还结合实际爬虫示例展示了如何将爬取到的数据存储到MySQL中,并进行了MySQL性能优化。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux——文件(1)
  • SQL注入实例(sqli-labs/less-9)
  • Ubuntu22.04安装Docker教程
  • 微信开放平台更换服务器证书通知
  • Tomcat 漏洞
  • 基于飞腾E2000的科东软件Intewell工业实时操作系统方案
  • 音质提升秘籍:专业音频剪辑软件汇总
  • 【蘑菇书EasyRL】强化学习,笔记整理
  • 数据结构(5.5_1)——哈夫曼树
  • 深入解析 Vue.js 的 nextTick
  • 【从零开始一步步学习VSOA开发】创建VSOA的server端
  • python 定时清理日志(schedule)
  • 2024实验班选拔考试(热身赛)
  • Windows10上安装SQL Server 2022 Express
  • MySQL的安装数据库的简单操作
  • [case10]使用RSQL实现端到端的动态查询
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • 08.Android之View事件问题
  • bootstrap创建登录注册页面
  • create-react-app做的留言板
  • HTTP请求重发
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • Vultr 教程目录
  • 从零开始在ubuntu上搭建node开发环境
  • 高性能JavaScript阅读简记(三)
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 关于springcloud Gateway中的限流
  • 前端面试之CSS3新特性
  • 数据仓库的几种建模方法
  • # Spring Cloud Alibaba Nacos_配置中心与服务发现(四)
  • #FPGA(基础知识)
  • (16)Reactor的测试——响应式Spring的道法术器
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (Note)C++中的继承方式
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (转)一些感悟
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • *算法训练(leetcode)第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
  • *算法训练(leetcode)第四十五天 | 101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104. 建造最大岛屿
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .net6 webapi log4net完整配置使用流程
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • ??javascript里的变量问题
  • @SpringBootApplication 注解
  • @Value读取properties中文乱码解决方案
  • [24年新算法]NRBO-XGBoost回归+交叉验证基于牛顿拉夫逊优化算法-XGBoost多变量回归预测
  • [Android Pro] listView和GridView的item设置的高度和宽度不起作用
  • [APIO2015]巴厘岛的雕塑