1.项目介绍
项目目的:获取高分电影榜单(TOP100)数据,并保存在 CSV 文件中
- 数据包括:电影名,年份,上映时间,类型,时长,评分,语言,导演,作者,主演,Slogan,介绍
项目步骤:
- 明确网站(The Movie Database (TMDB))的 robots.txt 中的抓取规则
- 查看页面的结构,拆解具体的操作步骤,按步骤开发
- 获取高分电影列表数据
- 遍历电影列表,获取每一部电影的详情信息,并提取电影数据信息
- 将电影详情信息保存到 csv 文件中

2.CSV 操作
2.1 CSV 概述
CSV:(Comma-Separated Values,逗号分隔符),是一种简单,通用的文本文件格式,用于存储表格数据,可以直接使用 Excel 打开


2.2 CSV操作
2.2.1 原始操作
使用 python 提供的原始的文件操作:
#读
with open("csv_Data/新建 文本文档.csv","r",encoding="utf-8") as f:
print(f"原始CSV文件内容:{f.read()}")
print("---------------------------------------------------------")
#写
with open("csv_Data/新建 文本文档.csv","a",encoding="utf-8") as f:
f.write("小二,男,22,足球\n")#写入数据
f.write("小四,女,20,篮球\n")
f.write("小六,男,21,羽毛球\n")
#读
with open("csv_Data/新建 文本文档.csv","r",encoding="utf-8") as f:
print(f"更新后CSV文件内容:{f.read()}")
结果如下:

2.2.2 使用csv标准库操作
使用 csv 标准库里面提供的操作:
import csv
with open("csv_Data/资源2.csv","r",encoding="utf-8",newline="") as f:
print(f"原始CSV文件内容:{f.read()}")
print("---------------------------------------------------------")
#写操作
with open("csv_Data/资源2.csv","a",encoding="utf-8",newline="") as f:
writer = csv.DictWriter(f,fieldnames=["姓名","性别","年龄","爱好"])
writer.writeheader() #写入表头
#写入表格内容
writer.writerow({"姓名":"王炸","性别":"男","年龄":22,"爱好":"跑步"})
writer.writerow({"姓名":"小红","性别":"女","年龄":20,"爱好":"唱歌"})
writer.writerow({"姓名":"小刚","性别":"男","年龄":21,"爱好":"跳舞"})
writer.writerow({"姓名":"小芳","性别":"女","年龄":23,"爱好":"画画"})
#读操作
with open("csv_Data/资源2.csv","r",encoding="utf-8",newline="") as f:
reader = csv.DictReader(f)
for row in reader:
print(row)
3.项目实现
3.1 获取高分电影列表数据
高分电影列表网页结构如下所示

获取高分电影列表数据源代码如下:
import requests
import csv
from lxml import html
#常量
TMDB_BASE_URL = 'https://www.themoviedb.org/'
TMDB_TOP100_URL = 'https://www.themoviedb.org/movie/top-rated'
def main():
#发送请求,获取高分电影榜单数据
response = requests.get(TMDB_TOP100_URL)
#解析数据,获取电影列表数据
doc = html.fromstring(response.text)
movie_list = doc.xpath('//*[@id="page_1"]/div[1]/div/div')
3.2 遍历电影列表,提取电影数据信息
该阶段要完成遍历电影列表中的电影 , 获取相应电影详情数据:
- 获得各个电影详情的 url
- 获取电影详情函数
import requests
import csv
from lxml import html
#常量
TMDB_BASE_URL = 'https://www.themoviedb.org/'
TMDB_TOP100_URL = 'https://www.themoviedb.org/movie/top-rated'
#获取电影详情函数
def get_movie_info(movie_info_url):
movie_info = {} #字典初始化为空,用来存储电影详情数据
#1.发送请求,获取电影详情数据
movie_response = requests.get(movie_info_url)
print(f"发送请求:{movie_info_url},获取电影详情数据...")
#2.解析数据,获取电影详情
movie_doc = html.fromstring(movie_response.text)
movie_name = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[1]/h2/a/text()") #获取电影名称
movie_year = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[1]/h2/span/text()")#获取电影年份
movie_release_date = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[1]/div/span[@class='release']/text()")#获取电影上映时间
movie_type = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[1]/div/span[@class='genres']/a/text()")#获取电影类型
movie_runtime = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[1]/div/span[@class='runtime']/text()")#获取电影时长
movie_rating = movie_doc.xpath("//*[@id='consensus_pill']/div/div[1]/div/div/@data-percent")#获取电影评分
movie_language = movie_doc.xpath("//*[@id='media_v4']/div/div/div[2]/div/section/div[1]/div/section[1]/p[3]/text()")#获取电影语言
movie_director = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[3]/ol/li[1]/p[1]/a/text()")#获取电影导演
movie_author = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[3]/ol/li[2]/p[1]/a/text()")#获取电影作者
#获取电影slogan
movie_slogan = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[3]/h3[1]/text()")
movie_description = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[3]/div/p/text()")#获取电影简介
movie_info = {
'电影名': movie_name[0].strip() if movie_name else '',
'年份': movie_year[0].strip('(),') if movie_year else '',
'上映时间': movie_release_date[0].strip() if movie_release_date else '',
'类型': ",".join(movie_type) if movie_type else '',
'时长': movie_runtime[0].strip() if movie_runtime else '',
'评分': movie_rating[0].strip() if movie_rating else '',
'语言': movie_language[0].strip() if movie_language else '',
'导演': ",".join(movie_director) if movie_director else '',
'作者': ",".join(movie_author) if movie_author else '',
'宣传语': movie_slogan[0].strip() if movie_slogan else '',
'简介': movie_description[0].strip() if movie_description else ''
}
#3.返回电影详情 -- 字典形式
return movie_info
def main():
#1.发送请求,获取高分电影榜单数据
response = requests.get(TMDB_TOP100_URL)
#2.解析数据,获取电影列表数据
doc = html.fromstring(response.text)
movie_list = doc.xpath('//*[@id="page_1"]/div[1]/div/div')
#3.遍历电影列表,获取每部电影详情
all_movies = []
for movie in movie_list:
movie_url = movie.xpath("./div/div/a/@href")
if movie_url:
#电影详情页的url
movie_info_url = TMDB_BASE_URL + movie_url[0]
#发送请求,获取电影详情数据
movie_info = get_movie_info(movie_info_url)
all_movies.append(movie_info)
3.3 将电影信息保存在 csv 文件中
该阶段要完成将最终的电影信息保存在指定的 csv 文件中:
- 指明存储的 csv 文件路径
- 保存为 csv 文件函数
import requests
import csv
from lxml import html
#常量
MOVIE_LIST_FILE = 'csv_Data/movie_list.csv'
TMDB_BASE_URL = 'https://www.themoviedb.org/'
TMDB_TOP100_URL = 'https://www.themoviedb.org/movie/top-rated'
#获取电影详情函数
def get_movie_info(movie_info_url):
movie_info = {} #字典初始化为空,用来存储电影详情数据
#1.发送请求,获取电影详情数据
movie_response = requests.get(movie_info_url)
print(f"发送请求:{movie_info_url},获取电影详情数据...")
#2.解析数据,获取电影详情
movie_doc = html.fromstring(movie_response.text)
movie_name = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[1]/h2/a/text()") #获取电影名称
movie_year = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[1]/h2/span/text()")#获取电影年份
movie_release_date = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[1]/div/span[@class='release']/text()")#获取电影上映时间
movie_type = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[1]/div/span[@class='genres']/a/text()")#获取电影类型
movie_runtime = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[1]/div/span[@class='runtime']/text()")#获取电影时长
movie_rating = movie_doc.xpath("//*[@id='consensus_pill']/div/div[1]/div/div/@data-percent")#获取电影评分
movie_language = movie_doc.xpath("//*[@id='media_v4']/div/div/div[2]/div/section/div[1]/div/section[1]/p[3]/text()")#获取电影语言
movie_director = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[3]/ol/li[1]/p[1]/a/text()")#获取电影导演
movie_author = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[3]/ol/li[2]/p[1]/a/text()")#获取电影作者
#获取电影slogan
movie_slogan = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[3]/h3[1]/text()")
movie_description = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[3]/div/p/text()")#获取电影简介
movie_info = {
'电影名': movie_name[0].strip() if movie_name else '',
'年份': movie_year[0].strip('(),') if movie_year else '',
'上映时间': movie_release_date[0].strip() if movie_release_date else '',
'类型': ",".join(movie_type) if movie_type else '',
'时长': movie_runtime[0].strip() if movie_runtime else '',
'评分': movie_rating[0].strip() if movie_rating else '',
'语言': movie_language[0].strip() if movie_language else '',
'导演': ",".join(movie_director) if movie_director else '',
'作者': ",".join(movie_author) if movie_author else '',
'宣传语': movie_slogan[0].strip() if movie_slogan else '',
'简介': movie_description[0].strip() if movie_description else ''
}
#3.返回电影详情 -- 字典形式
return movie_info
#保存所有电影信息,保存为csv文件函数
def save_all_movies(all_movies):
with open(MOVIE_LIST_FILE, 'w', newline='', encoding='utf-8') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=['电影名', '年份', '上映时间', '类型', '时长', '评分', '语言', '导演', '作者', '宣传语', '简介'])
writer.writeheader()
writer.writerows(all_movies) #写入数据
def main():
#1.发送请求,获取高分电影榜单数据
response = requests.get(TMDB_TOP100_URL)
#2.解析数据,获取电影列表数据
doc = html.fromstring(response.text)
movie_list = doc.xpath('//*[@id="page_1"]/div[1]/div/div')
#3.遍历电影列表,获取每部电影详情
all_movies = []
for movie in movie_list:
movie_url = movie.xpath("./div/div/a/@href")
if movie_url:
#电影详情页的url
movie_info_url = TMDB_BASE_URL + movie_url[0]
#发送请求,获取电影详情数据
movie_info = get_movie_info(movie_info_url)
all_movies.append(movie_info)
#4.将电影详情保存到csv文件
print(f"获取到所有电影详情,保存所有电影数据到{MOVIE_LIST_FILE}文件...")
save_all_movies(all_movies)
3.4 获取分页数据
由于之前代码只实现的 page_1 页面的数据获取 , 无法完成获取 TOP100 热门电影的需求,因此需要获取多页数据:
- 对 1,2,3 阶段使用 for 循环进行页面 1-5 的循环数据提取
- 给出第 2 页之后的高分电影榜单的 url
- 对当前访问页面进行判断 , 选择相应的 url
import requests
import csv
from lxml import html
#常量
MOVIE_LIST_FILE = 'csv_Data/movie_list.csv'
TMDB_BASE_URL = 'https://www.themoviedb.org/'
TMDB_TOP100_URL1 = 'https://www.themoviedb.org/movie/top-rated' #高分电影榜单的url(第1页)
TMDB_TOP100_URL2 = 'https://www.themoviedb.org/discover/movie/items' #高分电影榜单的url(第2页之后)
#获取电影详情函数
def get_movie_info(movie_info_url):
#1.发送请求,获取电影详情数据
movie_response = requests.get(movie_info_url)
print(f"发送请求:{movie_info_url},获取电影详情数据...")
#2.解析数据,获取电影详情
movie_doc = html.fromstring(movie_response.text)
movie_info = {}
#获取电影名称
movie_name = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[1]/h2/a/text()")
#获取电影年份
movie_year = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[1]/h2/span/text()")
#获取电影上映时间
movie_release_date = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[1]/div/span[@class='release']/text()")
#获取电影类型
movie_type = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[1]/div/span[@class='genres']/a/text()")
#获取电影时长
movie_runtime = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[1]/div/span[@class='runtime']/text()")
#获取电影评分
movie_rating = movie_doc.xpath("//*[@id='consensus_pill']/div/div[1]/div/div/@data-percent")
#获取电影语言
movie_language = movie_doc.xpath("//*[@id='media_v4']/div/div/div[2]/div/section/div[1]/div/section[1]/p[3]/text()")
#获取电影导演
movie_director = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[3]/ol/li[1]/p[1]/a/text()")
#获取电影作者
movie_author = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[3]/ol/li[2]/p[1]/a/text()")
#获取电影slogan
movie_slogan = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[3]/h3[1]/text()")
#获取电影简介
movie_description = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[3]/div/p/text()")
movie_info = {
'电影名': movie_name[0].strip() if movie_name else '',
'年份': movie_year[0].strip() if movie_year else '',
'上映时间': movie_release_date[0].strip() if movie_release_date else '',
'类型': ",".join(movie_type) if movie_type else '',
'时长': movie_runtime[0].strip() if movie_runtime else '',
'评分': movie_rating[0].strip() if movie_rating else '',
'语言': movie_language[0].strip() if movie_language else '',
'导演': ",".join(movie_director) if movie_director else '',
'作者': ",".join(movie_author) if movie_author else '',
'宣传语': movie_slogan[0].strip() if movie_slogan else '',
'简介': movie_description[0].strip() if movie_description else ''
}
#3.返回电影详情 -- 字典形式
return movie_info
#保存所有电影信息,保存为csv文件函数
def save_all_movies(all_movies):
with open(MOVIE_LIST_FILE, 'w', newline='', encoding='utf-8') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=['电影名', '年份', '上映时间', '类型', '时长', '评分', '语言', '导演', '作者', '宣传语', '简介'])
writer.writeheader()
writer.writerows(all_movies) #写入数据
#主程序
def main():
all_movies = [] #保存所有电影的数据
for page_num in range(1,6):
#1.发送请求,获取高分电影榜单数据
if page_num ==1 :
response = requests.get(TMDB_TOP100_URL1 )
else:
response = requests.post(TMDB_TOP100_URL2,
f"air_date.gte=&air_date.lte=&certification=&certification_country=CN&debug=&first_air_date.gte=&first_air_date.lte=&include_adult=false&include_softcore=false&latest_ceremony.gte=&latest_ceremony.lte=&page={page_num}&primary_release_date.gte=&primary_release_date.lte=®ion=&release_date.gte=&release_date.lte=2027-02-17&show_me=everything&sort_by=vote_average.desc&vote_average.gte=0&vote_average.lte=10&vote_count.gte=300&watch_region=CN&with_genres=&with_keywords=&with_networks=&with_origin_country=&with_original_language=&with_watch_monetization_types=&with_watch_providers=&with_release_type=&with_runtime.gte=0&with_runtime.lte=400"
)
print(f"发送请求,访问第{page_num}页的数据,获取TMDB高分电影榜单数据...")
#2.解析数据,获取电影列表数据
doc = html.fromstring(response.text)
movie_list = doc.xpath(f'//*[@id="page_{page_num}"]/div[1]/div/div')
#3.遍历电影列表,获取每部电影详情
for movie in movie_list:
movie_url = movie.xpath("./div/div/a/@href")
if movie_url:
#电影详情页的url
movie_info_url = TMDB_BASE_URL + movie_url[0]
#发送请求,获取电影详情数据
movie_info = get_movie_info(movie_info_url)
all_movies.append(movie_info)
#4.将电影详情保存到csv文件
print(f"获取到所有电影详情,保存所有电影数据到{MOVIE_LIST_FILE}文件...")
save_all_movies(all_movies)
if __name__ == '__main__':
main()
4 正则表达式
4.1 定义
正则表达式:是一种由特定语法规则组成的文本模式,用来描述,匹配字符串中符合特定规则的字符序列。相当于一种模式匹配工具,允许用户通过简洁的语法进行复杂文本的搜索,匹配,提取和替换工作
re 模块:是 Python 自带的正则表达式模块,其作用是:按规则批量查找、提取、替换、清洗文本,数据清洗最常用工具之一
4.2 语法
正则表达式的写法多种多样,具体的语法如下:

代码示例如下:
import re
s1 = '18809090000是我的手机号,你记住了吗?我的另一个手机号是18800008888,两个QQ号分别是15500008888 和 13809091293821,邮箱为python666@163.com,你记住了吗?'
#正则表达式
print(re.findall(r"188.*",s1)) # .匹配任意字符,*匹配其前面字符0次或多次
print(re.findall(r"188.?",s1)) # .匹配任意字符,?匹配其前面字符至多1次
print(re.findall(r"188.+",s1)) # .匹配任意字符,+匹配其前面字符至少1次
print(re.findall(r"188\d{8}",s1)) # \d匹配任意数字,{8}匹配其前面字符8次
print(re.findall(r"155\d{6,10}",s1)) # \d匹配任意数字,{6,10}匹配其前面字符6到10次
print(re.findall(r"155\d{6,}",s1)) # \d匹配任意数字,{6,}匹配其前面字符6次或更多
print(re.findall(r"1[38]\d{8}",s1)) # 1开头,第2位是3或8,\d匹配任意数字,{8}匹配其前面字符8次
print(re.findall(r"1[^38]\d{8}",s1)) # 1开头,第2位是{3,8}以外的数字,\d匹配任意数字,{8}匹配其前面字符8次
print(re.findall(r"1[3-9]\d{8}",s1)) # 1开头,第2位是3-9之间的数字,\d匹配任意数字,{8}匹配其前面字符8次
print(re.findall(r"^1[3-9]\d{9}",s1)) # ^匹配字符串开头为1,第2位是3-9之间的数字,\d匹配任意数字,{9}匹配其前面字符9次
print(re.findall(r"^1[3-9]\d{9}$",s1)) # ^匹配字符串开头为1,第2位是3-9之间的数字,\d匹配任意数字,{9}匹配其前面字符9次,$匹配字符串结尾
print(re.findall(r"\w+@\w+\.\w+",s1,)) #\w匹配任何单词字符(a-z,A-Z,0-9,_,其他语言字符),\.转义字符只表示匹配.
print(re.findall(r"\w+@\w+\.\w+",s1,re.ASCII)) #re.ASCII限制只匹配ASCII中字符
s2 = "现在的时间是2026-08-18 19:06:10,今天的天气还可以,气温是28度"
print(re.findall(r"\d{4}-\d{2}-\d{2}",s2))
print(re.findall(r"(\d{4})-(\d{2})-(\d{2})",s2)) #封装元组
小结:

4.3 re库基本操作
| 函数 | 作用 | 返回值 |
|---|---|---|
| re.match(pat,str) | 只从字符串开头匹配(第一个) | Match 对象 / None |
| re.search(pat,str) | 从任意位置开始匹配(第一个) | Match 对象 / None |
| re.findall(pat,str) | 找出全部匹配结果 | list 列表 |
pat:正则表达式
str:文本字符串
代码示例如下:

5.程序优化
程序优化:对于电影年份,上映时间,时长进行数据处理,然后存储起来

- 电影年份:去除括号
- 上映时间:去除国家
- 时长:统一换算为min
处理后结果为:

需要进行的操作有:
- 导入 re 库
- 获取电影年份函数
- 获取上映时间函数
- 获取时间函数
import requests
import csv
from lxml import html
import re
#常量
MOVIE_LIST_FILE = 'csv_Data/movie_list2.csv'
TMDB_BASE_URL = 'https://www.themoviedb.org/'
TMDB_TOP100_URL1 = 'https://www.themoviedb.org/movie/top-rated' #高分电影榜单的url(第1页)
TMDB_TOP100_URL2 = 'https://www.themoviedb.org/discover/movie/items' #高分电影榜单的url(第2页之后)
#获取电影年份函数
def get_movie_year(movie_year):
year = movie_year[0].strip() if movie_year else ""
return re.findall(r"\d+",year)[0]
#获取电影上映时间函数
def get_movie_release_date(movie_release_date):
release_date = movie_release_date[0].strip() if movie_release_date else ""
return re.findall(r"\d{4}-\d{2}-\d{2}",release_date)[0]
#获取电影运行时间函数
def get_movie_runtime(movie_runtime):
minutes = 0
runtime = movie_runtime[0].strip() if movie_runtime else ""
hour = re.search(r"(\d+)h",runtime)
minute = re.search(r"(\d+)m",runtime)
h = int(hour.group(1)) if hour else 0
m = int(minute.group(1)) if minute else 0
minutes = h * 60 + m
return minutes
#获取电影详情函数
def get_movie_info(movie_info_url):
#1.发送请求,获取电影详情数据
movie_response = requests.get(movie_info_url)
print(f"发送请求:{movie_info_url},获取电影详情数据...")
#2.解析数据,获取电影详情
movie_doc = html.fromstring(movie_response.text)
movie_info = {}
#获取电影名称
movie_name = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[1]/h2/a/text()")
#获取电影年份
movie_year = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[1]/h2/span/text()")
#获取电影上映时间
movie_release_date = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[1]/div/span[@class='release']/text()")
#获取电影类型
movie_type = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[1]/div/span[@class='genres']/a/text()")
#获取电影时长
movie_runtime = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[1]/div/span[@class='runtime']/text()")
#获取电影评分
movie_rating = movie_doc.xpath("//*[@id='consensus_pill']/div/div[1]/div/div/@data-percent")
#获取电影语言
movie_language = movie_doc.xpath("//*[@id='media_v4']/div/div/div[2]/div/section/div[1]/div/section[1]/p[3]/text()")
#获取电影导演
movie_director = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[3]/ol/li[1]/p[1]/a/text()")
#获取电影作者
movie_author = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[3]/ol/li[2]/p[1]/a/text()")
#获取电影slogan
movie_slogan = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[3]/h3[1]/text()")
#获取电影简介
movie_description = movie_doc.xpath("//*[@id='original_header']/div[2]/section/div[3]/div/p/text()")
movie_info = {
'电影名': movie_name[0].strip() if movie_name else '',
'年份': get_movie_year(movie_year),
'上映时间': get_movie_release_date(movie_release_date),
'类型': ",".join(movie_type) if movie_type else '',
'时长': get_movie_runtime(movie_runtime),
'评分': movie_rating[0].strip() if movie_rating else '',
'语言': movie_language[0].strip() if movie_language else '',
'导演': ",".join(movie_director) if movie_director else '',
'作者': ",".join(movie_author) if movie_author else '',
'宣传语': movie_slogan[0].strip() if movie_slogan else '',
'简介': movie_description[0].strip() if movie_description else ''
}
#3.返回电影详情 -- 字典形式
return movie_info
#保存所有电影信息,保存为csv文件函数
def save_all_movies(all_movies):
with open(MOVIE_LIST_FILE, 'w', newline='', encoding='utf-8') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=['电影名', '年份', '上映时间', '类型', '时长', '评分', '语言', '导演', '作者', '宣传语', '简介'])
writer.writeheader()
writer.writerows(all_movies) #写入数据
pass
def main():
all_movies = [] #保存所有电影的数据
for page_num in range(1,6):
#1.发送请求,获取高分电影榜单数据
if page_num ==1 :
response = requests.get(TMDB_TOP100_URL1 )
else:
response = requests.post(TMDB_TOP100_URL2,
f"air_date.gte=&air_date.lte=&certification=&certification_country=CN&debug=&first_air_date.gte=&first_air_date.lte=&include_adult=false&include_softcore=false&latest_ceremony.gte=&latest_ceremony.lte=&page={page_num}&primary_release_date.gte=&primary_release_date.lte=®ion=&release_date.gte=&release_date.lte=2027-02-17&show_me=everything&sort_by=vote_average.desc&vote_average.gte=0&vote_average.lte=10&vote_count.gte=300&watch_region=CN&with_genres=&with_keywords=&with_networks=&with_origin_country=&with_original_language=&with_watch_monetization_types=&with_watch_providers=&with_release_type=&with_runtime.gte=0&with_runtime.lte=400"
)
print(f"发送请求,访问第{page_num}页的数据,获取TMDB高分电影榜单数据...")
#2.解析数据,获取电影列表数据
doc = html.fromstring(response.text)
movie_list = doc.xpath(f'//*[@id="page_{page_num}"]/div[1]/div/div')
#3.遍历电影列表,获取每部电影详情
for movie in movie_list:
movie_url = movie.xpath("./div/div/a/@href")
if movie_url:
#电影详情页的url
movie_info_url = TMDB_BASE_URL + movie_url[0]
#发送请求,获取电影详情数据
movie_info = get_movie_info(movie_info_url)
all_movies.append(movie_info)
#4.将电影详情保存到csv文件
print(f"获取到所有电影详情,保存所有电影数据到{MOVIE_LIST_FILE}文件...")
save_all_movies(all_movies)
if __name__ == '__main__':
main()
6.🎇更多干货
🥰关注我 学习更多AI知识~
🥰支持我,请 点赞 + 好评 + 收藏 三连,带来更多文章~
🥰有需要完整源码的同学可以留言、后台私信我

641

被折叠的 条评论
为什么被折叠?



