import requests from bs4 import BeautifulSoup import pandas as pd 定义函数用于抓取单页数据 def fetch_page_data(page_url): 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” } response = requests.get(page_url, headers=headers) response.encoding = ‘utf-8’ # 解决编码问题 soup = BeautifulSoup(response.text, ‘html.parser’) movies = [] for item in soup.find_all('div', class_='item'): title = item.find('span', class_='title').text.strip() rating = item.find('span', class_='rating_num').text.strip() director_tag = item.select_one('.bd p:nth-of-type(1) a') director = director_tag.text.strip() if director_tag else '未知' movies.append({ '电影名称': title, '评分': rating, '导演': director }) return movies 主程序开始 base_url = “https://movie.douban.com/top250?start={}&filter=” all_movies = [] for page in range(10): # 遍历第1到第10页 start_index = page * 25 # 每页有25部电影 url = base_url.format(start_index) page_data = fetch_page_data(url) all_movies.extend(page_data) 将数据存储为CSV文件 df = pd.DataFrame(all_movies) df.to_csv(‘douban_top250.csv’, index=False, encoding=‘utf_8_sig’) # 使用utf_8_sig避免乱码 print(f"成功抓取{len(df)}条数据并保存至 douban_top250.csv") 修改以上代码,抓取电影海报的URL地址,将所有图片存入文件douban_top250_posters.csv中
时间: 2025-06-26 09:13:16 浏览: 13
为了完成抓取电影海报 URL 地址的任务,并将其保存到 `douban_top250_posters.csv` 文件中,我们需要对现有代码稍作调整。以下是完整的解决方案:
### 修改后的完整代码
```python
import requests
from bs4 import BeautifulSoup
import pandas as pd
# 定义函数用于抓取单页数据
def fetch_page_data(page_url):
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"
}
response = requests.get(page_url, headers=headers)
response.encoding = 'utf-8' # 解决编码问题
soup = BeautifulSoup(response.text, 'html.parser')
movies = []
posters = []
for item in soup.find_all('div', class_='item'):
title = item.find('span', class_='title').text.strip()
rating = item.find('span', class_='rating_num').text.strip()
director_tag = item.select_one('.bd p:nth-of-type(1) a')
director = director_tag.text.strip() if director_tag else '未知'
poster_img = item.find('img') # 找到每部电影的海报 img 标签
poster_url = poster_img['src'] if poster_img else '无链接'
movies.append({
'电影名称': title,
'评分': rating,
'导演': director
})
posters.append({ # 单独收集海报信息
'电影名称': title,
'海报URL': poster_url
})
return movies, posters
# 主程序开始
base_url = "https://movie.douban.com/top250?start={}&filter="
all_movies = [] # 存储所有电影的基本信息
all_posters = [] # 存储所有电影的海报信息
for page in range(10): # 遍历第1到第10页
start_index = page * 25 # 每页有25部电影
url = base_url.format(start_index)
movie_data, poster_data = fetch_page_data(url) # 获取页面的数据(包含基本字段和海报)
all_movies.extend(movie_data)
all_posters.extend(poster_data)
# 将基本信息存储为 CSV 文件
df_movies = pd.DataFrame(all_movies)
df_movies.to_csv('douban_top250.csv', index=False, encoding='utf_8_sig') # 基本信息文件
print(f"成功抓取 {len(df_movies)} 条数据并保存至 douban_top250.csv")
# 将海报信息存储为 CSV 文件
df_posters = pd.DataFrame(all_posters)
df_posters.to_csv('douban_top250_posters.csv', index=False, encoding='utf_8_sig') # 海报信息文件
print(f"成功抓取 {len(df_posters)} 张海报并保存至 douban_top250_posters.csv")
```
---
### 关键改动点说明
1. **提取海报 URL**
- 我们通过查找每个 `<div>` 的子标签 `<img>` 提取出其属性 `src`。
- 如果不存在 `<img>` 或者某些错误情况,则设置默认值 `'无链接'`。
2. **分离海报信息处理逻辑**
- 创建了两个列表:一个是存放电影基本信息 (`all_movies`);另一个专门存放海报信息 (`all_posters`)。
3. **新增海报数据结构**
- 新增了一个字典形式 `{ '电影名称': ..., '海报URL': ... }` 来记录每一部电影对应的海报地址。
4. **分别保存两张表格**
- 对于电影基本信息保存在 `douban_top250.csv` 中;
- 而对于海报信息则单独生成一张表保存到 `douban_top250_posters.csv` 中。
---
### 输出结果示例
运行上述代码后会生成两份文件:
1. **`douban_top250.csv`**
```
电影名称,评分,导演
Shawshank Redemption,9.6,弗兰克·德拉邦特
The Godfather,9.3,弗朗西斯·福特·科波拉
```
2. **`douban_top250_posters.csv`**
```
电影名称,海报URL
Shawshank Redemption,https://example.com/poster.jpg
The Godfather,https://another-example.com/poster.jpg
```
---
###
阅读全文
相关推荐



















