完成期末练习

This commit is contained in:
2509165046
2026-07-05 16:21:26 +08:00
parent 9112fae8b4
commit 7f72c58746
15 changed files with 421 additions and 0 deletions

102
q2_1_crawler/movie.html Normal file
View File

@@ -0,0 +1,102 @@
[
{
"id": "1",
"title": "阿甘正传",
"director": "Frank Darabont",
"year": "2023",
"rating": "8.5",
"duration": "112",
"genre": "科幻",
"actors_count": "4"
},
{
"id": "2",
"title": "忠犬八公的故事",
"director": "陈凯歌",
"year": "2023",
"rating": "6.9",
"duration": "102",
"genre": "动画",
"actors_count": "4"
},
{
"id": "3",
"title": "放牛班的春天",
"director": "Robert Zemeckis",
"year": "1993",
"rating": "7.6",
"duration": "175",
"genre": "动画",
"actors_count": "5"
},
{
"id": "4",
"title": "星际穿越",
"director": "James Cameron",
"year": "2024",
"rating": "9.1",
"duration": "92",
"genre": "喜剧",
"actors_count": "5"
},
{
"id": "5",
"title": "千与千寻",
"director": "宫崎骏",
"year": "2007",
"rating": "8.3",
"duration": "146",
"genre": "悬疑",
"actors_count": "4"
},
{
"id": "6",
"title": "肖申克的救赎",
"director": "Christopher Nolan",
"year": "1997",
"rating": "8.3",
"duration": "117",
"genre": "爱情",
"actors_count": "5"
},
{
"id": "7",
"title": "盗梦空间",
"director": "Lasse Hallström",
"year": "2001",
"rating": "7.5",
"duration": "131",
"genre": "悬疑",
"actors_count": "3"
},
{
"id": "8",
"title": "泰坦尼克号",
"director": "Rajkumar Hirani",
"year": "1994",
"rating": "6.8",
"duration": "163",
"genre": "喜剧",
"actors_count": "4"
},
{
"id": "9",
"title": "三傻大闹宝莱坞",
"director": "Christophe Barratier",
"year": "1997",
"rating": "6.8",
"duration": "107",
"genre": "冒险",
"actors_count": "5"
},
{
"id": "10",
"title": "霸王别姬",
"director": "Christopher Nolan",
"year": "2006",
"rating": "9.1",
"duration": "98",
"genre": "科幻",
"actors_count": "2"
}
]

102
q2_1_crawler/movie.json Normal file
View File

@@ -0,0 +1,102 @@
[
{
"id": "1",
"title": "阿甘正传",
"director": "Frank Darabont",
"year": "2023",
"rating": "8.5",
"duration": "112",
"genre": "科幻",
"actors_count": "4"
},
{
"id": "2",
"title": "忠犬八公的故事",
"director": "陈凯歌",
"year": "2023",
"rating": "6.9",
"duration": "102",
"genre": "动画",
"actors_count": "4"
},
{
"id": "3",
"title": "放牛班的春天",
"director": "Robert Zemeckis",
"year": "1993",
"rating": "7.6",
"duration": "175",
"genre": "动画",
"actors_count": "5"
},
{
"id": "4",
"title": "星际穿越",
"director": "James Cameron",
"year": "2024",
"rating": "9.1",
"duration": "92",
"genre": "喜剧",
"actors_count": "5"
},
{
"id": "5",
"title": "千与千寻",
"director": "宫崎骏",
"year": "2007",
"rating": "8.3",
"duration": "146",
"genre": "悬疑",
"actors_count": "4"
},
{
"id": "6",
"title": "肖申克的救赎",
"director": "Christopher Nolan",
"year": "1997",
"rating": "8.3",
"duration": "117",
"genre": "爱情",
"actors_count": "5"
},
{
"id": "7",
"title": "盗梦空间",
"director": "Lasse Hallström",
"year": "2001",
"rating": "7.5",
"duration": "131",
"genre": "悬疑",
"actors_count": "3"
},
{
"id": "8",
"title": "泰坦尼克号",
"director": "Rajkumar Hirani",
"year": "1994",
"rating": "6.8",
"duration": "163",
"genre": "喜剧",
"actors_count": "4"
},
{
"id": "9",
"title": "三傻大闹宝莱坞",
"director": "Christophe Barratier",
"year": "1997",
"rating": "6.8",
"duration": "107",
"genre": "冒险",
"actors_count": "5"
},
{
"id": "10",
"title": "霸王别姬",
"director": "Christopher Nolan",
"year": "2006",
"rating": "9.1",
"duration": "98",
"genre": "科幻",
"actors_count": "2"
}
]

48
q2_1_crawler/q2_1.py Normal file
View File

@@ -0,0 +1,48 @@
import requests
from bs4 import BeautifulSoup as bs
import json
url = 'https://exam.detr.top/exam-b/movies'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36 Edg/149.0.0.0',
'Referer':'https://exam.detr.top/exam-b/movies'}
req = requests.get(url, headers=headers)
req.encoding="utf-8"
data=[]
soup=bs(req.text,"html.parser")
# print(soup)
#id, title, director, year, rating, duration, genre, actors-count
items=soup.select('.item-row')
# movie_list=[]
for i in range(len(items)):
id=items[i].find("td",class_="item-id").get_text()
title=items[i].find("td",class_="item-title").get_text().strip()
director=items[i].find("td",class_="item-director").get_text().strip()
year=items[i].find("td",class_="item-year").get_text()
rating=items[i].find("td",class_="item-rating").get_text()
duration=items[i].find("td",class_="item-duration").get_text()
genre=items[i].find("td",class_="item-genre").get_text()
actors_count=items[i].find("td",class_="item-actors-count").get_text()
data.append({
"id":id,
"title":title,
"director":director,
"year":year,
"rating":rating,
"duration":duration,
"genre":genre,
"actors_count":actors_count
})
print(data)
with open('movie.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
with open("movie.html","w",encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)

43
q2_1_crawler/q2_2.py Normal file
View File

@@ -0,0 +1,43 @@
# ① 找出评分最高和最低的电影,打印电影名 + 评分。
# ② 统计各类型的电影数量,用字典格式输出。
# ③ 统计各导演的电影数量,用字典格式输出。
# ④ 统计 2020 年(含)以后上映的电影数量。
import json
with open('movie.json', 'r', encoding='utf-8') as f:
data=json.load(f)
# print(data)
sort_movie=sorted(data,key=lambda x:x["rating"])
min=sort_movie[0]
max=sort_movie[-1]
print("评分最低的电影",min["title"],min["rating"])
print("评分最高的电影",max["title"],max["rating"])
genre_shu={}
for g in data:
ge=g["genre"]
if ge in genre_shu:
genre_shu[ge]+=1
else:
genre_shu[ge]=1
print("各类型的电影数量",genre_shu)
director_shu={}
for d in data:
di=d["director"]
if di in director_shu:
director_shu[di]+=1
else:
director_shu[di]=1
print("各导演的电影数量",director_shu)
a=0
for y in data:
if int(y["year"]) >= 2020:
a+=1
print("2020 年(含)以后上映的电影数量",a)