Python网络爬虫技术 第3章-简单静态网页爬取
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5
使用urllib3库实现
3. Timeout设置
为防止因为网络不稳定、服务器不稳定等问题造成连接不稳定时的丢包,可以在请求中增加timeout参数 设置,通常为浮点数。依据不同需求,timeout参数提供多种设置方法,可直接在URL后设置该次请求的 全部timeout参数,也可分别设置该次请求的连接与读取timeout参数,在PoolManager实例中设置 timeout参数可应用至该实例的全部请求中。
为避免因等待服务器响应造成程序永久失去响应,通常需要给程序设置一个时间作为限制,超过该时间后 程序将会自动停止等待。在requests库中通过设置timeout这个参数实现,超过该参数设定的秒数后,程 序会停止等待。
11
使用requests库实现
5. 生成完整HTTP请求
简单静态网页爬取
2019/5/7
目录
1 2 3 4
实现HTTP请求 解析网页 数据存储 小结
2
使用urllib3库实现
许多Python的原生系统已经开始使用urllib3库,其提供了很多python标准库里所没有的重要特性。
连接特性 线程安全 客户端SSL∕TLS验证 协助处理重复请求和HTTP重定位 支持HTTP和SOCKS代理
url **kwargs
接收string。表示字符串形式的网址。无默认值 接收dict或其他Python中的类型的数据。依据具体需要及请求的类型可添加的参数,
通常参数赋值为字典类型或为具体数据
9
使用requests库实现
2. 查看状态码与编码
需要注意的是,当requests库猜测错时,需要手动指定encoding编码,避免返回的网页内容解析出现乱 码。
8
使用requests库实现
1. 生成请求
requests库生成请求的代码非常便利,其使用的request方法的语法格式如下。
requests.request.method(url,**kwargs)
request方法常用的参数及其说明如下。
参数 method
说明 接收string。表示请求的类型,如“GET”、“HEAD”、“DELETE”等。无默认值
6
使用urllib3库实现
4.请求重试设置
urllib3库可以通过设置retries参数对重试进行控制。默认进行3次请求重试,并进行3次重定向。自定义重 试次数通过赋值一个整型给retries参数实现,可通过定义retries实例来定制请求重试次数及重定向次数。 若需要同时关闭请求重试及重定向则可以将retries参数赋值为False,仅关闭重定向则将redirect参数赋值 为False。与Timeout设置类似,可以在PoolManager实例中设置retries参数控制全部该实例下的请求重 试策略。
手动指定的方法并不灵活,无法自适应对应爬取过程中不同网页的编码,而使用chardet库比较简便灵活 ,chardet库是一个非常优秀的字符串∕文件编码检测模块。
Βιβλιοθήκη Baidu chardet库使用detect方法检测给定字符串的编码,detect方法常用的参数及其说明如下。
参数
说明
byte_str
接收string。表示需要检测编码的字符串。无默认值
reques方法常用的参数及其说明如下。 参数
说明
method 接收string。表示请求的类型,如“GET”、“HEAD”、“DELETE”等。无默认值
url
接收string。表示字符串形式的网址。无默认值
fields
接收dict。表示请求类型所带的参数。默认为None
headers
接收dict。表示请求头所带参数。默认为None
连接特性 管理连接池 使用分部编码上传文件 支持压缩编码 测试覆盖率达到100%
3
使用urllib3库实现
1. 生成请求
通过request方法即可创建一个请求,该方法返回一个HTTP响应对象。Reques语法格式如下。
urllib3.request(method,url,fields=None,headers=None,**urlopen_kw)
5. 生成完整HTTP请求
使用urllib3库实现生成一个完整的请求,该请求应当包含链接、请求头、超时时间和重试次数设置。
7
使用requests库实现
requests库是一个原生的HTTP库,比urllib3库更为容易使用。requests库发送原生的HTTP 1.1请求,无 需手动为URL添加查询字串,也不需要对POST数据进行表单编码。相对于urllib3库,requests库拥有完 全自动化Keep-alive和HTTP连接池的功能。requests库包含的特性如下。
**urlopen_k 接收dict或其他Python中的类型的数据。依据具体需要及请求的类型可添加的参数,
w
通常参数赋值为字典类型或为具体数据。无默认值
4
使用urllib3库实现
2. 请求头处理
在request方法中,如果需要传入headers参数,可通过定义一个字典类型实现。定义一个包含UserAgent信息的字典,使用浏览器为火狐和chrome浏览器,操作系统为“Windows NT 6.1; Win64; x64” ,向网站“http://www.tipdm.com/tipdm/index.html”发送带headers参数的GET请求,hearders参数 为定义的User-Agent字典。
连接特性 Keep-Alive&连接池
国际化域名和URL 带持久Cookie的会话 浏览器式的SSL认证
自动内容解码
连接特性 基本∕摘要式的身份认证 优雅的key∕value Cookie
自动解压 Unicode响应体 HTTP(S)代理支持
连接特性 文件分块上传
流下载 连接超时 分块请求 支持.netrc
10
使用requests库实现
3. 请求头与响应头处理
requests库中对请求头的处理与urllib3库类似,也使用headers参数在GET请求中上传参数,参数形式为 字典。使用headers属性即可查看服务器返回的响应头,通常响应头返回的结果会与上传的请求参数对应 。
4. Timeout设置
使用urllib3库实现
3. Timeout设置
为防止因为网络不稳定、服务器不稳定等问题造成连接不稳定时的丢包,可以在请求中增加timeout参数 设置,通常为浮点数。依据不同需求,timeout参数提供多种设置方法,可直接在URL后设置该次请求的 全部timeout参数,也可分别设置该次请求的连接与读取timeout参数,在PoolManager实例中设置 timeout参数可应用至该实例的全部请求中。
为避免因等待服务器响应造成程序永久失去响应,通常需要给程序设置一个时间作为限制,超过该时间后 程序将会自动停止等待。在requests库中通过设置timeout这个参数实现,超过该参数设定的秒数后,程 序会停止等待。
11
使用requests库实现
5. 生成完整HTTP请求
简单静态网页爬取
2019/5/7
目录
1 2 3 4
实现HTTP请求 解析网页 数据存储 小结
2
使用urllib3库实现
许多Python的原生系统已经开始使用urllib3库,其提供了很多python标准库里所没有的重要特性。
连接特性 线程安全 客户端SSL∕TLS验证 协助处理重复请求和HTTP重定位 支持HTTP和SOCKS代理
url **kwargs
接收string。表示字符串形式的网址。无默认值 接收dict或其他Python中的类型的数据。依据具体需要及请求的类型可添加的参数,
通常参数赋值为字典类型或为具体数据
9
使用requests库实现
2. 查看状态码与编码
需要注意的是,当requests库猜测错时,需要手动指定encoding编码,避免返回的网页内容解析出现乱 码。
8
使用requests库实现
1. 生成请求
requests库生成请求的代码非常便利,其使用的request方法的语法格式如下。
requests.request.method(url,**kwargs)
request方法常用的参数及其说明如下。
参数 method
说明 接收string。表示请求的类型,如“GET”、“HEAD”、“DELETE”等。无默认值
6
使用urllib3库实现
4.请求重试设置
urllib3库可以通过设置retries参数对重试进行控制。默认进行3次请求重试,并进行3次重定向。自定义重 试次数通过赋值一个整型给retries参数实现,可通过定义retries实例来定制请求重试次数及重定向次数。 若需要同时关闭请求重试及重定向则可以将retries参数赋值为False,仅关闭重定向则将redirect参数赋值 为False。与Timeout设置类似,可以在PoolManager实例中设置retries参数控制全部该实例下的请求重 试策略。
手动指定的方法并不灵活,无法自适应对应爬取过程中不同网页的编码,而使用chardet库比较简便灵活 ,chardet库是一个非常优秀的字符串∕文件编码检测模块。
Βιβλιοθήκη Baidu chardet库使用detect方法检测给定字符串的编码,detect方法常用的参数及其说明如下。
参数
说明
byte_str
接收string。表示需要检测编码的字符串。无默认值
reques方法常用的参数及其说明如下。 参数
说明
method 接收string。表示请求的类型,如“GET”、“HEAD”、“DELETE”等。无默认值
url
接收string。表示字符串形式的网址。无默认值
fields
接收dict。表示请求类型所带的参数。默认为None
headers
接收dict。表示请求头所带参数。默认为None
连接特性 管理连接池 使用分部编码上传文件 支持压缩编码 测试覆盖率达到100%
3
使用urllib3库实现
1. 生成请求
通过request方法即可创建一个请求,该方法返回一个HTTP响应对象。Reques语法格式如下。
urllib3.request(method,url,fields=None,headers=None,**urlopen_kw)
5. 生成完整HTTP请求
使用urllib3库实现生成一个完整的请求,该请求应当包含链接、请求头、超时时间和重试次数设置。
7
使用requests库实现
requests库是一个原生的HTTP库,比urllib3库更为容易使用。requests库发送原生的HTTP 1.1请求,无 需手动为URL添加查询字串,也不需要对POST数据进行表单编码。相对于urllib3库,requests库拥有完 全自动化Keep-alive和HTTP连接池的功能。requests库包含的特性如下。
**urlopen_k 接收dict或其他Python中的类型的数据。依据具体需要及请求的类型可添加的参数,
w
通常参数赋值为字典类型或为具体数据。无默认值
4
使用urllib3库实现
2. 请求头处理
在request方法中,如果需要传入headers参数,可通过定义一个字典类型实现。定义一个包含UserAgent信息的字典,使用浏览器为火狐和chrome浏览器,操作系统为“Windows NT 6.1; Win64; x64” ,向网站“http://www.tipdm.com/tipdm/index.html”发送带headers参数的GET请求,hearders参数 为定义的User-Agent字典。
连接特性 Keep-Alive&连接池
国际化域名和URL 带持久Cookie的会话 浏览器式的SSL认证
自动内容解码
连接特性 基本∕摘要式的身份认证 优雅的key∕value Cookie
自动解压 Unicode响应体 HTTP(S)代理支持
连接特性 文件分块上传
流下载 连接超时 分块请求 支持.netrc
10
使用requests库实现
3. 请求头与响应头处理
requests库中对请求头的处理与urllib3库类似,也使用headers参数在GET请求中上传参数,参数形式为 字典。使用headers属性即可查看服务器返回的响应头,通常响应头返回的结果会与上传的请求参数对应 。
4. Timeout设置