Python爬虫(二)——requests库
requests库
公认的爬取网页最好的库
安装方法
用cmd打开控制台,输入
pip install requests
测试
抓取百度的网页代码。
打开IDLE输入一下代码
import requests
r = requests.get("http://www.baidu.com")
r.status_code
r.encoding = "UTF-8"
r.text
状态码为200即为成功,否则失败。
7个主要方法
requests.requests()
构造一个请求,支撑所有方法的基础。
requests.requests(method,url,**kewargs)
- method:请求方式,对应get/put/post等七种
- url:获取页面的url链接
- **kwargs:13个控制访问参数。其中params的使用方法:
**kwargs的13个参数
- params:字典或字节序列,作为参数增加到url中
- data:字典、字节序列或文件对象,作为Request的内容
- json:JSON格式的数据,作为Request的内容
- headers:字典,HTTP定制头
- cookies:字典或CookieJar,Request中的cookie
- auth:元组,支持HTTP认证功能
- files:字典类型,传输文件
- timeout:设定超时时间,单位为秒
- proxies:字典类型,设定访问代理服务器,可以增加登录认证
- allow_redirects:True/False,默认为True,重定向开关
- stream:True/False,默认为True,获取内容立即下载开关
- verify:True/False,默认为True,认证SSL证书开关
- cert:本地SSL证书路径
requests.get()
获取HTML网页的主要方法,对应于与HTTP的GET方法。
r= requests.get(url)
构造一个向服务器请求资源的Request对象,返回一个包含服务器资源的Response对象。
完整的格式:
requests.get(url,params = None,**kwargs)
- url:拟获取页面的url链接
- params:url中的额外参数,字典或字节流格式,可选
- **kwargs:12个控制访问的参数,可选。requests中除了params的参数
get方法实际上使用了requests方法来封装。
Response对象
常用属性
- r.status_code HTTP请求的返回状态,200表示连接成功,404表示失败。
- r.text HTTP响应内容的字符串形式。即url对应的页面内容。
- r.encoding 从HTTP hear中猜测的响应内容编码方式。如果在返回的header中charset为空默认为ISO-8859-1。
- r.apparent_encoding 从内容中分析出的响应内容编码方式(备选编码方式)。
- r.content HTTP响应内容的二进制形式。
requests.head()
获取HTML网页头信息的方法,对应于HTTP的HEAD方法。
requests.head(url,**kwargs)
- url:获取页面的url链接
- **kwargs:13个控制访问的参数
实例:
r = requests.head('http://httpbin.org/get')
r.headers
r.text
requests.post()
向HTML网页提交POST请求的方法,对应于HTTP的POST。
requests.post(url,data=None,json=None,**kwargs)
- url:更新页面的url链接
- data:字典、字节序列或文件,Request的内容
- json:JSON格式的数据,Request的内容
- **kwargs:11个控制访问的参数(除了requests中的data和json)
实例:
payload = {'key1':'value1', 'key2':'value2'}
r = requests.post('http://httpbin.org/post', data = payload)
print(r.text)
结果:
requests.put()
向HTML网页提交PUT请求的方法,对应于HTTP的PUT。
requests.put(url,data= None,**kwargs)
- url:更新页面的url链接
- data:字典、字节序列或文件,Request的内容
- **kwargs:12个控制访问的参数(除了requests中的data)
实例:
payload = {'key1':'value1', 'key2':'value2'}
r = requests.put('http://httpbin.org/put', data = payload)
print(r.text)
结果:
requests.patch()
向HTML网页提交局部修改请求的方法,对应于HTTP的PATCH。
requests.patch(url,data= None,**kwargs)
- url:更新页面的url链接
- data:字典、字节序列或文件,Request的内容
- **kwargs:12个控制访问的参数(除了requests中的data)
requests.delete()
向HTML页面提交删除请求的方法,对应于HTTP的DELETE。
requests.delete(url,**kwargs)
- url:更新页面的url链接
- **kwargs:13个控制访问的参数
通用代码框架
六种常见的异常
- requests.ConnectionError 网络连接错误异常,如DNS查询失败、拒绝连接等。
- requests.HTTPError HTTP错误异常
- requests.URLRequired URL缺失异常
- requests.TooManyRedirects 超过最大重定向次数,产生重定向异常
- requests.ConnectTimeout 连接远程服务器超时异常
- requests.Timeout 请求URL超时,产生超市异常
r.raise_fo_status()
如果返回值不是200,产生异常requests.HTTPError
通用代码框架
爬取页面
def getHTMLText(url):
try:
r = requests.get(url, timeout=30)
r.raise_for_status() #如果状态不是200,引发HTTPError异常
r.encoding = r.apparent_encoding
return t.text
except:
return "产生异常"
最大的用处是使用户爬取网页变得更有效、更稳定、更可靠。
HTTP协议及Requests库方法
HTTP协议
Hypertext Transfer Protocol,超文本传输协议。是一个基于“请求与响应”模式、无状态的应用层协议。采用URL作为定位网络资源的格式(http:// host [:port] [path],host:合法的Internet主机或IP地址,port:端口号,path:请求资源的路径)。URL使通过HTTP协议存取资源的Internet路径。一个URL对应一个数据资源。
HTTP协议对资源的操作
- GET 请求获取URL位置的资源。
- HEAD 请求获取URL位置资源的响应消息报告,即获得该资源的头部信息。
- POST 请求向URL位置的资源后附加新的数据。
- PUT 请求向URL位置存储一个资源,覆盖原URL位置的资源。
- PATCH 请求局部更新URL位置的资源,即改变该处资源的部分内容。
- DELETE 请求i删除URL位置存储的资源。
小结
由于网络安全的限制,我们最常使用的是requests.get()方法,某些时候会使用requests.head()方法。
由于网络链接的问题我们需要一个通用代码框架。
下一篇: Python爬虫-requests库