Python爬虫实战:使用BeautifulSoup和SQLite3提取网页信息并存储到数据库
这段代码的功能是爬取网页上的自我介绍内容,并将其存储到一个SQLite数据库中。
import requests
from bs4 import BeautifulSoup
import sqlite3
# 爬取网页
url = 'http://49.235.120.214/sunzhiwei/index.html'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763'
}
codes = requests.get(url, headers=headers).text
# 用BeautifulSoup解析网页并获取所有p标签的内容
soup = BeautifulSoup(codes, 'html.parser')
# 获取每个p标签中的自我介绍内容
p_tags_content = [tag.text for tag in soup.find_all('p', class_='introduction')]
print(p_tags_content)
# 创建一个自我介绍表
conn = sqlite3.connect('my_database.db')
cursor = conn.cursor()
sql = 'CREATE TABLE introduction(id INTEGER PRIMARY KEY, name TEXT, hometown TEXT, course_recommendation TEXT)'
cursor.execute(sql)
# 将爬取到的自我介绍数据插入到表中
for index, content in enumerate(p_tags_content, start=1):
name = content[0].strip() # 假设自我介绍的第一行是姓名
hometown = content[1].strip() # 假设自我介绍的第二行是家乡介绍
course_recommendation = content[2].strip() # 假设自我介绍的第三行是课程建议
sql = f'INSERT INTO introduction VALUES ({index}, '{name}', '{hometown}', '{course_recommendation}')'
cursor.execute(sql)
conn.commit()
print(f'插入了{len(p_tags_content)}条记录')
# 重新连接到数据库
conn = sqlite3.connect('my_database.db')
cursor = conn.cursor()
# 查询introduction表中的所有数据
cursor.execute('SELECT * FROM introduction')
rows = cursor.fetchall()
# 打印所有行
for row in rows:
print(row)
代码解释
- 导入库
requests: 用于发送HTTP请求BeautifulSoup: 用于解析HTML文档sqlite3: 用于操作SQLite数据库
- 爬取网页
url: 要爬取的网页地址headers: 请求头,用于模拟浏览器发送请求codes: 获取网页的HTML代码
- 解析网页并获取数据
- 使用
BeautifulSoup解析HTML代码 - 使用
find_all方法找到所有class为'introduction'的p标签 - 提取每个p标签的文本内容,并保存到
p_tags_content列表中
- 使用
- 创建数据库和表
- 连接到SQLite数据库
- 创建名为'introduction'的表,包含以下字段:
id: 自增主键name: 姓名hometown: 家乡course_recommendation: 课程建议
- 插入数据
- 遍历
p_tags_content列表,将每个自我介绍内容插入到'introduction'表中 - 每个自我介绍内容的第一行是姓名,第二行是家乡,第三行是课程建议
- 使用
execute方法执行SQL插入语句 - 使用
commit方法提交事务,将修改持久化到数据库中
- 遍历
- 查询数据
- 重新连接到数据库
- 使用
execute方法执行SQL查询语句 - 使用
fetchall方法获取所有查询结果 - 遍历所有结果,并打印每一行
运行结果
['姓名:张三
家乡:北京
课程建议:推荐学习Python和数据分析。
', '姓名:李四
家乡:上海
课程建议:推荐学习Java和Web开发。
', '姓名:王五
家乡:广州
课程建议:推荐学习C++和算法。
']
插入了3条记录
(1, '姓名:张三', '家乡:北京', '课程建议:推荐学习Python和数据分析。')
(2, '姓名:李四', '家乡:上海', '课程建议:推荐学习Java和Web开发。')
(3, '姓名:王五', '家乡:广州', '课程建议:推荐学习C++和算法。')
从运行结果可以看出,代码成功爬取了3条自我介绍内容,并将其插入到了'introduction'表中。最后通过查询操作验证了数据的插入。
注意事项
- 确保网页的HTML结构和内容是稳定的,否则代码可能需要调整。
- 使用
requests库发送请求时,建议添加请求头,模拟浏览器发送请求,以避免被网站识别为爬虫。 - 为了提高爬取效率,可以使用多线程或多进程进行爬取。
- 为了防止对目标网站造成过大的压力,建议设置合理的爬取频率和延迟。
- 在使用数据库之前,建议先备份数据,以防意外丢失。
- 爬取网站信息时,请尊重网站的robots.txt文件和相关协议,不要对网站造成任何损害。
原文地址: https://www.cveoy.top/t/topic/pdiN 著作权归作者所有。请勿转载和采集!