l2430478 发表于 2021-1-23 23:53

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)


有兴趣的,可以根据教程 将数据保存下来。

bathewind 发表于 2021-1-24 00:00

嘻嘻嘻,厉害了,感谢大佬

lijinglijing 发表于 2021-1-24 04:18

requests.get(url=url,params=params,headers= headers)可以改成requests.get(url=url,params=params,headers= headers).json().代码会简洁一点,刚学。也不知道是不是这样子,不过确实少定义一个变量

l2430478 发表于 2021-1-24 06:17

lijinglijing 发表于 2021-1-24 04:18
requests.get(url=url,params=params,headers= headers)可以改成requests.get(url=url,params=params,heade ...

谢谢提醒我也是在摸索

007feiren 发表于 2021-1-24 06:44

是干什么用的呢?

VIP007 发表于 2021-1-24 09:42

{:1_921:} 看好你赞一个

anandyuan 发表于 2021-1-24 12:37

lijinglijing 发表于 2021-1-24 04:18
requests.get(url=url,params=params,headers= headers)可以改成requests.get(url=url,params=params,heade ...

个人觉得代码可以根据不同需求而变化,如果只需要一个结果,那就可以.json(),如果还要看响应码之类的就不能这样了,我以前也总想着怎样简便怎么写:lol

painstaking1 发表于 2021-1-25 11:38

一直看你的帖子,学到了很多

lijinglijing 发表于 2021-1-26 12:32

anandyuan 发表于 2021-1-24 12:37
个人觉得代码可以根据不同需求而变化,如果只需要一个结果,那就可以.json(),如果还要看响应码之类的就不 ...

确实,最近又学了点,如果要转换编码格式,必须要分开写

2995166399 发表于 2021-2-1 01:20

不知楼主会正则表达式还有 爬虫的翻页吗 讲讲   这一块 视频里教的始终 囫囵吞枣
页: [1] 2
查看完整版本: Python自学笔记(12)--------再次爬取豆瓣排名