吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3643|回复: 15
收起左侧

[学习记录] Python自学笔记(12)--------再次爬取豆瓣排名

  [复制链接]
l2430478 发表于 2021-1-23 23:53
本帖最后由 l2430478 于 2021-1-23 23:56 编辑

上次发的豆瓣是学习人家的代码 但是自己一知半解 ,这次自己写代码进行爬取。
感觉简单了很多。


豆瓣和搜狗爬虫是不同的,豆瓣虽然也是GET类请求,但是是动态的。
我们通过requests模块进行数据爬取无法每次都实现可见即可得。有些数据是通过非浏览器地址栏中的url请求到的数据,而是其他请求请求到的数据,那么这些通过其他请求请求到的数据就是动态加载的数据。




那什么叫做动态加载的数据?或者如何判断呢?
直接打开豆瓣 点排行榜  点动作片
网址如下:https://movie.douban.com/typeran ... l_id=100:90&action=
QQ截图5.png
抓包找不到主页对应电影的信息,我们点到Response,以杀手不太冷为例,点搜索,结果找不到对应的信息,这就说明是动态加载。
QQ截图6.png
我们点到Headers 再次按ctrl+f 进行搜索 将会出现全局搜索菜单 我们输入杀手不太冷  回车会发现搜到了新的页面。


QQ截图7.png


我们会发现里面有我们需要的信息,但这信息乱七八糟,复制信息到https://www.sojson.com/   点粘贴 点校验格式化
我们可以看到这是一段字典形式的字符
QQ截图8.png

那么我们就写代码进行提取,先做准备工作如下:
还在黄字那个页面,点到Headers,向下拉,找到Query String Parameters
QQ截图9.png
写成字典如下:

[Python] 纯文本查看 复制代码

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"






最终结果如下:
[Python] 纯文本查看 复制代码
#爬取豆瓣
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)


QQ截图10.png
有兴趣的,可以根据教程 将数据保存下来。

免费评分

参与人数 9吾爱币 +8 热心值 +9 收起 理由
夺笋 + 1 + 1 热心回复!
EliVenom + 1 + 1 用心讨论,共获提升!
ssk148150105 + 1 我很赞同!
春又来人已去 + 1 + 1 用心讨论,共获提升!
painstaking1 + 1 + 1 谢谢@Thanks!
久住飞鸟 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
bevirus + 1 + 1 谢谢@Thanks!
egbert_tao + 1 + 1 热心回复!
30900 + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

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
看好你  赞一个
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(),如果还要看响应码之类的就不能这样了,我以前也总想着怎样简便怎么写
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
不知楼主会正则表达式还有 爬虫的翻页吗 讲讲   这一块 视频里教的始终 囫囵吞枣
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 00:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表