Files
simulated-examination/q2-1[1].py
2026-07-05 18:27:23 +08:00

51 lines
1.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# q2_1_crawler/q2_1.py
import requests
import json
# 1. 请求网页,携带请求头防拦截
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"
}
url = "https://exam.detr.top/exam-b/movies"
resp = requests.get(url, headers=headers)
resp.raise_for_status() # 抛出请求异常
html_text = resp.text
# 2. 保存原始网页 movies.html
with open("movies.html", "w", encoding="utf-8") as f:
f.write(html_text)
# 3. 解析接口数据网页内电影json数据
# 页面返回的电影数据是json结构直接提取页面内置数据一次性获取全部10条
data = json.loads(html_text) # 若页面是html内嵌json改用bs4提取script标签下方兼容备用方案
"""
# 备用如果页面是html网页用bs4提取json数据
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_text, "html.parser")
script_tag = soup.find("script", id="movie-data")
data = json.loads(script_tag.string)
"""
# 4. 提取编号 + 电影信息字段id,title,director,year,rating,duration,genre,actors_count
result_data = {
"data_id": data["data_id"], # 网页数据编号
"movies": []
}
for movie in data["movie_list"]:
movie_item = {
"id": movie["id"],
"title": movie["title"],
"director": movie["director"],
"year": int(movie["year"]),
"rating": float(movie["rating"]),
"duration": int(movie["duration"]),
"genre": movie["genre"],
"actors_count": int(movie["actors_count"])
}
result_data["movies"].append(movie_item)
# 5. 保存 movies.json
with open("movies.json", "w", encoding="utf-8") as f:
json.dump(result_data, f, ensure_ascii=False, indent=2)
print("爬取完成:已生成 movies.html、movies.json")