马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 陶远航 于 2023-10-3 09:00 编辑
requests爬虫详细教学(上期)
一.requests库的安装
有一些鱼油在爬虫过程中可能遇到各种各样的问题,其中之一就是没有安装好 requests 库。
那么,安装 requests 库将会成为我们爬虫学习的第一步。
该如何安装呢?我们只要按住 Win+R 键,系统就会弹出一个运行窗口,输入 cmd ,回车即可打开命令提示符。
然后我们只需输入以下命令:就会自动安装 requests 库,你只需等待安装完成即可。
二.requests的使用
在之前我们安装了 requests 库,那么它该如何使用呢?
最常用的是 requests 中的 get 和 post 方法。
1.get方法基础
通过get方法,我们可以很轻松的获取一个网页的源代码。
怎么看网页的源代码呢?我们以 fishc 为例,打开https://fishc.com.cn/,按住 Ctrl+U ,就可以看到打开了这样的一个页面:
看到了吗?这就是网页的源代码。那么我们想要通过程序获取这些信息也不难,我将教你们一步一步写一个最简单的爬虫。
程序第一行,肯定是先导入 requests 库啦,只需这样写:就可以导入 requests 库。
那么我们想获取源代码就要用到 requests 中的 get 方法,你可以这么写:response=requests.get("https://fishc.com.cn/")
到这里,你会发现程序没有输出任何内容。但是实际上,response 对象已经包含了很多有用的信息。例如:
response.status_code:响应的状态码,表示请求是否成功。
response.headers:响应的头部信息,包含一些元数据。
response.cookies:响应的cookies信息,用于记录用户的状态。
response.content:响应的内容(字节形式),用于获取二进制数据如图片、视频等。
response.text:响应的内容(字符串形式),用于获取文本数据如HTML、JSON等。
我们只需要:就可以看到网页源代码了。
好的,相信你们已经初步了解 requests 是干什么的了,接下来还有更厉害的!
学习这个之前,我们先来复习一些正则表达式,完全没有学过的同学可以去听一下小甲鱼的课程,这里只做简单讲解,供复习使用。
match方法匹配字符串开头
search方法扫描整个字符串
find_all方法匹配所有与正则表达式匹配的字符串
re.S使匹配内容包括换行符在内的所有字符
具体正则表达式的学习可以参考小甲鱼的在线视频。
接下来带大家手把手写一个爬虫程序。
我们使用https://scrape.center/案例网站讲解。
首先打开https://ssr1.scrape.center/,也就是最简单的那个。
我们的目的是爬取所有的电影名称。
第一步,打开源代码进行查看。我们搜索“霸王别姬 - Farewell My Concubine”
匹配到了一个!那么我们的正则表达式应该是:<h2 data-v-7f856186="" class="m-b-sm">(.*?)</h2>
第二步,写代码
导入必要库:import requests
import re
获取源码:r=requests.get("https://ssr1.scrape.center/")
匹配:result=re.findall('<h2 data-v-7f856186="" class="m-b-sm">(.*?)</h2>',r.text)
输出:for i in result:
print(i)
程序会输出以下内容:霸王别姬 - Farewell My Concubine
这个杀手不太冷 - Léon
肖申克的救赎 - The Shawshank Redemption
泰坦尼克号 - Titanic
罗马假日 - Roman Holiday
唐伯虎点秋香 - Flirting Scholar
乱世佳人 - Gone with the Wind
喜剧之王 - The King of Comedy
楚门的世界 - The Truman Show
狮子王 - The Lion King
是不是很酷?那我们怎么爬取第二页,第三页?
可以看到,点击第二页,url会变成:https://ssr1.scrape.center/page/2
同样,第三页:https://ssr1.scrape.center/page/3
所以,我们简单加一个循环即可获取所有内容,这里我们以爬取3页为例:def get_movies(url):
r=requests.get(url)
result=re.findall('<h2 data-v-7f856186="" class="m-b-sm">(.*?)</h2>',r.text)
for i in result:
print(i)
for i in range(1,4):
get_movies(f"https://ssr1.scrape.center/page/{i}")
这里我直接包装成了一个函数,方便调用。函数属于基础内容,不再赘述。
那么我们可以爬取图片吗?答案是:可以。
以这张图片为例,我们右键新标签页打开图片,就可以获取图片链接:https://p0.meituan.net/movie/ce4da3e03e655b5b88ed31b5cd7896cf62472.jpg@464w_644h_1e_1c
我们如何爬取这张图片?我们使用传统方法试下。import requests
res=requests.get("https://p0.meituan.net/movie/ce4da3e03e655b5b88ed31b5cd7896cf62472.jpg@464w_644h_1e_1c")
print(res.text)
我们发现,程序输出了一串乱码。这是啥?我怎么保存图片?
其实,现在我们爬取的图片应该要打开文件写入二进制数据,所以不能输出text,应该写入content二进制数据。
示例代码:with open("demo.jpg","wb") as f:
f.write(response.content)
这样,我们的图片就写入成功了,音频、视频也是同样的原理。
2.get方法的参数
我们如何给get方法添加请求头,cookies 等内容?
1.headers 参数
这里我们需要知道请求头到底是干什么的。这里我只讲一个最常用也是最重要的:user-agent
这个是为了防止服务器屏蔽我们的爬虫,也是服务器知道我们的浏览器信息的一种方式。
那我们怎么加 headers 呢?我给一个示例你就明白了。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"}
requests.get(url,headers=headers)
其中,url 可以为任意 url 。具体请求头怎么获取,留一个悬念,下一个帖子会告诉你。
2.cookies 参数
cookies 可以维持我们的登录状态。只要在爬虫程序里面增加了cookies,即可做到登录网站的操作。
这里先留一个悬念,等学习了抓包操作再展开说。所以,下一节的内容也会很多!
今天先到这里,等国庆的时候出下集...
求评分,你的支持就是我创作的动力!!!
下集预告:
1.抓包是什么?如何抓包?
2.POST 请求详细讲解
3.requests 的高级方法
4.通过 curl 自动写代码
|