| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 爬虫第一课——教你学会使用requests库 -> 正文阅读 |
|
[网络协议]爬虫第一课——教你学会使用requests库 |
目录 前言在requests库可以说是爬虫中必备的一个第三方库(在python2版本中常用python的内置库urllib,在python3中也常用urllib库的一些模块方便开发)。 由于requests库是第三方库,所有需要安装
requests库是作用简单来说就是:向要爬取的目标网站发送请求,再获取网站的响应数据,然后可以对这些响应数据进行简单处理。 一、发送请求的一些方式发送请求的方式有七种,爬虫常用的是GET和POST。 (一)GET
下面对其中的参数进行一些详细说明 1.urlurl为你要爬取的目标网站的链接,可以直接将url换成链接,也可以写url=目标网站链接?
2.headersheaders为请求头,也是网站反爬的重点,查看一个网站的请求头,可以打开目标网站,然后打开开发者工具(或按F12),然后选择Network,再刷新一下网页。这样就可以捕获到网站的请求和响应数据。通常选择左侧Name窗口的第一项,然后选择Headers,Request Headers,我们在爬虫中要添加的请求头都在里面。 ?爬虫请求头中最常添加的几个参数如下(直接把浏览器查到的对应项复制过来即可):
如果添加了这些参数还不能正常爬取,就尝试再复制添加几个其他的参数,如果全部参数都添加了依旧不能爬取,那么就要在其他方面“动手脚”。 添加方式为,定义一个字典,将以上参数添加到字典中,然后将headers=该字典,例如
?3.proxies当访问一个网站时,你的电脑IP地址会被网站记录下来,如果你访问太过于频繁,网站可能会认定此IP来自一个爬虫程序或者网站遭到了攻击,此时就会把这个IP添加到网站访问的黑名单中,然后再去访问网站时就会什么都获取不到,一般来说IP被封禁后几天就会恢复,但是既然我们是做爬虫的,肯定要求一个时效性,怎么一直等待几天呢?这时就用到了proxies参数。 格式如下
此时网站记录的就是你添加的IP地址,而不是你自己的电脑IP。 那么这些ip地址和端口号去哪获取呢?第一种方式是直接用浏览器搜索“ip代理”,有很多免费的代理可以选择,但是免费的缺点就是ip地址容易失效,不稳定,而且几乎没有https的;推荐使用付费的ip代理,稳定性比较高。 注意:当目标网站是http时,只有http的代理ip会生效;当目标网站是https时,只有https的代理ip会生效。 4.timeout格式如下
?作用就是当请求时间超过3秒还未获取到响应时,就会抛出异常,可以使用try...except处理异常。 5.params用于添加发送get请求时传入的一些参数,可以在开发者工具---Network---Headers---Query String Parameters中看到。 例如我在百度的搜索框中输入“params参数”,然后搜索,然后打开开发者工具,刷新网页就能看到。 ?和添加headers一样,定义一个字典,字典中写入以上内容,然后再指定params=此字典即可。 注意:有些参数是每次访问时js算法生成的,直接复制过去没有用,这就需要学习一下JS逆向破解的内容。 6.verify当浏览器访问网站出现这个提示时,使用爬虫程序请求此网站也会出错,出现这个问题的网站基本都是https的网站,是由于这个网站用到的安全证书已过期,或者这个安全证书是私人的证书,都会提示这个问题的,是网站的问题,不是你电脑或者爬虫的问题。 ?解决方式是将verify的值设置为False,表示爬虫程序不验证网站的安全证书,设置为False后爬虫可以正常请求网站,但是会出来一个警告信息(不影响程序运行) ?可以使用如下代码去掉警告~
(二)POST格式为
1.url访问的目标网站链接(同get方法) 2. headers请求头(同get方法) 3.data当请求头中的Content-Type为application/x-www-form-urlencoded时,请求的参数,在开发者工具——Network——Headers——Form Data中。 ?添加的方式也是先定义一个字典,字典中添加Form Data中的内容,然后将data=此字典。
4.json当请求头中的Content-Type为application/json时,表明需要传的是一个json类型的对象,请求的参数,在开发者工具——Network——Headers——Request Payload中。 添加的方式也是先定义一个字典,注意是字典,不需要使用json模块的json.dumps()转成json格式!requests模块会自动转。然后字典中添加Request Payload中的内容,然后将json=此字典。?
二、对响应数据进行简单处理(一)response.content返回原生的响应内容,也就是没有经过任何解码的Byte类型的二进制数据,例如图片、视频、音频、文本等等。 (二)response.apparent_encodingapparent_encoding会从网页的内容中分析网页编码的方式,可以将此值复制给response.encoding进行解码。 (二)response.text将 response.content进行解码的字符串,requests会根据自己的猜测来判断采用哪种解码方式,所以有可能会猜测错误,导致页面产生乱码,这时候就应该使用自定义的解码方式来进行解码。?response.content.decode('utf-8'),表示以utf-8的编码方式进行解码,解码的结果为Unicode类型的字符串,也可以使用gbk、gb2312等编码方式,decode()函数的默认解码方式是utf-8。 只能解码文本数据,如果是图片、音视频等不行。
也可以这样写
(三)response.status_code返回响应的状态码。 1.常见的响应状态码:
2.注意事项(1)所有的状态码都不可信(因为状态码也是网站的后端程序员写的!),一切都以是否能够抓包得到响应体中的数据为准!就是开发者工具的Network中获取的数据。 (2)一般来讲,如果网站的后端程序员讲武德,会把网站的响应状态码严格按照规定来写,此时应注意,如果response.status_code返回的状态码是4开头,就要尝试切换IP代理。 (四)response.request.headers返回向网站发送请求时的请求头。 (五)response.headers返回获取响应时的响应头。 (六)response.url返回此响应对应的请求的URL。 (七)response.request._cookies返回此响应对应的请求的Cookie,为CookieJar类型。 (八)response.cookies返回此响应的Cookie,经过了Set-Cookie的动作,为CookieJar类型。 1.将CookieJar类型转换为Cookie
2.将Cookie转换为CookieJar类型?
3.将Cookie转换为Cookie字典
三、requests.session()的使用?requests.session()用于会话保持。当使用session成功请求了某个网站,则再次使用此session对象请求该网站的其他网页时都会使用该session对象之前使用的Cookie等参数。 在请求某些网站时,需要登录才能够获取数据,我们不可能做到每请求一次都要去登陆一下,这样太过于繁琐,此时就需要用到session保持会话的功能了,我们可以只登陆一次,然后保持这种状态去完成更多的请求~ 使用方法如下:
设置了session之后,对网站的请求操作还是与之前的requests.get和requests.post一样,只是把requests换成了你自己设置的session对象名。如果headers等参数在定义session对象时已经统一设置过了,那么在get或者post请求中添加的headers等参数会把原来统一设置的headers等参数替换掉。 四、爬虫小例子(一)爬取实习僧职位信息
(二)百度图片下载
|
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 1:46:52- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |