Python自学笔记(12)--------再次爬取豆瓣排名
本帖最后由 l2430478 于 2021-1-23 23:56 编辑上次发的豆瓣是学习人家的代码 但是自己一知半解 ,这次自己写代码进行爬取。
感觉简单了很多。
豆瓣和搜狗爬虫是不同的,豆瓣虽然也是GET类请求,但是是动态的。
我们通过requests模块进行数据爬取无法每次都实现可见即可得。有些数据是通过非浏览器地址栏中的url请求到的数据,而是其他请求请求到的数据,那么这些通过其他请求请求到的数据就是动态加载的数据。
那什么叫做动态加载的数据?或者如何判断呢?
直接打开豆瓣 点排行榜点动作片
网址如下:https://movie.douban.com/typeran ... l_id=100:90&action=
抓包找不到主页对应电影的信息,我们点到Response,以杀手不太冷为例,点搜索,结果找不到对应的信息,这就说明是动态加载。
我们点到Headers 再次按ctrl+f 进行搜索 将会出现全局搜索菜单 我们输入杀手不太冷回车会发现搜到了新的页面。
我们会发现里面有我们需要的信息,但这信息乱七八糟,复制信息到https://www.sojson.com/ 点粘贴 点校验格式化
我们可以看到这是一段字典形式的字符
那么我们就写代码进行提取,先做准备工作如下:
还在黄字那个页面,点到Headers,向下拉,找到Query String Parameters
写成字典如下:
params = {
'type': '5',
'interval_id': '100:90',
'action':'',
'start': '0',
'limit': '20',
}
我们把黄色字那个网页路径复制出来,由于使用了params,那么就可以删除?后所有字符。
url ="https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start=0&limit=20"
url = "https://movie.douban.com/j/chart/top_list"
最终结果如下:
#爬取豆瓣
import requests
# url ="https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start=0&limit=20"
url = "https://movie.douban.com/j/chart/top_list"
#取headers中 Query String Parameters 数据
#'start': '10', 'limit': '200'这数据可以进行修改 调整多少页 不用再翻页爬取了。
params = {
'type': '5',
'interval_id': '100:90',
'action':'',
'start': '0',
'limit': '20',
}
headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
}
response = requests.get(url=url,params=params,headers= headers)
# response.encoding ='utf-8'
#3,获取响应数据
#.text∶返回的是字符串形式的响应数据
#page_text =response.text
#由于是字符串,所以需要使用.json( )将获取的字符串形式的json数据序列化成字典或者列表对象
page_text = response.json()
#利用for 循环函数将数据提取出来,根据解码网址上的数据,我们可以看到”title'是电影名'score'是评分。。。。。。。 那么你想要什么数据就提取吧
for movie in page_text:
name = movie['title']
score =movie['score']
print (name ,score)
有兴趣的,可以根据教程 将数据保存下来。 嘻嘻嘻,厉害了,感谢大佬 requests.get(url=url,params=params,headers= headers)可以改成requests.get(url=url,params=params,headers= headers).json().代码会简洁一点,刚学。也不知道是不是这样子,不过确实少定义一个变量 lijinglijing 发表于 2021-1-24 04:18
requests.get(url=url,params=params,headers= headers)可以改成requests.get(url=url,params=params,heade ...
谢谢提醒我也是在摸索 是干什么用的呢? {:1_921:} 看好你赞一个 lijinglijing 发表于 2021-1-24 04:18
requests.get(url=url,params=params,headers= headers)可以改成requests.get(url=url,params=params,heade ...
个人觉得代码可以根据不同需求而变化,如果只需要一个结果,那就可以.json(),如果还要看响应码之类的就不能这样了,我以前也总想着怎样简便怎么写:lol 一直看你的帖子,学到了很多 anandyuan 发表于 2021-1-24 12:37
个人觉得代码可以根据不同需求而变化,如果只需要一个结果,那就可以.json(),如果还要看响应码之类的就不 ...
确实,最近又学了点,如果要转换编码格式,必须要分开写 不知楼主会正则表达式还有 爬虫的翻页吗 讲讲 这一块 视频里教的始终 囫囵吞枣
页:
[1]
2