一、request库
以下为我整理的requests库使用技巧,仅供参考。
import requests
r = requests.get("http://www.baidu.com")#通过这行代码就可以爬取网页信息
print(r.status_code) #如果输出值为200,则证明与要访问的网站链接成功
r.encoding = 'utf-8' #代码中含有中文字符时,需要写入改行 代码进行显示,不然会出现乱码。
print(r.text) #打印爬取到的代码,需要加.text
1、requests库的7个主要方法
HTTP协议对资源的操作
方法 | 说明 |
---|---|
GET | 请求获取URL位置的资源 |
HEAD | 请求获取URL位置资源的响应消息报告,即获的该资源的头部信息 |
POST | 请求向URL位置的资源后附加新的数据 |
PUT | 请求向URL位置存储一个资源,覆盖URL位置的资源 |
PATCH | 请求局部更新URL位置的资源,即改变该处资源的部分内容 |
DELETE | 请求删除URL位置存储的资源 |
1、requests.request(method,url,**kwargs)
method:请求方式,对应get/put/post等7种
url:拟获取页面的url链接
**kwargs:控制访问的参数,共13个
params:
能够增加到url中的参数,字典获字节序列。例:
data:
字典、字节序列或文件对象,作为Request的内容。(放在目录对应文件中)
json:
JSON格式的数据,作为Request的内容。
headers:
字典,HTTP定制头。
(可以进行模拟浏览器向服务器进行访问)
cookies:字典获CookieJar,从HTTP协议中解析cookie。
auth:元祖,支持HTTP认证功能。
files:字典类型,传输文件。向某个链接传输文件。
timeout:设定超时时间,秒为单位
proxies:设定访问代理服务器,可以增加登录认证,可以隐藏ID信息。
allow_redirects:默认为True,重定向开关
stream:默认为True,获取内容立即下载开关 。
verify:默认为True,认证SSL证书开关
cert:本地SSL证书路径的字段。
2、requests.get(url,params=None,**kwargs)
3、使用head()访问头部信息,代码示例:
requests.head(url,**kwargs)
import requests
r = head("http://www.baidu.com")
print(r.headers) #使用r.text适用于展示全部内容,在这里显示为空
4、适用post()提交数据,服务器会根据提交数据类型的不同进行相关的整理。
requests.put(url,data=None,json=None,**kwargs)
字符串会被编码为data;
字典会被编码为form。
5、requests.patch(url,data=None,**kwargs)
6、requests.delete(url,**kwargs)
Response对象的属性
属性 | 说明 |
---|---|
r.status_code | HTTP请求返回状态,200表示链接成功,404表示失败 |
r.text | HTTP响应内容的字符串形式,即,url对应的页面内容 |
r.encoding | 从HTTP header中猜测的响应内容编码方式(如果header中不存在charset,则认为编码为ISO-8859-1) |
r.aooarent_encoding | 从内容中分析出的响应内容编码方式(备选编码方式) |
r.content | HTTP 响应内容的二进制形式 |
3、获取网页内容的流程
二、爬取网页的通用代码框架
1、Requests库的异常
异常 | 说明 |
---|---|
requests.ConnectionError | 网络连接错误异常,如DNS查询失败、拒绝连接等 |
requests.HTTPError | HTTP错误异常 |
requests.URLRequired | URL缺失异常 |
requests.TooManyRedirects | 超过最大重定向次数,产生重定向异常 |
requests.ConnectTimeout | 连接远程服务器超时异常 |
requests.Timeout | 请求URL超时,产生超时异常 |
2、与异常打交道的方法
异常 | 说明 |
---|---|
r.raise_for_status() | 如果不是200,产生异常requests.HTTPError |
抓取网页的通用代码框架
import requests
def getHTMLText(url):
try:
r = requests.get(url,timeout = 30)
r.raise_for_status()#如果状态不是200,引发HTTPError异常
r.encoding = r.apparent_encoding
return r.text
except:
return"产生异常"