豆瓣Top250电影数据采集与存储

59 阅读3分钟

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"})

关键步骤解析:

  1. 使用urllib发送带headers的请求
  2. 使用BeautifulSoup解析页面内容
  3. 通过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. 技术要点总结

  1. 反爬处理

    • 添加User-Agent模拟浏览器
    • 可以进一步添加随机延时和代理IP
  2. 数据解析

    • 使用BeautifulSoup的选择器功能
    • 结合CSS选择器精确定位元素
  3. 数据存储

    • 使用xlwt库操作Excel
    • 支持设置表头和格式化
  4. 代码优化空间

    • 添加异常处理机制
    • 引入多线程提高效率
    • 增加数据验证和清洗
    • 支持断点续爬

5. 注意事项

  1. 遵守网站robots协议
  2. 控制爬取频率,避免对目标网站造成压力
  3. 定期更新User-Agent
  4. 注意数据编码问题
  5. 做好异常处理和日志记录

6. 扩展优化建议

  1. 添加数据库存储支持
  2. 实现分布式爬虫
  3. 增加GUI界面
  4. 添加邮件通知功能
  5. 支持自定义爬取规则

7. 结语

这个项目虽然简单,但涵盖了爬虫开发的基本要素:请求发送、数据解析、信息提取和结果存储。通过这个案例,我们可以了解爬虫开发的基本流程和注意事项,为开发更复杂的爬虫项目打下基础。

记住,编写爬虫程序时要遵守网站的使用条款和robots协议,合理控制爬取频率,做一个有道德的爬虫工程师。