鱼C论坛

 找回密码
 立即注册
查看: 1979|回复: 25

[技术交流] requests爬虫详细教学(中)

[复制链接]
发表于 2023-10-6 18:35:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 陶远航 于 2023-10-6 18:37 编辑
requests爬虫详细教学(中期)


各位,实在对不起大家,打算国庆出的下期没有机会出完了,下周六继续,一定出完(拖更)

一.抓包是什么?如何抓包?

在解释抓包之前,我们先来看一下这个网站:https://spa1.scrape.center/

我们使用传统的方法试一下,我们复习一下传统的方法。

先 Ctrl+U 查看源代码,看一下整个网页的结构。

微信截图_20231005133237.png

我们看到,源代码中并没有各个电影的字样。那么它们去哪了呢?这就要通过我们的抓包找到了。

我们先按 F12,这时会跳出一个窗口,这是开发人员工具,我们切换到”网络“选项卡,如图所示:

微信截图_20231005133432.png

目前还什么都没有,我们点击刷新。

微信截图_20231005133720.png

这时,右侧就会出现很多的网络请求,这个网站上的所有信息都在这里了。我们如何快速定位到这个请求呢?

我们可以看到下面有很多选项卡,我们切换到 XHR 选项卡。

微信截图_20231005134012.png

这样我们就可以轻松定位到这个请求了

微信截图_20231005134156.png

但是为什么我们不能通过源代码得到呢?

随着科技的发展,我们对于互联网的需求越来越大,服务器如果直接渲染网页给到我们浏览器的话,就会压力很大。

这种请求方式做到了在页面不被刷新的情况下动态加载网页,减少了服务器的压力。

这种请求方式我们叫做 Ajax 请求。

所以,抓包,简单来说,就是抓取 Ajax 请求的过程。

那么,抓到请求了,我们就可以在程序中模拟发送请求了。这个跟上期帖子里所讲到的方法是一样的,我们看一下。

我们点开标头,会发现大部分的请求信息都在这里了。

微信截图_20231005134859.png

很明显,这个请求是 get 请求。注意,我们现在只学过 get 请求,post请求在下一小节展开讲解。

回归正题,我们可以看到请求的网址,是 https://spa1.scrape.center/api/movie/?limit=10&offset=0

我们使用上个帖子说的方法,可以写出代码如下:
import requests
response=requests.get("https://spa1.scrape.center/api/movie/?limit=10&offset=0")
print(response.text)

这是程序的部分输出:
{"count":102,"results":[{"id":1,"name":"霸王别姬","alias":"Farewell My Concubine","cover":"https://p0.meituan.net/movie/ce4da3e03e655b5b88ed31b5cd7896cf62472.jpg@464w_644h_1e_1c","categories":["剧情","爱情"],"published_at":"1993-07-26","minute":171,"score":9.5,"regions":["中国内地","中国香港"]},{"id":2,"nam......(篇幅原因,不再展示完整response)

那么我们就成功获取到了第一页的内容。

同样的方法,第二页的请求网址我们也可以获取到: https://spa1.scrape.center/api/movie/?limit=10&offset=10

我们分析一下这些参数。把第一页中的网址和第二页对比一下:

https://spa1.scrape.center/api/movie/?limit=10&offset=0
https://spa1.scrape.center/api/movie/?limit=10&offset=10

可以发现offset参数不同,而每页的内容都是10条,也就是limit。

我们可以大胆的推断:

limit:条数
offset:从哪一条开始

那么这样我们就可以写代码来获取完整的电影信息了,代码如下:
import requests
response=requests.get("https://spa1.scrape.center/api/movie/?limit=100&offset=0")
print(response.text)


二.POST 请求详细讲解

我们已经学习了 get 请求,那么我们继续来看一个同样非常常见的 post 请求。

我们看一下这个案例:http://httpbin.org/post

这个网站必须要 post 请求才可以访问到,我们先构造一个 post 请求。

post 请求 其实也很简单,就是在 get 请求的基础上增加了一个 data。这个 data 其实就是表单数据,用来传一些数据的。

因为如果都是 get 请求,那么网址后面的参数就会一览无遗,这很大的降低了安全性。

我们通过这样的案例引入:
import requests
 
data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post("http://httpbin.org/post", data=data)
print(response.text)

可以发现,post请求其实就是给 get 请求加上了一个 data。

响应就是:
{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "key1": "value1", 
    "key2": "value2"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Content-Length": "23", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.31.0", 
    "X-Amzn-Trace-Id": "Root=1-651e5a6c-66dc51796e6b53661a2aab34"
  }, 
  "json": null, 
  "origin": "39.184.**.**", 
  "url": "http://httpbin.org/post"
}

其实,post请求也可以通过抓包得到。

我们下期继续......

下期预告:

1.requests 的高级方法
2.通过 curl 自动写代码

评分

参与人数 8荣誉 +32 鱼币 +25 贡献 +20 收起 理由
假小龟 + 5 + 5 + 3 感谢楼主无私奉献!
gghh1112 + 5
Mike_python小 + 7 + 5 鱼C有你更精彩^_^
python爱好者. + 5 + 5 + 3 鱼C有你更精彩^_^
cjjJasonchen + 5 + 5 + 3 没电脑,收藏一会看
liuhongrun2022 + 5 + 3
学习编程中的Ben + 5 + 5 鱼C有你更精彩^_^
歌者文明清理员 + 3

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-6 19:10:53 | 显示全部楼层

回帖奖励 +5 鱼币

来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-10-6 19:11:35 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-6 19:12:39 | 显示全部楼层
学习完毕
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-6 19:16:02 | 显示全部楼层

谁用狗仔卡攻击我
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-6 19:17:31 | 显示全部楼层

回帖奖励 +5 鱼币

支持!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-6 19:20:23 | 显示全部楼层
陶远航 发表于 2023-10-6 19:16
谁用狗仔卡攻击我

not me
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-6 19:28:48 | 显示全部楼层

回帖奖励 +5 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-6 20:04:24 | 显示全部楼层

回帖奖励 +5 鱼币

针不戳
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-6 21:17:04 | 显示全部楼层

回帖奖励 +5 鱼币

【中】和【下】凑成一篇吧~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-6 21:17:41 | 显示全部楼层
小甲鱼 发表于 2023-10-6 21:17
【中】和【下】凑成一篇吧~

下个星期六/日
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-6 22:54:47 | 显示全部楼层

回帖奖励 +5 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-7 07:27:30 From FishC Mobile | 显示全部楼层
来喽!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-7 08:44:03 | 显示全部楼层

回帖奖励 +5 鱼币

学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-7 09:22:23 | 显示全部楼层

回帖奖励 +5 鱼币

先打卡再学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-7 09:49:09 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-7 09:49:25 | 显示全部楼层

回帖奖励 +5 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-7 21:38:01 | 显示全部楼层

回帖奖励 +5 鱼币

nice
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-8 09:15:23 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-8 16:55:20 | 显示全部楼层
非常好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 18:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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