版权声明: https://blog.csdn.net/Wang_Jiankun/article/details/83721599
Python 网络爬虫笔记1 – Requests库
Python 网络爬虫系列笔记是笔者在学习嵩天老师的《Python网络爬虫与信息提取》课程及笔者实践网络爬虫的笔记。
课程链接:Python网络爬虫与信息提取
参考文档:
Requests 官方文档(英文)
Requests 官方文档(中文)
Beautiful Soup 官方文档
re 官方文档
Scrapy 官方文档(英文)
Scrapy 官方文档(中文)
一、Requests库安装
介绍: Requests库主要用来获取HTML网页文件
pip 安装:
pip install requests
导入模块:
import requests
测试:
import requests
# 访问百度首页
r = requests.get('http://www.baidu.com')
# 连接状态,连接成功为200
print(r.status_code)
# 百度首页内容,html
print(r.text)
二、方法
1、request() – 构造请求
函数原型:
request(method, url, **kwargs)
参数:
- method:请求的方法,有:‘GET’,‘HEAD’,‘POST’,‘PUT’,‘PATCH’,‘DELETE’
- url:请求的URL链接
- **kwargs: 13个可选参数
- params: 字典或字节序列,作为参数增加到url中
- data:字典、字节序列或文件对象,作为Request的内容
- json:JSON格式的数据,作为Request的内容
- headers: 字典,HTTP定制头
- cookies:字典或CookieJar,Request中的cookie
- files:字典类型,传输文件
- auth:元组,支持HTTP认证功能
- timeout: 设定超时时间,单位为秒
- allow_redirects:True/False,默认为True,重定向开关
- proxies: 字典类型,设定访问代理服务器,可以增加登录认证
- verify:True/False,默认为True,认证SSL证书开关
- stream:True/False,默认为True,获取内容立即下载开关
- cert: 本地SSL证书路径
返回: Response 对象,有以下属性和方法
- status_code:HTTP请求的返回状态,200表示连接成功,404表示失败
- text:HTTP响应内容的字符串形式,即rl对应的页面内容
- encoding:从HTTP header中猜测的响应内容编码方式,如果header中不存在charset则认为编码为ISO‐8859‐1,也是text解码的编码格式
- apparent_encoding:从内容中分析出的响应内容编码方式,当header中不存在charset时,encoding应赋值为apparent_encoding
- content:HTTP响应内容的二进制形式
实例:
import requests
# request 使用'GET'方法创建连接,获得http://python123.io首页的内容
r = requests.request('GET', 'http://python123.io/index')
print(r.text)
2、get() – 获取HTML网页
函数原型:
get(url, params=None, **kwargs)
参数:
- url:拟获取页面的url链接
- params:url中的额外参数,字典或字节流格式
- **kwargs:其它的12个控制访问的参数
返回: Response 对象
实例:
import requests
# 修改url链接实现登入操作
kv = {'email': '[email protected]', 'password': 'xxxx'}
r = requests.get('http://python123.io/index/login', params=kv)
print(r.url)
=> https://python123.io/index/login?email=xxxx%40qq.com&password=xxxx
# 设置超时时间
r = requests.get('http://www.baidu.com', timeout=10)
# 设定访问代理服务器
pxs = { 'http': 'http://user:[email protected]:1234'
'https': 'https://10.10.10.1:4321' }
r = requests.get('http://www.baidu.com', proxies=pxs)
3、head() – 获取HTML网页头信息
函数原型:
head(url, **kwargs)
参数:
- url:拟获取页面的url链接
- **kwargs:12个控制访问的参数
返回: Response 对象
实例:
import requests
# 只获取HTML网页的头信息
r = requests.head('https://www.baidu.com')
print(r.headers)
4、post() – 向HTML网页提交POST请求
函数原型:
post(url, data=None, json=None, **kwargs)
参数:
- url:拟更新页面的url链接
- data:字典、字节序列或文件,Request的内容
- json:JSON格式的数据,Request的内容
- **kwargs:其它的11个控制访问的参数
返回: Response 对象
实例:
import requests
# post请求,添加Request的内容
kv = {'key1': 'value1', 'key2': 'value2'}
body = '主体内容'
r1 = requests.post('https://www.baidu.com', data=kv)
r2 = requests.post('https://www.baidu.com, data=body)
r3 = requests.post('https://www.baidu.com', json=kv)
# post请求,修改请求的头信息,伪装为浏览器请求
hd = {'user‐agent': 'Chrome/10'}
r4 = requests.post('https://www.baidu.com', headers=hd)
# post请求,传输文件
fs = {'file': open('data.xls', 'rb')}
r4 = requests.post('https://www.baidu.com', files=fs)
5、put() – 向HTML网页提交PUT请求
函数原型: 必须将URL位置中所有字段一并提交到URL,未提交字段被删除
put(url, data=None, **kwargs)
参数:
- url:拟更新页面的url链接
- data:字典、字节序列或文件,Request的内容
- **kwargs:其它的12个控制访问的参数
返回: Response 对象
6、patch() – 向HTML网页提交局部修改请求
函数原型: 仅需提交URL位置中要修改的局部信息,节省网络带宽
patch(url, data=None, **kwargs)
参数:
- url:拟更新页面的url链接
- data:字典、字节序列或文件,Request的内容
- **kwargs:其它的12个控制访问的参数
返回: Response 对象-
7、delete() – 向HTML页面提交删除请求
函数原型:
delete(url, **kwargs)
参数:
- url:拟删除页面的url链接
- **kwargs:12个控制访问的参数
返回: Response 对象
三、爬取网页的通用代码框架
Requests库异常:
异常 | 说明 |
---|---|
requests.ConnectionError | 网络连接错误异常,如DNS查询失败、拒绝连接等 |
requests.HTTPError HTTP | 错误异常 |
requests.URLRequired | URL缺失异常 |
requests.TooManyRedirects | 超过最大重定向次数,产生重定向异常 |
requests.ConnectTimeout | 连接远程服务器超时异常 |
requests.Timeout | 请求URL超时,产生超时异常 |
抛出异常的方法:
requests.raise_for_status():如果不是200,产生异常requests.HTTPError
爬取网页框架:
import requests
def get_html_text(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(get_html_text(url))