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

🔸 Windows和Linux下MySQL环境搭建

Windows下安装MySQL

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

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

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

bash 复制代码
sudo apt-get update
sudo apt-get install mysql-server
sudo systemctl start mysql
sudo systemctl enable mysql

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

bash 复制代码
sudo mysql_secure_installation

🔸 MySQL表结构设计

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

sql 复制代码
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表中:

python 复制代码
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写入规范

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

python 复制代码
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中:

python 复制代码
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').text
            author = article.find('span', class_='author').text
            content = article.find('p', class_='content').text
            url = 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字段。

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

    python 复制代码
    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. 查询优化:使用适当的查询语句,避免全表扫描。

    sql 复制代码
    SELECT * FROM articles WHERE title LIKE 'Python%' LIMIT 10;

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


🔸 总结

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

相关推荐
冷雨夜中漫步1 分钟前
Python快速入门(6)——for/if/while语句
开发语言·经验分享·笔记·python
郝学胜-神的一滴22 分钟前
深入解析Python字典的继承关系:从abc模块看设计之美
网络·数据结构·python·程序人生
百锦再24 分钟前
Reactive编程入门:Project Reactor 深度指南
前端·javascript·python·react.js·django·前端框架·reactjs
喵手2 小时前
Python爬虫实战:旅游数据采集实战 - 携程&去哪儿酒店机票价格监控完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集结果csv导出·旅游数据采集·携程/去哪儿酒店机票价格监控
Coder_Boy_2 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
2501_944934732 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python
helloworldandy2 小时前
使用Pandas进行数据分析:从数据清洗到可视化
jvm·数据库·python
肖永威4 小时前
macOS环境安装/卸载python实践笔记
笔记·python·macos
TechWJ4 小时前
PyPTO编程范式深度解读:让NPU开发像写Python一样简单
开发语言·python·cann·pypto
数据知道4 小时前
PostgreSQL 故障排查:如何找出数据库中最耗时的 SQL 语句
数据库·sql·postgresql