Python爬虫实战:豆瓣Top250电影数据采集与存储
1. 项目介绍
本文将详细解析一个爬取豆瓣Top250电影信息的Python爬虫项目。这个爬虫可以自动获取电影名称、评分、评价人数等信息,并将数据保存到Excel文件中。
2. 技术栈
- Python 3.x
- urllib:处理URL请求
- BeautifulSoup4:解析HTML
- xlwt:Excel文件写入
- HTML/CSS选择器
3. 代码结构分析
3.1 导入必要的库
import urllib.request
from bs4 import BeautifulSoup
import xlwt
- urllib.request:用于发送HTTP请求
- BeautifulSoup:强大的HTML解析工具
- xlwt:用于创建Excel文件并写入数据
3.2 爬虫核心函数
def crawl(url, headers, header_row):
# 发送请求获取页面内容
page = urllib.request.Request(url, headers=headers)
page = urllib.request.urlopen(page)
contents = page.read()
# 解析HTML
soup = BeautifulSoup(contents, "html.parser")
# 查找所有电影条目
datas = soup.find_all(attrs={"class":"item"})
关键步骤解析:
- 使用urllib发送带headers的请求
- 使用BeautifulSoup解析页面内容
- 通过class="item"找到所有电影条目
3.3 数据提取
for (index, tag) in enumerate(datas):
title = tag.select('span.title')[0].text
scope = tag.select('span.rating_num')[0].text
num = tag.select('span')[-2].text
link = tag.select('a')[0].get('href')
数据提取技巧:
- 使用CSS选择器定位元素
- select()方法返回列表,需要通过索引获取具体元素
- text属性获取文本内容
- get()方法获取属性值
3.4 Excel数据存储
# 写入表头
if index == 0:
for j in range(4):
sheet.write(index, j, header_row[j])
# 写入数据
sheet.write(index+1, 0, index+1)
sheet.write(index+1, 1, title)
sheet.write(index+1, 2, scope)
sheet.write(index+1, 3, num)
sheet.write(index+1, 4, link)
Excel操作要点:
- 使用xlwt创建工作簿和工作表
- write()方法接受行号、列号、内容三个参数
- 注意索引从0开始
3.5 主函数设计
if __name__ == '__main__':
url = 'https://movie.douban.com/top250?start={index}'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) \
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
# 创建Excel工作簿和工作表
xl = xlwt.Workbook(encoding='utf-8')
sheet = xl.add_sheet('总用户信息', cell_overwrite_ok=True)
header_row = ["序号", "电影名", "评分", "评价人数", "链接"]
# 循环爬取所有页面
for i in range(0, 251, 25):
crawl(url.format(index=i), headers, header_row)
主函数特点:
- 使用format()方法构造URL
- 设置User-Agent避免被反爬
- 分页爬取,每页25条数据
- 创建Excel文件并设置表头
4. 技术要点总结
-
反爬处理
- 添加User-Agent模拟浏览器
- 可以进一步添加随机延时和代理IP
-
数据解析
- 使用BeautifulSoup的选择器功能
- 结合CSS选择器精确定位元素
-
数据存储
- 使用xlwt库操作Excel
- 支持设置表头和格式化
-
代码优化空间
- 添加异常处理机制
- 引入多线程提高效率
- 增加数据验证和清洗
- 支持断点续爬
5. 注意事项
- 遵守网站robots协议
- 控制爬取频率,避免对目标网站造成压力
- 定期更新User-Agent
- 注意数据编码问题
- 做好异常处理和日志记录
6. 扩展优化建议
- 添加数据库存储支持
- 实现分布式爬虫
- 增加GUI界面
- 添加邮件通知功能
- 支持自定义爬取规则
7. 结语
这个项目虽然简单,但涵盖了爬虫开发的基本要素:请求发送、数据解析、信息提取和结果存储。通过这个案例,我们可以了解爬虫开发的基本流程和注意事项,为开发更复杂的爬虫项目打下基础。
记住,编写爬虫程序时要遵守网站的使用条款和robots协议,合理控制爬取频率,做一个有道德的爬虫工程师。