练习爬取豆瓣电影Top250

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import pandas as pd
import requests
from bs4 import BeautifulSoup
'''
练习爬取豆瓣电影排名 top250
'''
# 定义一个空列表,用来存储电影信息
movies = []
# 定义请求头,否则请求会返回 418
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
# 每页25条
for i in range(0, 250, 25):
# 定义爬虫的目标网址
url = f"https://movie.douban.com/top250?start={i}"
# 发送请求,获取网页内容
response = requests.get(url, headers=headers)
# 判断请求是否成功
if response.status_code == 200:
# 使用BeautifulSoup解析网页
soup = BeautifulSoup(response.text, "html.parser")
# 找到所有的电影条目
items = soup.find_all("div", class_="item")
# 遍历每个条目,提取电影信息
for item in items:
# 提取电影的排名
rank = item.find("em").text
# 提取电影的标题
title = item.find("span", class_="title").text
# 提取电影的评分
rating = item.find("span", class_="rating_num").text
# 评价人数
str1 = item.find("div", class_="star").text
count = str1[7:-4]
# 评价,有些评价为空
comment = ""
str2 = item.find("span", class_="inq")
if str2:
comment = str2.text
# 将电影信息存储到一个字典中
movie = {
"排名": rank,
"电影名": title,
"评分": rating,
"评价人数": count,
"评论": comment
}
# 将电影信息添加到列表中
movies.append(movie)

# for m in movies:
# print(str(m))

# 写入数据到csv文件
df = pd.DataFrame(movies)
# utf-8-sig编码可以保证csv文件用Excel打开不乱码
df.to_csv("douban_top250.csv", index=False, encoding="utf-8-sig")