Python 爬取豆瓣 API 评分数据分析入门学习
Python 爬豆瓣 API 评分
打开终端:source activate course_py35
conda install jupyter 下载过的忽略此步
jupyter notebook
选择 New-Python3
import urllib.request control+enter
import urllib.request as urlrequest
url_visit=‘https://api.douban.com/v2/movie/26387939’
crawl_content=urlrequest.urlopen(url_visit).read()
print(crawl_content.decode(‘utf8’)) control+enter:英文编译内容
import urllib.request as urlrequest
url_visit=‘https://api.douban.com/v2/movie/26387939’
crawl_content=urlrequest.urlopen(url_visit).read()
print(crawl_content.decode(‘unicode-escape’)) control+enter:中文内容
选择:insert-insert cell below
import json
json_content=json.loads(crawl_content.decode(‘utf8’))control+enter
print(json_content[‘rating’][‘average’]) control+enter:9.2
id=26387939
rank=json_content[‘rating’][‘average’]
with open(“douban_movie_rank.txt”,“w”)as outputfile:
outputfile.write("{} {} “.format(id,rank)) control+enter:文件 douban_movie_rank.txt 已存储,打开文件内容为 26387939 9.2
import urllib.request as urlrequest
import json
id_list=[11803087,20451290,26387939]
with open(“douban_movie_rank.txt”,“w”)as outputfile:
for id in id_list:
url_visit=‘https://api.douban.com/v2/movie/{}’.format(id)
crawl_content=urlrequest.urlopen(url_visit).read()
json_content=json.loads(crawl_content.decode(‘utf8’))
#print(crawl_content.decode(‘unicode-escape’))
#print(json_content[‘rating’][‘average’])
rank=json_content[‘rating’][‘average’]
outputfile.write(”{} {}\n".format(id,rank)) control+enter:指定三个电影的评分存储,内容为;
11803087 7.4
20451290 4.8
26387939 9.2
以下链接不用看,我方便上课跳转的: https://class.pkbigdata.com/#/classDetail/classIntroduce/1?slxydc=V2EXsjfxsrm
Python 爬取豆瓣 API 评分数据分析入门学习
帖子回复:
要爬取豆瓣API的评分数据,首先得知道豆瓣的公开API接口。虽然豆瓣没有官方公开的API文档,但通过分析网页请求,我们可以找到一些可用的接口。这里以获取电影《肖申克的救赎》的评分为例。
核心步骤:
- 找到API接口:豆瓣电影详情页的JSON数据接口通常是
https://movie.douban.com/subject/{电影ID}/,但更直接的是搜索接口https://api.douban.com/v2/movie/search?q={电影名}(注意:部分接口可能需要处理反爬机制或已失效)。 - 发送HTTP请求:使用
requests库获取数据,需设置User-Agent模拟浏览器访问。 - 解析数据:返回的数据是JSON格式,用
json()方法解析,提取评分等信息。 - 处理反爬:豆瓣有反爬机制,可能需要添加请求头、使用代理或降低请求频率。
代码示例:
import requests
import json
def get_douban_movie_rating(movie_name):
# 搜索接口(示例,实际可能需调整)
search_url = f"https://api.douban.com/v2/movie/search?q={movie_name}"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}
try:
# 发送请求
response = requests.get(search_url, headers=headers)
response.raise_for_status() # 检查请求是否成功
# 解析JSON数据
data = response.json()
if data['subjects']:
movie = data['subjects'][0] # 取第一个结果
title = movie['title']
rating = movie['rating']['average']
return f"电影:{title}, 评分:{rating}"
else:
return "未找到相关电影"
except requests.exceptions.RequestException as e:
return f"请求失败:{e}"
except json.JSONDecodeError:
return "解析JSON数据失败"
# 示例:获取《肖申克的救赎》评分
result = get_douban_movie_rating("肖申克的救赎")
print(result)
注意事项:
- 豆瓣API可能有访问频率限制,频繁请求可能导致IP被封,建议添加延时(如
time.sleep(1))。 - 部分接口需要登录或处理验证码,实际爬取时需进一步处理。
- 如果接口不可用,可尝试直接解析豆瓣网页HTML(用
BeautifulSoup),但需注意网页结构变化。
总结建议: 优先使用合法公开的API,并遵守网站的反爬策略。

