requests库
- requests.get(url,params,**)方法
- 参数:url,本地服务器的参数
- 返回值:是一个response对象,内容为html文档的内容
- response对象r的属性:
- r.status_code :HTTP请求的返回状态
- r.text:相应内容的字符串形式:url的页面内容
- r.encoding :从http header中猜测编码方式
- 当header中不存在charset 时认为编码方式为 ISO-8859-1
- 可能会出现乱码,可以改变r.encoding=(r.apparent_encoding的编码方式),解决乱码问题
- r.apparent_encoding:从http 的响应内容中分析编码方式(备选编码方式)
- r.content:http响应内容的二进制形式(还原响应中的二进制)
通用代码框架
-
requests库的异常类型:
- requests.ConnectionsError:网络连接错误异常
- requests.HTTPError:HTTP错误异常
- requests.URLRequired:URL缺陷失异常
- requests.TooManyRedirects:超过最大重定向次数
- requests.ConnectTimeout:连接远程服务器异常
- requests.Timeout:请求URL超时
-
通过response对象r查看异常原因
- r.raise_for_status()判断返回值是否为200
import requests def getHTMLText(url): try: r = requests.get(url,timeout = 30) #检验是否发生异常,若发生异常直接执行except的异常处理 r.raise_for_status() #防止出现乱码 r.encoding = r.apparent_encoding return r.text except: return "异常"
HTTP协议与requests库的方法
HTTP URL的理解——URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源
-
HTTP协议对资源的操作:
- GET:获取URL位置的资源
- HEAD:请求资源的头信息(位置资源的响应报告消息)
- POST :请求向URL位置的资源后增加新的数据
- PUT :请求向URL位置存储一个资源覆盖原来的资源
- PATCH :请求局部更新URL位置的资源(修改该处资源的部分内容)
- DELETE :请求删除URL位置的资源
- 这也是requsts库提供的方法,每一个操作都是独立的
-
requests库对应的方法
- requests.get
- requests.head
- requests.post
- requests.put
- requests.patch
- requests.deletd
- requests库的根源方法:request
-
requests.request(method,url,******kwargs)
- **kwargs是控制访问的参数,为可选项。param:字典或字节序列作为参数加到url(把键值对加到url)
- data : 字典、字节序列或文件对象作为request的内容(不存在url中,而是把键值对存在url对应的资源里)
- json : json格式的数据作为Request的内容
- headers: 字典,HTTP定制头(模拟浏览器发送请求)、
- auth : 元组,支持http认证功能
- files : 字典,向服务器传输文件使用
- timeout : 设定的超时时间,sec为单位
- proxies : 字典类型,设定访问代理服务器,可以增加登录认证(隐藏真实的服务器)
- allow_redirects : True/False 重定向开关,默认为true
- stream : 对获取内容是否立即下载,默认为true
- verify : 认证ssl证书,默认为true
- cert: 本地sll证书路径
- 别的方法,是request的封装,参数不太一样(显式参数)
爬虫的问题
-
爬取网页 小规模 数据量小,对爬取速度不敏感 requests库
爬取网站 中规模 数据量较大,对爬取速度敏感 Scrapy库
爬取全网 大规模 做搜索引擎 定制开发
爬虫对网站服务器性能造成了骚扰,开销变大
爬虫有法律风险,知识产权
爬虫有隐私泄露的风险
应对:robots协议;审查来源 Agent-header