突然想学习Python爬虫,看过一些视频和大牛的博客后,尝试使用requests爬取豆瓣电影,并将相关信息保存到excel中。
一、准备工作
- 安装requests库,用来爬取数据
- 安装xlsxwriter库,用来保存数据到excel
- 安装fiddler工具,用来抓包分析
二、抓包分析
目标网址 https://movie.douban.com/tag/#/ 豆瓣电影的分类目录
观察网页,在最下面有个加载更多,点击后,会显示出更多的电影信息,用fiddler抓取这一动作,结果如下:
点击后,发现页面没有刷新,所以是动态网站,那么数据应该是通过json发送过来,抓包结果也可以明显看到只有一个json数据
针对此包分析,先看右上角的request请求
是通过get方式,请求如下地址的数据
https://movie.douban.com/j/new_search_subjects?sort=U&range=0,10&tags=&start=20
其中含有参数sort、range、tags、start,目前还不清楚这些数据的含义,继续分析右下角的response响应
可以发现,response的中含有20个这样的{},每个{}都有title:电影名称、casts:演员表、directors:导演、url:详情页面、cover:封面
三、编码解析
下面先尝试编码,获取这一个会话的数据
import requests
url = 'https://movie.douban.com/j/new_search_subjects?'
query_string = {
#构造get参数信息,方便后续的变更
'sort':'U',
'range':'0,10',
'tags':'',
'start':'20'
}
headers = {
#构造request的头部信息,当前请求只有UA有用,不知道需要哪些数据的,可以把抓包获取的头部信息先都写下来
'User-Agent': "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36"
}
request = requests.get(url=url, params=query_string, headers=headers) # 发送get请求
print(request.text)
运行结果如下
可以看到已经成功获取数据
再来解析数据
import json
'''
省略上一段代码
'''
request = requests.get(url=url, params=query_string, headers=headers)
movies = json.loads(request.text)['data']#jsons.loads()获取json数据,数据是存储在字典中的'data'下
titleList = []
directorsList = []
infoUrlList = []
castsList = []
for each in movies:
titleList.append