豆瓣电影Top250是影迷们评选的经典电影榜单,通过Python爬虫可以高效地获取这一数据。本文将介绍基于HTTP协议的爬虫实现方法,涵盖基本原理、关键步骤及常见问题解决。
一、爬虫原理与准备
爬虫通过模拟浏览器发送HTTP请求,获取目标网页的HTML内容,再解析提取所需数据。需使用requests库发送请求,BeautifulSoup或lxml解析HTML。需遵守豆瓣的robots.txt规则,控制请求频率避免被封禁。
二、实现步骤
1.
分析页面结构:
访问豆瓣Top250,观察电影条目在HTML中的位置,发现每部电影信息位于
标签内。
2.
3.
发送HTTP请求:
4.
5.
python
6.
7.
| import requests | |
|---|---|
| url = 'movie.douban.com/top250?star…' | |
| headers = {'User-Agent': 'Mozilla/5.0'} # 模拟浏览器访问 | |
| response = requests.get(url.format(0), headers=headers) |
8.
9.
解析HTML并提取数据:
10.
11.
python
12.
13.
| from bs4 import BeautifulSoup | |
|---|---|
| soup = BeautifulSoup(response.text, 'html.parser') | |
| items = soup.find_all('div', class_='item') | |
| for item in items: | |
| title = item.find('span', class_='title').text | |
| rating = item.find('span', class_='rating_num').text | |
| comment_num = item.find('div', class_='star').find_all('span')[-1].text.replace('人评价', '') | |
| print(f"{title} 评分:{rating} 评论数:{comment_num}") |
14.
15.
分页遍历:
榜单共250条,每页25条,需循环10次,修改URL中的start参数(0,25,50...225)。
16.
三、反爬应对与数据清洗
· 反爬机制:豆瓣可能检查请求头或IP频率,可添加Referer、Cookie等请求头,或使用代理IP池。
· 动态加载:若页面数据通过JavaScript加载,需改用Selenium或分析XHR请求直接获取JSON数据。
· 数据清洗:提取时需处理缺失值(如try-except捕获异常),并转换评论数为整数类型。
四、总结
通过Python爬虫抓取豆瓣Top250,我们掌握了HTTP请求、HTML解析、分页处理及反爬应对的核心技能。实际开发中需注重代码的健壮性和合法性,遵守目标网站的规定,合理设置请求间隔,确保数据抓取的可持续性。