写出完整代码:用Python爬取豆瓣电影Top250(https://movie.douban.com/top250)的数据,以获取豆瓣电影Top250页面的信息,包括电影名称、导演、主演、评分、年份等详细信息,其中评分为数值型数据,年份为日期型数据,其余为字符串型数据
时间: 2025-02-22 22:31:59 浏览: 305
为了帮助您完成这个任务,我会提供一个基本的 Python 爬虫代码示例,使用 `requests` 库来发送 HTTP 请求,以及 `BeautifulSoup` 库解析 HTML 内容。请注意,实际的网页结构可能会有所变化,因此这只是一个基础版本,可能需要针对豆瓣的具体页面布局进行调整。
```python
import requests
from bs4 import BeautifulSoup
import re
from datetime import datetime
# 发送GET请求获取HTML内容
url = "https://movie.douban.com/top250"
response = requests.get(url)
html_content = response.text
# 使用BeautifulSoup解析HTML
soup = BeautifulSoup(html_content, 'lxml')
# 查找并提取所需信息的CSS选择器,这里假设一些常见字段的CSS选择器
title_css = ".title a span::text" # 电影名称
director_css = ".info .bd h3 a::text" # 导演
actor_css = ".info .bd p a span::text" # 主演
rating_css = ".rating_num::text" # 评分
year_css = ".year::text" # 年份
data_list = []
# 遍历每部电影的元素
for item in soup.find_all('div', class_='item'):
title = item.select_one(title_css).get_text()
director = item.select_one(director_css).get_text().strip() if director_css else ""
actor = item.select_one(actor_css).get_text().split(" / ")[0] if actor_css else ""
rating = float(item.select_one(rating_css).replace('(', '').replace(')', '')) if rating_css else None
year = int(re.search(r'\d+', item.select_one(year_css)).group(0)) if year_css else None
# 将日期转换成datetime对象
if year and rating:
release_date = datetime.strptime(f"{year}", '%Y')
else:
release_date = None
movie_data = {
"电影名称": title,
"导演": director,
"主演": actor,
"评分": rating,
"年份": release_date,
}
data_list.append(movie_data)
# 打印或保存数据
for index, movie in enumerate(data_list, start=1):
print(f"第 {index} 名:{movie['电影名称']}")
print(f"导演:{movie['导演']}")
print(f"主演:{movie['主演']}")
print(f"评分:{movie['评分']} 分")
print(f"上映年份:{movie['年份']}")
print("\n")
# 如果你想将结果保存到文件,可以使用json库
# with open('douban_movie_data.json', 'w') as f:
# json.dump(data_list, f, indent=2)
```
注意:实时运行此代码前,请确认豆瓣网站允许爬虫抓取数据,并遵守其使用条款。此外,由于网页结构可能会发生变化,上述代码可能需要根据最新页面样式进行修改。
阅读全文
相关推荐
















