python爬虫涉及的库
| 库 | 特性 | 规模 |
|---|---|---|
| Requests | 小规模、数据量小,爬取速度不敏感 | 网页 |
| Scrapy | 中规模、数据量较大,爬取速度敏感 | 网站 |
| 定制开发 | 大规模,搜索引擎,爬取速度关键 | 爬取全网 |
首先介绍Requests库
Requests库安装
打开命令行程序,pip install requests
Request库的介绍
Requests的使用
首先涉及到requests的get方法,通过get()向服务器发出HTTP请求
r = requests.get(url,param=None,kwargs)
除了url其他两个参数可选**,返回的r为response对象
Response对象的属性:
| 属性 | 含义 |
|---|---|
| r.status_code | HTTP请求返回的状态,200表示成功,404失败 |
| r.text | HTTP响应内容的字符串行是,即URL对应的页面内容 |
| r.encoding | 从HTTP header中猜测的响应内容的编码格式 |
| r.apparent_encoding | 从内容中分析出的响应内容编码方式(备选码) |
| r.content | HTTP响应内容的二进制形式 |
注意:如果页面header中没有设置charset则认为编码为ISO-8859-1
r.apparent_encoding比r.encoding准确
测试Response对象的属性
打开命令行格式,输入python,导入requests包
调用get方法向服务器发出http请求,调用 r.status_code属性查看服务器连接状态 200为成功
通过r.text 属性获取请求的http的页面内容
发现乱码,输入r.encoding 查看我们的编码格式
再输入r.apparent_encoding查看内容格式
发现两次格式内容不同,将r.encoding的格式修改为r.apparent_encoding编码格式,再输入r.text,发现乱码消失
Requests抛出的异常
| 异常 | 含义 |
|---|---|
| requests.ConnectionError | 网络连接异常,DNS查询失败,拒绝连接等 |
| requests.HTTPError | HTTP错误异常 |
| requests.URLRequeired | URL缺失异常 |
| requests.TooManyRedirects | 超过最大重定向次数,产生重定向异常 |
| requests.ConnectTimeout | 连接远程服务器超时异常 |
| requests.Timeout | 请求URL超时异常 |
r.raise_for_status()获取异常
Requests库的7个主要方法
| 方法 | 含义 |
|---|---|
| requests.request(method,url,**kwargs) | 构造一个请求,支撑以下各方法的基础 |
| requests.get(url,params=None,**kwargs) | 获取HTML页面的主要方法,对应HTTP的GET |
| requests.head(url) | 获取HTML网页头信息的方法,对应HTTP的HEAD |
| requests.post(url,data=None,json=None,**kwargs) | 向HTML页面提交POST请求的方法,对应于HTTP的POST |
| requests.put(url,data=None,**kwargs) | 向HTML页面提交PUT请求的方法,对应于HTTP的PUT |
| requests.patch(url,dara=None,**kwargs) | 向HTML提交局部修改请求,对应于HTTP的PATCH |
| requests.delete(url,**kwargs) | 向HTML页面提交删除请求,对应于HTTP的DELETE |
head()方法获取网页头部,利用属性text获取内容时则为空。
PATCH和PUT的区别:
假设URL有一组数据User Info包括UserId、UserName等20个字段,用户只修改了UserName,其他不变。
PATCH节省网络带宽
- 可以采用PATCH方法,仅向URL提交UserName的局部更新请求
- 如果采用PUT方法,必须将所有20个字段一并提交,否则未提交的字段将会被删除
requests的请求方式
requests.request(method,url,kwargs)
method:请求方式
**url:**获取页面的url连接
**kwargs:访问控制参数,一共有13个,均为可选项
requests.request(‘GET’,url,**kwargs)
requests.request(‘HEAD’,url,**kwargs)
requests.request(‘POST’,url,**kwargs)
requests.request(‘PUT’,url,**kwargs)
requests.request(‘PATCH’,url,**kwargs)
requests.request(‘delete’,url,**kwargs)
requests.request(‘OPTIONS’,url,**kwargs)
kwargs的13个访问控制参数
| 参数 | 含义 |
|---|---|
| params | 字典或字节序列,作为参数增加到URL链接后 |
| data | 字典、字节序列或文件对象,作为Request的内容,放在URL对应的地方作为数据 |
| json | JSON格式的数据,作为Request的内容,向服务器提交 |
| header | 字典,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证书路径 |
-
params:
-
data