本文源于嵩天老师的爬虫课程。
- 网页是个API。
使用python中requests库可以自动爬取html页面,进行提交和请求。
2 reques库的安装。
我本人在更新win10 2004版本时发生错误,不得已重装了系统,重装后删除了原来所有python相关内容,在python官网下载了IDLE,在清华镜像下载了最新版的anaconda,因为anaconda自带requests库,所有没有安装。使用IDLE安装时可以试用pip命令安装(注意先升级pip命令)
3. requests的七个主要方法:
3.1 requests.requests( )方法:
构造一个请求,支撑以下各方法的基础方法
3.2 requests.get( )方法:
requests.get(url,params=None,**kwargs)
url:请求访问的网页的url链接
params:可选参数,字典或字节流格式
**kwargs:12个控制访问的参数
获取的信息被存储后嵩天老师称为response对象,即:
r=requests.get("http://www.bing.com")
其中,r即为response对象。
3.2.1 response对象的属性:
r.status_code //HTTP请求的返回状态,200为连接成功,404表示连接错误
r.text //HTTP响应内容的字符串形式,即,url对应的页面内容。
r.encoding //从HTTP header的charste中获得的响应内容编码方式(猜测),若不存在charset,则返回ISO-8859-1
r.apparent_encoding //(备选编码)从内容中分析出的响应内容编码方式
r.content //HTTP响应内容的二进制格式
3.2.2爬取网页的通用框架(爬取时的异常处理)
import requests
def getHTMLText(url):
try:
r=requests.get(url,timeout=30) //连接时间大于30秒则结束
r.raise_for_status() //若返回状态不是200,则引发HTTPError
return r,text
except:
return "error"
if __name__=='__main__':
url="http://www.baidu.com" //所要爬取的网页
print(getHTMLText(url))
常见requests异常说明:
a:requests.ConnectionError:网络连接错误:如dns查询失败、拒绝连接等
b:requests.HTTPError:HTTP错误异常
c:requests.URLRequired:URL缺失异常
d:requests.TooManyRedirects:超过最大定向次数,产生定向异常(redirects:重新寄送)
e:requests.ConnectTimeout:连接远程服务器超时异常
f:requests.Timeout:请求URL超时,产生超时异常。
response异常:
r.rase_for_status() //若不是200,产生异常requests.HTTPError
3.3 requests的6个主要方法:
由于requests库的方法和HTTP协议方法在功能上一致性相同,因此了解HTTP协议即可。
![713e264b35fd8d6657afa72bc618808e.png](https://i-blog.csdnimg.cn/blog_migrate/9fd48e74ce3c36abf79642e8622e4dd4.jpeg)
3.3.1 HTTP协议:Hypertext Transfer Protocol,超文本传输协议。HTTP是一个基于请求与响应模式的、无状态(第一次响应和第二次响应无关联)的应用层协议(工作在TCP协议之上),HTTP协议采用url作为定位网络资源的标识,url格式如下:
http://host[:port][path]
host:合法的Internet主机域名或IP地址
port:端口号,缺省端口为80
path:请求资源的(内部)路径
eg:http://www.bit.edu.cn
http://220.181.111.188/duty
3.3.2 HTTP协议对资源的操作:
GET:请求获取URL位置的资源
HEAD:请求获取URL位置资源的响应消息报告,即获得该资源的头部信息。
POST:请求向URL位置的资源后附加新的数据
PUT:请求向URL位置存储一个资源,覆盖原URL位置的资源
PATCH:请求局部更新URL位置的资源,即更改该处资源的部分内容
DELETE:请求删除URL位置的资源。
3.4 requests库主要方法解析:
3.4.1 requests.request(method,url,**kwargs)
method:请求方式,对应get/put/post等七种
url:拟或缺页面的url链接
**kwargs:控制访问参数共13个,均为可选,如下:
(1). params:字典或字节序列,作为参数增加到url中(添加字符)
kv={'key1':'value1','key2':'value2'}
r=requests.request('GET','http://python123.io/ws',params=kv)
print(r.url)
>>>http://python123.io/ws?key1=value1&key2=value2
(2).headers:字典,定义头字段
hd={'user-agent':'chrome/10'}
r=requests.request('POST','http//http://python123.io/ws',headers=hd)
(3).data:向服务器提交或提供字典,字节序列,或文件对象,作为request的内容
(4).json:向服务器提交json格式数据
(5).files:字典类型,传输文件
fs={'file':open('data.excel','rb')}
r=requests.request('POST','http://python123.io/ws',files=fs)
(6).cookies:字典或cookiejar,request中的cookie
(7).atth:元组,支持HTTP认证功能
(8).timeout:设定超时时间,以秒为单位
r=requests.request('GET','http://www.baidu.com',timeout=30)
(9).proxies:字典类型,设定访问代理服务器,增加登录认证
pxs={'http':'http://user:pass@10.10.10.1:1234'
'https':'https://10.10.10.1:4321'}
r=requests.request('GET','http://baidu.com',proxies=pxs)
(10).allow_redirects:True/False,默认为True,重定向开关
(11).stream:True/False,默认为True,获取内容立即下载开关
(12).verrfy:True/False,默认为True,认证SSL证书开关.
(13). cert:本地SSL证书路径
3.4.2 其他方法的参数
get方法除了request无法使用之外,均与request方法相同,参数也相同.其他由于不常用,需要时可网上查询.
4. robots协议:
由于滥用爬虫危害巨大,因此出现了公告性的robots协议,主要内容如下:
(1).协议一般在网站根目录下的robots.txt:如http://www.baidu.com/robots.txt
(2).规定了不允许项和恶意爬虫软件
user_agent:* //*代表所有软件
disallow: //不允许访问的目录或格式
(3).小型爬虫使用request框架,中型爬虫使用scrapy框架