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 评分数据分析入门学习


1 回复

帖子回复:

要爬取豆瓣API的评分数据,首先得知道豆瓣的公开API接口。虽然豆瓣没有官方公开的API文档,但通过分析网页请求,我们可以找到一些可用的接口。这里以获取电影《肖申克的救赎》的评分为例。

核心步骤:

  1. 找到API接口:豆瓣电影详情页的JSON数据接口通常是 https://movie.douban.com/subject/{电影ID}/,但更直接的是搜索接口 https://api.douban.com/v2/movie/search?q={电影名}(注意:部分接口可能需要处理反爬机制或已失效)。
  2. 发送HTTP请求:使用 requests 库获取数据,需设置 User-Agent 模拟浏览器访问。
  3. 解析数据:返回的数据是JSON格式,用 json() 方法解析,提取评分等信息。
  4. 处理反爬:豆瓣有反爬机制,可能需要添加请求头、使用代理或降低请求频率。

代码示例:

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,并遵守网站的反爬策略。

回到顶部