分享

一篇文章带你搞懂强大的爬虫模块requests中的常用函数方法

 Python进阶者 2023-02-10 发布于广东

天生我才必有用,千金散尽还复来。

/1 前言/

    requests 是Python里面的一个爬虫模块,它可以进行一个简单的get和post请求,它是对Python基础爬虫模块urllib的一个封装,所以,学爬虫学他就好了,高效易学。安装方式也很简单,只需运行下面的安装命令:

pip install requests

或者运行下面的安装命令:

easy_install requests

即可进行安装了。

/2 基本用法/

基本用法如下表所示:

方法说明
requests.request()构造一个请求
requests.get()该方法用于向目标网址发送请求,接收响应.
requests.head()只请求页面的首部。
requests.post()请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。
requests.put()从客户端向服务器传送的数据取代指定的文档的内容。
requests.patch()向URL提交局部更新请求。
requests.delete()请求服务器删除指定的页面。

/3 request方法/

该方法用于构造一个请求,可以是get post  put等任意一种

该方法的参数列举如下:

  • url:请求 URL。

  • params:请求参数,字典类型,常用于发送 GET 请求时使用。

  • timeout:超时时间 ,整数类型。

  • headers:设置请求头。

  • auth:指定登陆时的账号和密码,元祖类型

  • verify:请求网站时是否需要验证,布尔类型

  • proxies:设置代理

  • cookies:cookies 值

  • allow_redirects:布尔值,默认为Ture,重定向开关

  • stream:布尔值,默认为True,为True时会先下载响应头,当Reponse调用content方法时才下载响应体

  • cert:传入客户端的SSL证书,为字符串时应是 SSL 客户端证书文件的路径(.pem格式,文件路径包含密钥和证书),如果是元组,就应该是一个('cert’, 'key’) 二元值对。

/4 get方法/

get方法一般用于请求返回数据。

该方法返回一个 Response 对象,其常用的属性和方法列举如下:

  • response.url:返回请求网站的 URL

  • response.status_code:返回响应的状态码

  • response.encoding:返回响应的编码方式

  • response.cookies:返回响应的 Cookie 信息

  • response.headers:返回响应头

  • response.content:返回 bytes 类型的响应体

  • response.text:返回 str 类型的响应体,相当于 response.content.decode('utf-8')

  • response.json():返回 dict 类型的响应体,相当于 json.loads(response.text)

/5 post方法/

post 一般用于表单提交,我这里为了偷懒用了个不存在的表单数据元素,嘿嘿,不过还是返回结果了。

post 还可用于上传文件,如图:

成功上传,不过如果你没找到上传文件接口,并没什么用。

post  发送json 数据,如图:

/6 put方法/

一般是从客户端向服务器传送的数据取代指定的文档的内容。

/7 patch方法/

一般就是向URL提交局部更新请求。

/8 delete方法/

一般就是请求服务器删除指定的页面。

/9 高级操作/

1)会话持久

#模拟淘宝登陆import requestsurl='https://login.taobao.com/member/login.jhtml?redirectURL=https%3A%2F%2Fai.taobao.com%2F%3Fpid%3Dmm_26632323_6762370_25910879'headers={'user-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'}formdata={'TPL_username':'fsdafdfasf','TPL_password':'fsadfasf'}se=requests.session() #建立session会话ss=se.post(url=url,headers=headers,data=formdata) #发送post请求if ss.status_code==200: #判断登陆状态  print('登录成功')else:  print('登录失败')

2)异常处理

exceptions 是requests中负责处理异常的模块,常见的有:

Timeout:请求超时

ConnectionError:网络问题,例如 DNS 故障,拒绝连接等

TooManyRedirects:请求超过配置的最大重定向数

注意 :所有显式抛出的异常都继承自 requests.exceptions.RequestException

在这里我使用了一个不存在的网址,所以他会报错,如图:

3)证书验证

verify是在请求网站时需要输入证书时使用,平时很少用,他是个布尔类型。

import requestsfrom requests.packages import urllib3
urllib3.disable_warnings()rep = requests.get("https://www.baidu.com",verify=False)print(rep.status_code)

4)cookies

cookie={ 'Cookie''_NTES_PASSPORT=aOEPpKnlDYXUXQSkcZFQZBXoYvnlgVcVZFmcHjyVB_IJHglxHydKU4wq82VtzowQcq5ImZw__GXXKzljpyKX.GM8tzWOyErtUh1m6wuxM0uJWSwCeDqVunr2aaQhRJhk0qM3Bbga1reKecRS4htGKsQqPLizIXyXo9Dtalv2UQvZTrTYuKDdXduKFW8APOGSe'}
for i in Cookie.split(';'): k,v =i.split('=')   cookie[k]=v
for k,v in cookie.items(): print(k,":",v)
#将字典转为CookieJar:cookiesJar = requests.utils.cookiejar_from_dict(self.cookies, cookiejar=None,overwrite=True)
#CookieJar转为字典requests.utils.dict_from_cookiejar(cookiesJar)

/10 爬虫伪装浏览器/

常见字段1:

Accept: text/htnl, application/xhtml+xml, application/xmlq=0.9,中/*;q=08Accept字段主要用来表示浏览器能够支持的内容类型有哪些。text html表示HTMⅡL文档。application/ xhtml+xm表示 XHTML文档。application/xml表示XMAL文档。q代表权重系数,值介于0和1之间。所以这一行字段信息表示浏览器可以支持 text/html,application/xml、/等内容类型,支持的优先顺序从左到右依次排列。

常见字段2:

accept-encoding:gzip, deflateaccept-encoding字段主要用来表示浏览器支持的压缩编码有哪些。gzip是压缩编码的一种。deflate是一种无损数据压缩算法。这一行字段信息表示浏览器可以支持gzp、 deflate等压缩编码。

常见字段3:

Accept- Language:zhCN,zh;q=0.8,en-US;q=0.5,cnq=0.3Accept-language主要用来表示浏览器所支持的语言类型。zh-CN表示简体中文语言。zh表示中文,CN表示简体en-Us表示英语(美国)语言en表示英语语言所以之一行字段表示浏览器可以支持zh-CN、zh、en-US、cn等语言。

常见字段4:

User- Agent: Mozilla5.0( Windows NT61;WOw64;rv:47.0) Gecko20100101Firefox/47.0
user-agent字段主要表示用户代理,服务器可以通过该字段识别出客户端的浏览器类客户端的操作系统及版本号型、浏览器版本号主要以伪造该字段进行网页排版引擎等客户端信息。所以之前要模拟浏览器登录,主要以伪造该字段进行。
Mozilla5.0表示浏览器名和版本号
Windows NT61;WOw64;rv:47.0 表示客户端操作系统对应信息
Gecko表示网页排版引擎对应信息。
Firefox/47.0表示火狐浏览器
所以这一行字段表示信息为对应的用户代理信息是Mozilla5.0( Windows NT61;WOw64;rv:47.0) Gecko20100101Firefox/47.0

常见字段5:

Connection:keep-alive
Connection表示客户端与服务器的连接类型,对应的字段值主要有两种
keep-alive表示持久性连接。
close表示单方面关闭连接,让连接断开。
所以此时,这一行字段表示客户端与服务器的连接是持久性连接。

常见字段6:

Host: wwwyouku.con
Host字段表示请求的服务器网址是什么,此时这一行字段表示请求的服务器网址是www,youku,con。
常见字段7: Referer:网址
Referer字段主要表示来源网址地址,比如我们从htp:/ www,youku.conm网址中访问了该网址下的子页面http/tvyouku.com?spm=0.0.topnav.5-1-3!2-A.Onqoef,那么此时来源网址为htp:/ www,youku,con,即此时 Referer字段的值为http://www.youku. com

/11 使用代理服务器/

代码如下所示:

import urllib.requestimport http.cookiejar url = "https://www.baidu.com"
# 以字典的形式设置headers
headers ={
'Accept’:'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3’,
'Accept-Encoding’: 'gzip, deflate, br’,
'Accept-Language’: ’zh-CN,zh;q=0.9',
'Cache-Control’: ’max-age=0',
'Connection’: 'keep-alive’,
’Cookie': 'BAIDUID=167421B2A215854D04495CD1BF100157:FG=1; cflag=13%3A3; BIDUPSID=167421B2A215854D04495CD1BF100157; PSTM=1587911884; __guid=136081015.2148238240541301000.1587911412950.4026; BD_UPN=12314353; BDUSS=94RFdLQ21qZnZKUnNXczZaWERxbWVIM3ZFSXVFb2V1RlJyV3RGRnFoZG9TTk5lSUFBQUFBJCQAAAAAAAAAAAEAAABeBv1hyfG56rjCuMIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGi7q15ou6teUm; ZD_ENTRY=other; BD_HOME=1; H_PS_PSSID=1422_31326_21078_31421_31341_31270_31464_30824_26350_31164_31475_22160; monitor_count=1; BDSVRTM=300’,
'Host’: 'www.baidu.com’,
'Sec-Fetch-Mode’: 'navigate’,
'Sec-Fetch-Site’: ’cross-site',
'Sec-Fetch-User': '?1’,
’Upgrade-Insecure-Requests': '1’,
'User-Agent’: 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36’
}
#设置cookie
jar = http.cookiejar.CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(jar))
head= []
# 将制定格式的headers信息添加好
for k,v in headers.items():
item = (k,v)
head.append(item)
opener.addheaders = head
# 将opener安装为全局
urllib.request.install_opener(opener)
data = urllib.request.urlopen(url).read()
hand = open(r"C:\Users\Administrator\Desktop\te.html", "wb")
hand.write(data)
hand.close()

/12 不使用代理服务器/

代码如下所示:

import urllib.requestimport http.cookiejar
url ="https://www.baidu.com"
# 以字典的形式设置headers
headers = {
'Accept’:'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3’,
'Accept-Encoding’: 'gzip, deflate, br’,
'Accept-Language’: ’zh-CN,zh;q=0.9',
'Cache-Control’: ’max-age=0',
'Connection’: 'keep-alive’,
’Cookie': 'BAIDUID=167421B2A215854D04495CD1BF100157:FG=1; cflag=13%3A3; BIDUPSID=167421B2A215854D04495CD1BF100157; PSTM=1587911884; __guid=136081015.2148238240541301000.1587911412950.4026; BD_UPN=12314353; BDUSS=94RFdLQ21qZnZKUnNXczZaWERxbWVIM3ZFSXVFb2V1RlJyV3RGRnFoZG9TTk5lSUFBQUFBJCQAAAAAAAAAAAEAAABeBv1hyfG56rjCuMIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGi7q15ou6teUm; ZD_ENTRY=other; BD_HOME=1; H_PS_PSSID=1422_31326_21078_31421_31341_31270_31464_30824_26350_31164_31475_22160; monitor_count=1; BDSVRTM=300’,
'Host’: 'www.baidu.com’,
'Sec-Fetch-Mode’: 'navigate’,
'Sec-Fetch-Site’: ’cross-site',
'Sec-Fetch-User': '?1’,
’Upgrade-Insecure-Requests': '1’,
'User-Agent’: 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36’
}
#设置cookie
jar = http.cookiejar.CookieJar()
proxy = urllib.request.ProxyHandler({'http': "127.0.0.1:8000"})
opener = urllib.request.build_opener(proxy, urllib.request.HTTPHandler, urllib.request.HTTPCookieProcessor(jar))
# 建立空列表,为了以制定格式存储头信息
head = []
for k,v in headers.items():
item = (k, v)
head.append(item)
# 将制定格式的headers信息添加好
opener.addheaders = head
# 将opener安装为全局
urllib.request.install_opener(opener)
data = urllib.request.urlopen(url).read()
# data = data.decode("utf-8")
fhandle = open(r"C:\Users\Administrator\Desktop\et.html", "wb")
hand.write(data)
hand.close()

/8 小结/

1、本文基于爬虫库requests,主要剖析了该库中的7个常用方法。
2、整个requests库方法差不多就是本文介绍的这些,希望能够帮助到大家学习,今天就和大家分享这么多,感谢大家的支持!

------------------- End -------------------

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多