前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一篇文章带你搞懂强大的爬虫模块requests中的常用函数方法

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

作者头像
Python进阶者
发布2020-07-08 14:00:09
7580
发布2020-07-08 14:00:09
举报
文章被收录于专栏:Python爬虫与数据挖掘

/1 前言/

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

代码语言:javascript
复制
pip install requests

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

代码语言:javascript
复制
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)会话持久

代码语言:javascript
复制
#模拟淘宝登陆
import requests
url='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是在请求网站时需要输入证书时使用,平时很少用,他是个布尔类型。

代码语言:javascript
复制
import requests
from requests.packages import urllib3

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

4)解析cookies

代码语言:javascript
复制
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:

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

常见字段2:

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

常见字段3:

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

常见字段4:

代码语言:javascript
复制
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:

代码语言:javascript
复制
Connection:keep-alive

Connection表示客户端与服务器的连接类型,对应的字段值主要有两种

keep-alive表示持久性连接。

close表示单方面关闭连接,让连接断开。

所以此时,这一行字段表示客户端与服务器的连接是持久性连接。

常见字段6:

代码语言:javascript
复制
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. co

/11 使用代理服务器/

代码如下所示:

代码语言:javascript
复制
import urllib.request
import 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 不使用代理服务器/

代码如下所示:

代码语言:javascript
复制
import urllib.request
import 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 -------------------

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python爬虫与数据挖掘 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、本文基于爬虫库requests,主要剖析了该库中的7个常用方法。
  • 2、整个requests库方法差不多就是本文介绍的这些,希望能够帮助到大家学习,今天就和大家分享这么多,感谢大家的支持!
相关产品与服务
SSL 证书
腾讯云 SSL 证书(SSL Certificates)为您提供 SSL 证书的申请、管理、部署等服务,为您提供一站式 HTTPS 解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档