用python代码实现抓取豆瓣电影 top250中前 10 页的 数据,包含'电影名称','导演和演员','年份', '国家','类型','排名','评级评分', '评价人数', '评价'信息,然后存储在 csv 文件中。
时间: 2023-06-05 22:04:42 浏览: 268
计算机网络课程爬虫实验.docx
可以的,请等待一下,我来为您检索代码。
以下是 Python 代码,可以实现您所需的功能:
```python
import requests
from bs4 import BeautifulSoup
import csv
def crawl_movie_data(page):
"""
抓取电影信息
:param page: 页面编号,每页包含25部电影
:return: 电影信息列表,每个元素为一个字典
"""
# 构造请求url
url = f"https://movie.douban.com/top250?start={(page-1)*25}&filter="
# 发送请求,获取响应
response = requests.get(url)
# 解析响应,获取页面内容
bs = BeautifulSoup(response.content, "lxml")
# 获取电影列表
movie_list = bs.find_all("div", {"class": "info"})
# 定义电影信息列表
movie_info_list = []
# 遍历电影列表,提取电影信息
for movie in movie_list:
# 获取电影名称
title = movie.find("span", {"class": "title"}).text
# 获取导演和演员
actor = movie.find("div", {"class": "bd"}).find("p").text.strip()
# 获取年份、国家、类型信息
other_info = movie.find("div", {"class": "bd"}).find("p", {"class": ""}).text.strip()
# 解析年份、国家、类型信息
try:
year = other_info.split("/")[0].strip()
country = other_info.split("/")[1].strip()
category = other_info.split("/")[-1].strip()
except:
year, country, category = "", "", ""
# 获取排名
rank = movie.find("em").text
# 获取评级评分
rating_info = movie.find("div", {"class": "star"})
rating = rating_info.find("span", {"class": "rating_num"}).text
rating_count = rating_info.find_all("span")[-1].text.split("人评价")[0]
# 获取评价信息
quote = movie.find("span", {"class": "inq"}).text
# 构造电影信息字典
movie_info = {
"电影名称": title,
"导演和演员": actor,
"年份": year,
"国家": country,
"类型": category,
"排名": rank,
"评级评分": rating,
"评价人数": rating_count,
"评价": quote
}
# 将字典添加到电影信息列表
movie_info_list.append(movie_info)
# 返回电影信息列表
return movie_info_list
# 定义电影信息列表
movie_info_list = []
# 抓取前10页的数据
for page in range(1, 11):
# 抓取电影信息
movie_info_list += crawl_movie_data(page)
# 将电影信息写入CSV文件
with open("douban_movie.csv", "w", newline="") as f:
writer = csv.writer(f)
# 写入表头
headers = ["电影名称", "导演和演员", "年份", "国家", "类型", "排名", "评级评分", "评价人数", "评价"]
writer.writerow(headers)
# 写入电影信息
for movie in movie_info_list:
writer.writerow([movie[header] for header in headers])
```
请注意,豆瓣电影的Top250页面是动态加载的,如果您只是简单地使用 requests 库发起一个 GET 请求,您只能获取到前25部电影的信息。为了获取更多的电影信息,您需要模拟浏览器行为,比如使用 Selenium 等工具,或者分析页面中的 API。但是,为了让代码更加简单,这里使用了静态页面分析的方法,只爬取了前10页的电影信息。实际应用中,您可以根据自己的需要修改代码。
阅读全文