当前位置:   article > 正文

【爬虫】学习记录之Python 爬虫实战:电影 TOP250 循环爬取_python爬电影

python爬电影

【简介】利用 Python 的 requests 库实现循环爬取电影 TOP250 榜单,对每个电影的详细信息进行抓取,并将抓取的数据保存为 JSON 格式的文件。

1.导入所需库和模块

本项目使用的是 requests 库和 json 库,因此需要导入这两个库。

import json
import requests
  • 1
  • 2

2. 构造请求参数并发送请求

电影 TOP250 的数据可以通过以下 URL 获取:

post_url = ‘https://movie.douban.com/j/chart/top_list’
首先,我们需要通过浏览器开发者工具或其他工具查看该 URL 的请求方式与请求参数。如果使用浏览器开发者工具,可以在 Network 选项卡中查看所有请求的信息。如果使用其他工具,则需要查阅该工具的使用手册获取请求信息。

根据查看到的请求信息,我们需要构造以下请求参数:

param = {
    'type': '24',
    'interval_id': '100:90',
    'action': '',
    'start': '0', # 从第六十个电影开始取
    'limit': '20' # 一次性取二十个
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

参数说明:

type:电影类型,这里我们选择“剧情”类型;
interval_id:电影时间,这里我们选择“2021”年;
action:无需指定;
start:数据开始偏移量,从第 60 个电影开始取;
limit:每次获取的数据量,这里我们设置为 20。
发送请求的代码如下:

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.57'
}
  • 1
  • 2
  • 3
resource = requests.get(url=post_url, params=param, headers=headers)
res = resource.json()
  • 1
  • 2

其中,headers 是模拟浏览器请求的头部信息。requests.get() 方法是请求网络资源的方法,params 参数是请求数据中的参数,resource.json() 方法则将返回的 json 数据解析成对象列表。

3. 解析数据并保存到文件

得到 json 数据之后,我们需要对其进行解析,并将需要的数据提取出来。这里,我们需要获取每个电影的名称、评分、导演、编剧、主演等信息。解析代码如下:

movies = []
for movie in res:
    data = {}
    data['title'] = movie['title']
    data['rating'] = movie['rating'][0]
    data['directors'] = movie['directors'][0]
    data['casts'] = movie['casts'][0]

    movies.append(data)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

这段代码遍历了每个电影的 json 对象,提取出需要的信息,然后保存到列表 movies 中。

最后,我们需要将获取到的数据保存为 JSON 格式的文件。保存代码如下:

fp = open('douban.json', 'w', encoding='utf-8')
json.dump(movies, fp=fp, ensure_ascii=False)
print('over!')
  • 1
  • 2
  • 3

其中,json.dump() 方法将列表对象 movies 写入 JSON 文件中,ensure_ascii=False 参数表示将中文数据写入文件时不使用 ASCII 编码。

4. 完整代码

import json
import requests

if __name__ == '__main__':
    # 指定url
    post_url = "https://movie.douban.com/j/chart/top_list"
    # UA伪装
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.57'
    }
    # 携带数据
    param = {
        'type': '24',
        'interval_id': '100:90',
        'action': '',
        'start': '0',# 从第六十个电影开始取
        'limit': '20'# 一次性取二十个
    }
    # 请求发送
    resource = requests.get(url=post_url, params=param, headers=headers)

    res = resource.json()

    # 数据解析
    movies = []
    for movie in res:
        data = {}
        data['title'] = movie['title']
        data['rating'] = movie['rating'][0]
        data['directors'] = movie['directors'][0]
        data['casts'] = movie['casts'][0]

        movies.append(data)

    # 数据保存
    fp = open('douban.json', 'w', encoding='utf-8')
    json.dump(movies, fp=fp, ensure_ascii=False)
    print('over!')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/780811
推荐阅读
相关标签
  

闽ICP备14008679号