爬虫笔记1-Requests库的基本方法

目标:掌握定向网络数据爬取和网页解析的基本能力

课程设置.png

◆1◆ requests库的7种主要方法

方法 说明
requests.request() 构造一个请求,支撑以下各方法的基础方法
requests.get() 获取HTML网页的主要方法,对应于HTTP的GET
requests.head() 获取HTML网页头信息的方法,对应于HTTP的HEAD
requests.post() 向HTML网页提交POST请求,对应于HTTP的POST
requests.put() 向HTML网页提交PUT请求,对用于HTTP的PUT
requests.patch() 向HTML网页提交局部修改请求,对应于HTTP的PATCH
requests.delete() 向HTML网页提交删除请求,对应于HTTP的DELETE

◆ requests.get()方法

r = requests.get(url)
构造一个向服务器请求的Request(大写)对象,返回一个包含服务器资源的Response(大写)对象,用变量r表示。
其完整使用方法为:
requests.get(url,params=None,**kwargs)

  • url:拟获取页面的url链接
  • params:url中的额外参数,字典或字节流格式,可选
  • **kwargs:12个控制访问的参数
import requests
r = requests.get('http://www.baidu.com')
print(r.status_code)  # 状态码,200表示访问正常
print(type(r))  # 可以看到Response为一个类
print(r.headers)  # 获取头部信息

输出:

200
<class 'requests.models.Response'>
{'Server': 'bfe/1.0.8.18', 'Date': 'Sat, 06 Jan 
2018 07:42:41 GMT', 'Content-Type':

**kwargs:12个控制访问的参数(参考)
参数1 params
params指能够增加到url中的参数

>>> import requests
>>> kv = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.request('GET', 'http://python123.io/ws', params = kv)
>>> print(r.url)
https://python123.io/ws?key1=value1&key2=value2

在给定的url中后面多了一个问号,问号后面key1=value1,&key2=value2。通过parame参数,我们可以把一些键值对增加到url中,然后再去访问,服务器根据这些参数筛选部分资源返回。
参数2 data
data,它可以是字典、字节序列或文件对象,作为向服务器提供或提交资源时使用。
参数3 json
json格式是http协议使用的最经常使用的数据格式,作为内容部分可以向服务器提交,比如说用字典构造一个键值对,可以把它复制给json参数,那么这个键值对就复制到服务器的json里面。

>>> kv = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.request('POST', 'http://python123.io/ws', json= kv)

参数4 headers
headers实际上是http头的相关语句,它对应了向某一个url访问时所发起的http的头字段,可以用这个字,来定制访问某一个url的http的协议头,举个例子:

>>> hd = {'user-agent': 'Chrome/10'}
>>> r = requests.request('POST', 'http://python123.io/ws', headers = hd)

把user-agent变为Chrome/10,那么在访问某一个链接时,我们可以把这样的字段赋给headers,此时headers再去向服务器访问时服务器看到的user-agent字段就是Chrome/10
参数5 cookies 和 auth
cookies和auth都是requests库的高级功能。
cookies指的是从http协议中解析cookie, 它可以是字典,也可以是CookieJar形式。
auth字段是一个元组类型,它是支持http认证功能的
参数6 files
顾名思义,它是向服务器传输文件时使用的字段。我们可以定义一个字典,用File,以对应的文件为键值对,用open的方式打开这个文件,并把这个文件与files做一个关联,同时对应到相关的url上。通过这样的方法,我们可以向某一个链接提交某一个文件,这个在特定应用时还是非常有用的。

>>> fs = {'file': open('data.txt', 'rb')}
>>> r = requests.request('POST', 'http://python123.io/ws', files= fs)
>>> 

参数7 timeout
Timeout设定的超时时间,以秒为单位。当我们发起一个get请求时,我们可以设一个timeout时间,如果在timeout时间内,我们的请求内容没有反馈回来,那么它将产生一个timeout的异常。

>>> r = requests.request('POST', 'http://python123.io/ws', timeout= 10)
>>>

参数8 Proxies
Proxies字段,他是一个字典类型,可以为我们爬取网页,设定相关的访问代理服务器。这里我们增加两个代理:

>>> pxs = {'http': 'http://user:[email protected]:1234'
              'https': 'https://10.10.10.10:4321'
>>> r = requests.request('GET', 'http://www.baidu.com', proxies= pxs)
>>> 

第一个是http访问时使用的代理,在这代理中,我们可以增加用户名跟密码的设置。后面是一个https的代理服务器,这样我们在访问百度时的ip地址,就是代理服务器的ip地址。使用这个字段可以有效的隐藏用户爬取网页的源的ip地址信息,能够有效地防止对爬虫的逆追踪
其他参数
allow_redirects 和 stream
这两个字段都是开关字段。
allow_redirects表示允不允许对url进行重定向。
stream指对获取的内容是否进行立即下载,默认情况是立即下载。
verify 和 cert
verify是一个认证ssl证书的字段。
cert是保存本地ssl证书路径的字段。
Response的5个属性

方法 说明
r.status_code HTTP请求的返回状态,200表示连接成功
r.text HTTP相应内容的字符串形式即url对应的页面内容
r.encoding 从HTTPheader中猜测的相应内容编码方式
r.apparent_encoding 从内容中分析的响应内容编码方式
r.content HTTP响应内容的二进制形式

r.encoding:如果header中不存在charset,则认为编码为ISO-8859-1

requests库常用的6种连接异常

requests库的异常


爬取网页的通用代码框架

 

import requests
def getHTMLText(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return '产生异常'

if __name__ == '__main__':
    url = 'http://www.baidu.com'
    print(getHTMLText(url))

raise_for_status()方法
Response类提供了一个raise_for_status()方法,能够判断返回的Response类型状态是不是200。如果是200,他将表示返回的内容是正确的,如果不是200,他就会产生一个异常。

◆ requests.head()方法

>>> import requests
>>> r = requests.head('http://www.cnblogs.com/zhang-anan/')
>>> r.headers
{'Date': 'Sun, 07 Jan 2018 08:21:35 GMT', 'Content-Type': 'text/html; charset=utf-8', 'Connection': 'keep-alive', 'Vary': 'Accept-Encoding', 'Cache-Control': 'private, max-age=10', 'Expires': 'Sun, 07 Jan 2018
08:21:45 GMT', 'Last-Modified': 'Sun, 07 Jan 2018 08:21:35 GMT', 'X-UA Compatible': 'IE=10', 'X-Frame-Options': 'SAMEORIGIN', 'Content-Encoding': 'gzip'}
>>> r.text
''

通过requests.head()方法可以较少流量获取网页资源的概要信息。

◆2◆ HTTP协议对资源的操作

HTTP协议对资源的操作

HTTP(HyperText Transfer Protocol)指的是超文本传输协议。超文本传输协议是一种基于请求与响应模式的无状态的应用层协议。

  • 请求与响应模式:用户发起请求,服务器做相关响应。
  • 无状态:指的是第一次请求,跟第二次请求之间,并没有相关的关联。
  • 应用层协议:指的是该协议工作在tcp协议之上



作者:有雨敲窗2017
链接:https://www.jianshu.com/p/1b0cc1a954a8
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章