爬虫入门—requests模块基础之豆瓣电影信息爬取
Author: Labyrinthine Leo
Init_time: 2021.02.21
Key Words: Spider
、requests库
公众号:Leo的博客城堡
1、需求分析
需求:在上一节中,我们已经学会了分析异步加载页面,并通过关键字对百度翻译的结果进行爬取;这一节,我们主要对异步加载页面分析的巩固练习,使用requests
库对豆瓣电影信息的爬取。
分析:
- 如图所示,在搜索软件中输入
豆瓣电影排行榜
关键字进行搜索,即会出现豆瓣电影的相关排行榜信息。可以在分类排行榜中发现有个类别的排行榜,这里我们以其中的喜剧为例进行数据爬取。
- 我们点击喜剧类别排行榜,可以发现里面含有排名的电影信息,如下图所示,包含
憨豆先生精选辑
、美丽人生
等,而这些信息正是我们需要爬取的。
- 打开
F12
的开发者选项,就可以发现有XHR
的请求信息,然后滚动鼠标滚轮,会发现页面上的影片信息变多,但是地址栏的url
并没有改变,就可以知道,该排行榜的影片信息是ajax
异步加载的了。
- 由上图可以发现,该请求为
GET
请求,并且其中Parameters
(即请求的参数)中包含了5个参数(type
是类型,24应该就是喜剧类型;interval_id
为固定数据;start
和limit
应该就是初始页面以及展示的影片数量,这两个参数可以自行该改变),与前一节类似,这些都是拼接在url
中的参数,也可以封装为字典作为get()
方法中的params
参数进行请求。可以看到response
中,返回的即当前页面中的影片信息,只是为json
数据,这些正是我们需要爬取的。 - 基础的流程已经分析清楚,接下来便可动手编码了。
2、编码
# coding : utf-8
# fun : 爬取豆瓣电影排行榜信息
# @Author : Labyrinthine Leo
# @Time : 2021.01.30
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)
运行结果:
临渊羡鱼不如退而结网
创作不易,如果您觉得这篇文章对你有用,可以点个赞,算是对笔者的支持和激励!这里是Leo的博客城堡,以Python为核,ML&DL为主,泛之形形色色,输寥寥拙见,摄浮光掠影,讲三两故事。临渊羡鱼,不如退而结网,持续干货输出,有趣的灵魂值得你的关注!
原文可以去笔者的github
主页:https://github.com/LabyrinthineLeo/Yxs_Git_Learning_repos
查看(如果可以,点个star
也无妨呀,嘿嘿)。