爬取数据存储到mysql_将爬虫数据保存到mysql中-爱代码爱编程
连接到数据库pymysql.connect.cursor→创建表CREAT TABLE IF NOT EXISTS→获取网页内容requests.get→解析网页中的链接parsel.Selector.css('a::attr(href)').getall()→将找到的链接插入到数据库INSERT IGNORE INTO
import requests
import parsel
import pymysql
# 使用pymysql库的connect方法连接到MySQL数据库
# 参数包括主机地址、用户名、密码、数据库名称和字符集
db = pymysql.connect(
host="localhost", # 数据库服务器的主机地址,这里使用本地主机地址localhost
user="your_username", # 数据库的用户名,需要替换为实际的用户名
password="your_password", # 数据库的密码,需要替换为实际的密码
database="your_database", # 要连接的数据库名称,需要替换为实际的数据库名称
charset='utf8mb4' # 字符集设置为utf8mb4,以支持更多的Unicode字符,包括emoji
)
# 创建一个数据库游标对象,用于执行SQL查询和获取结果
cursor = db.cursor()
# 使用游标对象执行SQL语句,如果不存在,则创建一个名为links的表
# 表中有两个字段:id(主键,自动递增,不需要自己插入数据)和url(唯一的非空字符串)
cursor.execute('''
CREATE TABLE IF NOT EXISTS links (
id INT AUTO_INCREMENT PRIMARY KEY,
url VARCHAR(1024) NOT NULL UNIQUE
)
''')
# 爬虫部分:
url = "https://example.com"
response = requests.get(url)
response.raise_for_status()
selector = parsel.Selector(response.text)
# 使用CSS选择器查找网页中所有的链接(a标签的href属性)
# 遍历这些链接
for link in selector.css('a::attr(href)').getall():
# 检查链接是否以"http"开头
if link.startswith("http"):
try:
# 使用游标对象执行SQL INSERT语句,将链接插入到links表中
# 使用INSERT IGNORE语句忽略重复插入的错误(如果url已存在,则不插入)
cursor.execute("INSERT IGNORE INTO links (url) VALUES (%s)", (link,))
# 提交事务,确保数据被保存到数据库中
db.commit()
# 打印插入的链接
print(f"Inserted link: {link}")
except pymysql.MySQLError as e: # 捕获MySQL错误异常
# 如果插入操作发生错误,打印错误信息并回滚事务(撤销之前的操作)
print(f"Error inserting link: {link} - {e}")
db.rollback()
# 关闭数据库连接
db.close()