爬取豆瓣电影5000条电影数据的Python代码
时间: 2025-01-25 07:14:08 浏览: 40
以下是一个用于爬取豆瓣电影5000条电影数据的Python代码示例:
```python
import requests
from bs4 import BeautifulSoup
import time
import random
# 设置请求头,模拟浏览器行为
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)\
Chrome/91.0.4472.124 Safari/537.36'
}
# 存储电影数据的列表
movies = []
# 爬取豆瓣电影数据的函数
def crawl_douban_movies(start, end):
for i in range(start, end):
url = f'https://movie.douban.com/top250?start={i}&filter='
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
for item in soup.find_all('div', class_='item'):
title = item.find('span', class_='title').text
info = item.find('div', class_='bd').p.get_text().strip().replace('\n', ' ')
rating = item.find('span', class_='rating_num').text
num_ratings = item.find('div', class_='star').find_all('span')[-1].text
movies.append({
'title': title,
'info': info,
'rating': rating,
'num_ratings': num_ratings
})
print(f'已爬取第 {i+1} - {i+25} 条数据')
time.sleep(random.uniform(1, 3)) # 随机暂停1-3秒,避免被封IP
# 主程序
if __name__ == '__main__':
total_movies = 5000
movies_per_page = 25
total_pages = (total_movies // movies_per_page) + (1 if total_movies % movies_per_page else 0)
for i in range(0, total_pages, 10): # 每次爬取10页
start = i * movies_per_page
end = start + 250 # 每次爬取250条数据
if end > total_movies:
end = total_movies
crawl_douban_movies(start, end)
print(f'已爬取 {end} 条数据')
print(f'总共爬取 {len(movies)} 条数据')
```
这个代码使用了`requests`库来发送HTTP请求,`BeautifulSoup`库来解析HTML内容。它爬取豆瓣电影Top250的数据,并通过循环多次爬取来达到5000条数据。
请注意以下几点:
1. 这个代码可能会被豆瓣的反爬虫机制检测到。为了减少被封IP的风险,代码中加入了随机的暂停时间。
2. 爬取大量数据可能会对目标网站造成压力,请谨慎使用,并确保遵守相关网站的使用条款。
3. 爬取的数据仅用于学习或研究目的,请勿用于商业用途。
4. 根据实际情况,你可能需要调整爬取策略或添加更多的异常处理。
阅读全文
相关推荐


















