目录
1、爬虫的基本概念
2、爬虫的工作原理
爬虫的三个步骤:
浏览器的工作原理:
3、爬虫组常用的库——requests
4、requests库的基础应用
①requests.get()方法
②Response对象常用属性
res.status_code
res.text
res.content
res.coding
网络爬虫,简称爬虫,是一种按照一定的规则,自动地抓取互联网信息的程序或者脚本。爬虫做的事情和蜘蛛类似,所以网络爬虫也被成为网络蜘蛛(spider)。
爬虫像浏览器一样向服务器发送请求,拿到服务器返回的数据后,根据我们自己设定的规则去获取需要的数据,数据处理完成后再将数据保存起来。
简单地说,爬虫就是模拟浏览器的行为,从而获取网站的数据。
①:获取数据,爬虫会根据我们提供的网址,向服务器发送请求获取数据;
②:处理数据,对获取的数据进行处理,得到我们需要的部分;
③:存储数据,将处理后的数据保存起来,便于后续的使用和分析等。
爬虫的工作原理中提到了像浏览器一样工作,我们来简单看一下浏览器的工作原理:
首先,在浏览器输入网址(URL);然后,浏览器去访问该网址对应的服务器,这个过程叫做请求(request)。接着,服务器将网站内容发送给浏览器,这个过程叫响应(response)。
浏览器拿到服务器返回的内容后,一般都是网页的源代码。还需要将浏览器内容解析成我们能够看懂的样子,也就是我们最终在浏览器里看到的网页。
源代码——————————解析—————————>网页
requests是爬虫最常用的第三方库,想了解更多就查看requests的中文文档吧:requests中文文档链接
requests.get()方法用来获取数据,直接上例子(以我的博客主页为例)
#导入第三方库requests
import requests
#对博客网站发送请求,将 返回值 赋值给re
re = requests.get('https://blog.csdn.net/m0_52162042?type=blog&spm=1011.2124.3001.5348')
#打印re的值
print(re)
运行结果:
我们使用requests.get('网站地址')方法向对应的网站发送了请求,然后将返回的结果存到了变量res中,供后续使用。res的类型是Response对象,后面的 200 是状态码,用来,判断是否请求成功。状态码为200时,表示请求成功,当请求失败时会有不同的状态码。不同的状态码有不同的含义,常见状态码如下:
响应状态码 | 含义 | 例子 | 含义 |
---|---|---|---|
1XX | 消息 | 100 | 继续发送请求 |
2XX |
请求成功 | 200 | 请求成功 |
3XX | 重定向 | 301 | 永久重定向 |
4XX | 客户端错误 | 404 | 找不到资源 |
5XX | 服务端错误 | 503 | 服务不可用 |
属性 | 含义 |
---|---|
res.status_code | 响应的 HTTP 状态码 |
res.text | 响应内容的字符串形式 |
res.content | 响应内容的二进制形式 |
res.encoding | 响应内容的编码 |
那就废话少说直接举例
#导入第三方库requests
import requests
#对博客网站发送请求,将 返回值 赋值给re
re = requests.get('https://blog.csdn.net/m0_52162042?type=blog&spm=1011.2124.3001.5348')
#判断对博客是否请求成功
if re.status_code==200:
print('博客请求成功')
else:
print('博客请求失败')
运行结果:
res.text 返回的时服务器响应内容的字符串形式,也就是文本内容。经过测试,如果直接打印返回值为空,CSDN博客有反爬虫机制,所以增加了请求头,这里暂时不做解释。
#导入第三方库requests
import requests
#由于CSDN博客有反爬虫机制,所以加了请求头
headers={
'user-agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36 SE 2.X MetaSr 1.0'
}
#对博客网站发送请求,将 返回值 赋值给re
re = requests.get('https://blog.csdn.net/m0_52162042?type=blog&spm=1011.2124.3001.5348',headers=headers)
#输出返回内容的 字符串格式
print(re.text)
运行结果:
除了文本内容的下载,爬虫还能下载图片、音频、视频等。经过网页的分析,可以获得”小狼宝宝博客“头像的地址为:https://profile.csdnimg.cn/4/0/3/1_m0_52162042
#导入第三方库requests
import requests
#由于CSDN有反爬虫机制,所以加了请求头
headers={
'user-agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36 SE 2.X MetaSr 1.0'
}
#对博客网站发送请求,将 返回值 赋值给re
re = requests.get('https://profile.csdnimg.cn/4/0/3/1_m0_52162042',headers=headers)
#以二进制写入的方式,打开一个名为“小浪宝宝头像.jpg”的文件
with open('小浪宝宝头像.jpg','wb') as file:
#将数据的二进制形式写入文件
file.write(re.content)
运行结果:
res.text 和 res.content 的区别是:res.text 用于文本内容的获取、下载,res.content 用于图片、音频、视频等二进制的获取、下载。
编码是信息从一种形式或格式转换成另一种形式的过程。常见的编码方式有ASCII、GBK、UTF-8 等。如果用和文件编码方式不同的方式去解码,我们会得到一些乱码。
res.encoding 是爬虫获取数据的编码格式,requests 库会根据内容推测编码格式是什么,然后将 res.coding 设成推测的格式,在访问 res.text 时 使用该格式解码。当推测的编码格式错误时,即出现乱码时,就需要我们手动给定 res.encoding 赋值。话不多说,还是从实践中找寻真理!
#导入第三方库requests
import requests
#对百度网站发送请求,将 返回值 赋值给re
re = requests.get('https://www.baidu.com')
#打印出返回内容的 字符串格式
print(re.text)
运行结果:
用print(res.encoding)命令打印编码格式为:ISO-8859-1 ,而国内网站的编码格式一般是UTF-8、GBK 或 GB2312 。
上述代码中网站的正确编码格式其实是 UTF-8 ,我门手动将编码格式改成 UTF-8 ,便能显示正确的内容了。
#导入第三方库requests
import requests
#对百度网站发送请求,将 返回值 赋值给re
re = requests.get('https://www.baidu.com')
#手动将编码格式改为 'UTF-8',并不区分大小写,'utf-8'也可以
re.encoding='UTF-8'
#打印出返回内容的 字符串格式
print(re.text)
运行结果:
好了,今天的分享就到这里了,如果我的内容能帮到你,点个赞呗
如果你对今天的分享有疑问,欢迎留言。