Python网络爬虫与信息提取 网络爬虫之规则
一、Requests库入门
1.1 Requests库的安装
Request 库是 Python 中广为人知的第三方模块之一;它以其卓越的网页爬取能力而闻名。其特点在于简单易用、功能全面;此外,请访问 Request 库 获取更多信息。
2、Requests安装
在命令行中输入下列代码
pip install requests
它会自动化地下载并安装requests库(版本为2.13.0),建议使用最新版本的pip;如果当前使用的不是最新版本的pip,则需手动升级。
python -m pip install --upgrade pip
更新pip。
请在Python Interactive Developer Environment(IDE)中运行该操作流程图所示的操作步骤。若没有出现错误提示,则表明requests库已正确安装。

4、Requests库的主要7个方法
(1)requests.request():创建一个基础请求对象
(2)requests.get(url):用于从指定URL获取网页内容的方法
(3)requests.head(url):返回网页头部信息的方法
(4)requests.post(data url):向目标发送POST请求数据的方法
(5)requests.put(data url):执行局部修改操作的方法
(6)requests.patch(url):对资源进行部分更新操作的方法
(7)requests.delete(url):删除资源指定路径的方法
1.2 Requests库的get()方法
1、获取一个网页最简单的一个代码就是
r = requests.get(url)
这里我们建立一个向服务器请求资源的Request对象,并生成一个包含服务器资源的Response对象(Python区分大小写)。
2、Requests库的get()方法的完整使用是
requests.get(url,params=None,**kwargs)
url:表示拟获取网页URL地址
params:定义为 URL 中的附加参数(数据类型格式),可选设置
**kwargs**:定义为 12 个控制访问权限的关键字参数(类型设置),可选
我们打开get()的源码

发现它使用了request()方法来封装。
Response对象
该对象涵盖了所有的返回数据内容,并且完整地记录了所有的Requests所携带的信息。

r.status_code表示该请求的状态代码。type(r)用于确定 r 的数据类型;这里表明 r 返回一个响应类。r.headers提供获取页面头部信息的能力。
4、Response对象的5个属性
(1)r.status_code:HTTP请求的响应状态标识符,默认情况下200代表连接成功而404代表资源不存在的状态码结果值
(2)r.text:HTTP响应内容以字符串形式呈现
(3)r.encoding:通过HTTP header推断出的响应内容编码方式,默认情况下若header中无charset字段则编码方式设定为ISO-8859-1
(4)从HTTP内容中推断出的响应内容编码方式备选方案
(5)r.content:HTTP响应内容以二进制形式呈现
1.3 爬取网页的通用代码框架
1、由于网络连接又风险,所以我们需要做异常处理。
(1)requests.ConnectionError:网络连接失败异常现象包括DNS解析失败以及无法建立连接等情况
(2)requests.HTTPError:HTTP服务端错误类型
(3)requests.URLRequired:缺少必要的URL参数配置导致的错误
(4)requests.TooManyRedirects:已达到最大重定向次数限制出现的重定向异常
(5)requests.ConnectTimeout:无法与远程服务器建立可靠连接引发的错误
(6)requests.Timeout:目标地址无法在规定时间内响应导致请求超时
(7)如果使用$r.raise_for_status()`方法检测到返回状态码并非200,则会触发HTTPError异常。
3、示例代码
import requests
def getHTMLText(url):
try:
r=requests.get(url,timeout=300)
r.raise_for_status()
r.encoding=r.apparent_encoding
return r.text
except:
return "产生异常"
if __name__ == "__main__":
url = "http://www.baidu.com"
print(getHTMLText(url))
url = "www.baidu.com"
print(getHTMLText(url))

获取网页内容的通用方法主要涉及编写函数def getHTMLText(url)来抓取网页数据,并对可能出现的错误情况实施异常处理。
1.4 HTTP协议及Requests库方法
HTTP系统
http(hypertext transfer protocol, 超文本传输协议)是基于"请求-响应"机制的一项超越传统网页的技术基础。
2、HTTP协议采用URL作为定位网络资源的标识。
3、URL格式:
http://host[:port][path]
host:有效的互联网主机域名也包括IP地址
port:端口号,默认端口设置为80
path:请求资源的路径
4、URL(Web地址)基于HTTP协议获取网络资源的互联网路径,并且每个URL都对应一个特定的数据资源。
5、HTTP协议对资源的操作
(1)GET:请求获取URL位置的资源
(2)HEAD:请求获取URL位置资源的响应消息报告
(3)POST:请求向URL位置的资源后附加新的数据
(4)PUT:请求URL位置存储一个资源,覆盖原URL位置资源
(5)PATCH:请求局部更新URL位置的资源,即改变该处资源的部分内容
(6)DELETE:请求删除URL位置存储的资源。
6、HTTP协议对资源的操作

7、PATCH操作与PUT操作有何区别 当 URL 位置包含一组数据如 UserName、UserID 等共计 20 个字段时 需求为 用户欲修改 UserName 而不更改其余字段 (1) PATCH 操作仅涉及向 URL 发送包含局部更新信息的请求 (2) PUT 操作则要求将所有包括但不仅限于上述提到的如 UserID 等共计 20 个字段一并发送至 URL
1.5 Requests库主要方法解析
1、requests.request()
requests.request(method,url,**kwargs)
method:请求方式,对应get/put/post等7种
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)
url 用于获取目标网页的链接
**kwarges** 包含13个用于控制访问的关键字参数
params 作为请求中的参数可以是字典或字节序列
data 参数支持以数据字典、数据序列或文件对象的形式提交
json 字段仅接受合法JSON格式的数据内容
headers字段定义为HTTP定制头信息集合 cookies字段可配置为CookieJar对象或普通字典
auth字段支持基于HTTP的身份验证功能配置 file字段指定文件传输过程中的相关属性信息
timeout字段设定服务器响应超时时间(单位秒) proxies 字典类型指定代理服务器配置以辅助网络请求
注:此字段可选设置以增强身份认证能力
允许重定位开关默认设为True(默认开启)
stream字段指定是否立即开始下载响应内容(True/False类型)
verify验证字段指定是否启用SSL证书认证(默认启用)
cert字段指定本地SSL证书路径以便于安全通信
2、requests.get()
requests.get(url,params=None,**kwargs)
url:用于获取网页内容的URL地址
params:参数信息(支持字典或字节流格式),可选
**kwargs:共有12个控制访问权限的参数(除上述提到的外)均与request一致。
3、requests.head()
requests.head(url,**kwargs)
url:拟获取网页的url链接
**kwargs:13个控制访问的参数,可选。
4、requests.post()
requests.post(url,data=None,json=None,**kwargs)
url:旨在获取网页URL信息的对象
data:数据类型包括字典、二进制序列或文件
json:JSON格式的数据
**kwargs:11个控制访问权限的关键字参数
4、requests.put()
requests.put(url,data=None,**kwargs)
URL地址:目标网页的信息来源
数据类型包括字典、二进制序列或文件;Request所包含的内容
可选参数共有12个;用于控制访问相关设置
5、requests.patch()
requests.patch(url,data=None,**kwargs)
该变量用于提取目标网页的地址路径。该字段存储了三种类型的数据:字典形式的数据结构、二进制数据序列以及文件类型的存储内容。这些变量用于指定与访问相关的12个控制项,并且它们是可选的。
6、requests.delete()
requests.put(url,**kwargs)
url:拟获取网页的url链接
**kwargs:13个控制访问的参数,可选。
二、网络爬虫的“盗亦有道”
2.1 网络爬虫引发的问题
1、网络爬虫的尺寸

2、网络爬虫引发的问题
(1)性能骚扰
(2)法律风险
(3)隐私泄露
3、网络爬虫的限制
(1)长途审查:通过分析和判断User-Agent信息对网络进行IP地址限制,并获取并检查客户端发送的HTTP协议头中的User-Agent字段内容;仅允许浏览器端或友好的爬虫进行访问请求以避免误报
(2)发布robots.txt文件:说明网络抓取策略及遵循规定,并告知所有可能访问该服务器的抓取程序有关抓取策略及遵循规定
robos 协议( Robots Exclusion Standard , 网络爬虫排除标准 ) , 其作用 是告诉 网站 哪些网页是可以被 爬取 的 , 哪些 不行 。 形式 是将 该信息 放置于 网站 根 目录 下 的 robots . txt 文件 中 。
5、Robots协议基本语法
# 注释,*代表所有,/代表根目录
User-agent: *
Disallow: /
6、Robots协议的应用
网络爬虫的作用包括自动识别robots.txt文件并进行内容抓取
规定性:Robots协议被视为建议而非严格规定;即使不遵守也会面临法律风险
7、对Robots协议的理解

