鱼C论坛

 找回密码
 立即注册
查看: 2563|回复: 41

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

[复制链接]
发表于 2023-9-24 16:26:10 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 陶远航 于 2023-10-3 09:00 编辑
requests爬虫详细教学(上期)


一.requests库的安装

有一些鱼油在爬虫过程中可能遇到各种各样的问题,其中之一就是没有安装好 requests 库。

那么,安装 requests 库将会成为我们爬虫学习的第一步。

该如何安装呢?我们只要按住 Win+R 键,系统就会弹出一个运行窗口,输入 cmd ,回车即可打开命令提示符。

然后我们只需输入以下命令:
  1. pip install requests
复制代码

就会自动安装 requests 库,你只需等待安装完成即可。

二.requests的使用

在之前我们安装了 requests 库,那么它该如何使用呢?

最常用的是 requests 中的 get post 方法。

1.get方法基础

通过get方法,我们可以很轻松的获取一个网页的源代码。

怎么看网页的源代码呢?我们以 fishc 为例,打开https://fishc.com.cn/,按住 Ctrl+U ,就可以看到打开了这样的一个页面:
微信截图_20230924150437.png

看到了吗?这就是网页的源代码。那么我们想要通过程序获取这些信息也不难,我将教你们一步一步写一个最简单的爬虫。

程序第一行,肯定是先导入 requests 库啦,只需这样写:
  1. import requests
复制代码
就可以导入 requests 库。

那么我们想获取源代码就要用到 requests 中的 get 方法,你可以这么写:
  1. response=requests.get("https://fishc.com.cn/")
复制代码

到这里,你会发现程序没有输出任何内容。但是实际上,response 对象已经包含了很多有用的信息。例如:

response.status_code:响应的状态码,表示请求是否成功。
response.headers:响应的头部信息,包含一些元数据。
response.cookies:响应的cookies信息,用于记录用户的状态。
response.content:响应的内容(字节形式),用于获取二进制数据如图片、视频等。
response.text:响应的内容(字符串形式),用于获取文本数据如HTML、JSON等。

我们只需要:
  1. print(response.text)
复制代码

就可以看到网页源代码了。
微信截图_20230924151111.png

好的,相信你们已经初步了解 requests 是干什么的了,接下来还有更厉害的!

学习这个之前,我们先来复习一些正则表达式,完全没有学过的同学可以去听一下小甲鱼的课程,这里只做简单讲解,供复习使用。
match方法匹配字符串开头
search方法扫描整个字符串
find_all方法匹配所有与正则表达式匹配的字符串
re.S使匹配内容包括换行符在内的所有字符
具体正则表达式的学习可以参考小甲鱼的在线视频。

接下来带大家手把手写一个爬虫程序。
我们使用https://scrape.center/案例网站讲解。
首先打开https://ssr1.scrape.center/,也就是最简单的那个。

我们的目的是爬取所有的电影名称。

第一步,打开源代码进行查看。我们搜索“霸王别姬 - Farewell My Concubine

微信截图_20230924152724.png

匹配到了一个!那么我们的正则表达式应该是:
  1. <h2 data-v-7f856186="" class="m-b-sm">(.*?)</h2>
复制代码


第二步,写代码

导入必要库:
  1. import requests
  2. import re
复制代码
获取源码:
  1. r=requests.get("https://ssr1.scrape.center/")
复制代码
匹配:
  1. result=re.findall('<h2 data-v-7f856186="" class="m-b-sm">(.*?)</h2>',r.text)
复制代码
输出:
  1. for i in result:
  2.     print(i)
复制代码
程序会输出以下内容:
  1. 霸王别姬 - Farewell My Concubine
  2. 这个杀手不太冷 - Léon
  3. 肖申克的救赎 - The Shawshank Redemption
  4. 泰坦尼克号 - Titanic
  5. 罗马假日 - Roman Holiday
  6. 唐伯虎点秋香 - Flirting Scholar
  7. 乱世佳人 - Gone with the Wind
  8. 喜剧之王 - The King of Comedy
  9. 楚门的世界 - The Truman Show
  10. 狮子王 - The Lion King
复制代码

是不是很酷?那我们怎么爬取第二页,第三页?
可以看到,点击第二页,url会变成:
  1. https://ssr1.scrape.center/page/2
复制代码

同样,第三页:
  1. https://ssr1.scrape.center/page/3
复制代码

所以,我们简单加一个循环即可获取所有内容,这里我们以爬取3页为例:
  1. def get_movies(url):
  2.     r=requests.get(url)
  3.     result=re.findall('<h2 data-v-7f856186="" class="m-b-sm">(.*?)</h2>',r.text)
  4.     for i in result:
  5.         print(i)

  6. for i in range(1,4):
  7.     get_movies(f"https://ssr1.scrape.center/page/{i}")
复制代码

这里我直接包装成了一个函数,方便调用。函数属于基础内容,不再赘述。

那么我们可以爬取图片吗?答案是:可以。
微信截图_20230924154233.png

以这张图片为例,我们右键新标签页打开图片,就可以获取图片链接:
  1. https://p0.meituan.net/movie/ce4da3e03e655b5b88ed31b5cd7896cf62472.jpg@464w_644h_1e_1c
复制代码

我们如何爬取这张图片?我们使用传统方法试下。
  1. import requests
  2. res=requests.get("https://p0.meituan.net/movie/ce4da3e03e655b5b88ed31b5cd7896cf62472.jpg@464w_644h_1e_1c")
  3. print(res.text)
复制代码

我们发现,程序输出了一串乱码。这是啥?我怎么保存图片?

其实,现在我们爬取的图片应该要打开文件写入二进制数据,所以不能输出text,应该写入content二进制数据。

示例代码:
  1. with open("demo.jpg","wb") as f:
  2.     f.write(response.content)
复制代码

这样,我们的图片就写入成功了,音频、视频也是同样的原理。

2.get方法的参数

我们如何给get方法添加请求头,cookies 等内容?

1.headers 参数

这里我们需要知道请求头到底是干什么的。这里我只讲一个最常用也是最重要的:user-agent

这个是为了防止服务器屏蔽我们的爬虫,也是服务器知道我们的浏览器信息的一种方式。

那我们怎么加 headers 呢?我给一个示例你就明白了。
  1. headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.62"}
  2. requests.get(url,headers=headers)
复制代码

其中,url 可以为任意 url 。具体请求头怎么获取,留一个悬念,下一个帖子会告诉你。

2.cookies 参数

cookies 可以维持我们的登录状态。只要在爬虫程序里面增加了cookies,即可做到登录网站的操作。

这里先留一个悬念,等学习了抓包操作再展开说。所以,下一节的内容也会很多!

今天先到这里,等国庆的时候出下集...

求评分,你的支持就是我创作的动力!!!

下集预告:
1.抓包是什么?如何抓包?
2.POST 请求详细讲解
3.requests 的高级方法
4.通过 curl 自动写代码


评分

参与人数 19荣誉 +64 鱼币 +53 贡献 +36 收起 理由
szbin + 1 + 1 + 1 鱼C有你更精彩^_^
ty5777 + 5 + 5 + 3 感谢楼主无私奉献!
勇敢的向前冲 + 3 + 3 + 3
canfeng0522 + 5 + 3 + 3 鱼C有你更精彩^_^
__add__ + 1 + 1 鱼C有你更精彩^_^
501 + 4 + 4 + 2
hi我欲成仙 + 1
歌者文明清理员 + 5 + 3
九歌当下 + 1 + 1 鱼C有你更精彩^_^
世味 + 3

查看全部评分

本帖被以下淘专辑推荐:

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

使用道具 举报

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

使用道具 举报

发表于 2023-9-24 16:34:39 | 显示全部楼层

回帖奖励 +5 鱼币

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

使用道具 举报

发表于 2023-9-24 16:47:18 | 显示全部楼层

回帖奖励 +5 鱼币

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

使用道具 举报

发表于 2023-9-24 17:42:22 From FishC Mobile | 显示全部楼层

回帖奖励 +5 鱼币

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

使用道具 举报

 楼主| 发表于 2023-9-24 17:42:55 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-24 19:17:55 | 显示全部楼层

回帖奖励 +5 鱼币

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

使用道具 举报

发表于 2023-9-24 19:32:59 | 显示全部楼层

回帖奖励 +5 鱼币

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

使用道具 举报

发表于 2023-9-24 19:42:40 | 显示全部楼层

回帖奖励 +5 鱼币

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

使用道具 举报

发表于 2023-9-24 21:02:43 | 显示全部楼层

回帖奖励 +5 鱼币

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

使用道具 举报

发表于 2023-9-24 21:19:53 | 显示全部楼层

回帖奖励 +5 鱼币

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

使用道具 举报

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

回帖奖励 +5 鱼币

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

使用道具 举报

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

回帖奖励 +5 鱼币

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

使用道具 举报

发表于 2023-9-25 14:10:36 | 显示全部楼层

回帖奖励 +5 鱼币

这个太棒了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-27 21:55:50 | 显示全部楼层

回帖奖励 +5 鱼币

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

使用道具 举报

发表于 2023-9-28 07:51:12 From FishC Mobile | 显示全部楼层

回帖奖励 +5 鱼币

好棒的教程,其实可以教一下bs4

期待下集,
现在网上的爬虫教程其实挺少的,更别提这种高质量的了

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
陶远航 + 5 + 5 + 3 感谢支持!

查看全部评分

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

使用道具 举报

发表于 2023-9-28 09:17:52 | 显示全部楼层

回帖奖励 +5 鱼币

二、requests的使用
里面的例子
爬取前3页内容,循环那不是应该用 range(1,4)吗, range(1,3)不是只有1,2 吗

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
陶远航 + 5 + 5 + 3

查看全部评分

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

使用道具 举报

 楼主| 发表于 2023-9-28 21:05:48 | 显示全部楼层
360341024 发表于 2023-9-28 09:17
二、requests的使用
里面的例子
爬取前3页内容,循环那不是应该用 range(1,4)吗, range(1,3)不是只有1 ...

是的,确实出错了,感谢提醒!今天电脑不在,明天更新
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-29 08:23:48 | 显示全部楼层

回帖奖励 +5 鱼币

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

使用道具 举报

发表于 2023-9-29 08:38:22 | 显示全部楼层

回帖奖励 +5 鱼币

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 15:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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