requests模块之豆瓣电影信息爬取
一、通过抓包工具获取请求接口
- 点击喜剧类别排行榜,可以发现里面含有排名的电影信息,如下图所示,包含憨豆先生精选辑、美丽人生等,而这些信息正是我们需要爬取的。
- 打开F12的开发者选项,就可以发现有XHR的请求信息,然后滚动鼠标滚轮,会发现页面上的影片信息变多,但是地址栏的url并没有改变,就可以知道,该排行榜的影片信息是ajax异步加载的了。
- 由上图可以发现,该请求为GET请求,并且其中Parameters(即请求的参数)中包含了5个参数(type是类型,24应该就是喜剧类型;interval_id为固定数据;start和limit应该就是初始页面以及展示的影片数量,这两个参数可以自行该改变),与前一节类似,这些都是拼接在url中的参数,也可以封装为字典作为get()方法中的params参数进行请求。可以看到response中,返回的即当前页面中的影片信息,只是为json数据,这些正是我们需要爬取的。
- 基础的流程已经分析清楚,接下来便可动手编码了。
二、requests模拟浏览器发起请求
# _*_coding : UTF-8_*_
import requests
import json
# 1、指定url
url = 'https://movie.douban.com/j/chart/top_list'
# 2、指定请求参数
param = {
'type' : '24',
'interval_id': '100:90',
'action': '',
'start': '1', # 从库中的第几部去取
'limit': '20', # 一次取出的个数
}
# 3、 UA 伪装
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36",
}
# 4、发起请求
response = requests.get(url=url, params=param, headers=headers)
with response:
list_data = response.json()
fp = open('./douban.json', 'w', encoding='utf-8')
json.dump(list_data, fp=fp, ensure_ascii=False)
print('over')
import requests
import json
def douban_spider(url=None, num=10):
"""
爬取豆瓣电影排行榜信息
:param url: 网址链接
:param num: 电影数量
:return:
"""
# assert url is not None, "url is None!" # False才会触发assert
if url is None:
print("url should not be None!")
return
# 1.指定url
url = url
# 2.UA伪装
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36'
}
# 3.设置请求参数
params = {
'type': '24', # 电影类型
'interval_id': '100:90',
'action': '',
'start': '0', # 起始电影iD
'limit': num # 数量
}
# 4.发起请求
response = requests.get(url=url, params=params, headers=headers)
# 5.获取响应数据
list_data = response.json()
# 6.持久化存储
fp = open('./douban_movies.json', 'w', encoding='utf-8')
json.dump(list_data, fp=fp, ensure_ascii=False)
for data in list_data:
print("影片:{}, 评分:{}, 年份:{}, 演员:{}".format(data["title"], data["score"], data["release_date"], data["actors"]))
print("已成功爬取{}部电影信息!".format(num))
if __name__ == '__main__':
# 喜剧类型电影页面url
url = "https://movie.douban.com/j/chart/top_list"
# 输入影片数量
num = int(input("enter your wanted nums of movies:"))
douban_spider(url=url, num=num)
向往的地方很远,喜欢的东西很贵,这就是我努力的目标。