做外贸找工厂货源网站,黄山自驾游攻略,潜江资讯网最新招聘,做seo是要先有网站吗自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501
在上一节中多次提到了URL地址与下载网页#xff0c;这两项是网络爬虫必备而又关键的功能#xff0c;说到这两个功能必然会提到HTTP。本节将介绍在P…自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501
在上一节中多次提到了URL地址与下载网页这两项是网络爬虫必备而又关键的功能说到这两个功能必然会提到HTTP。本节将介绍在Python中实现HTTP网络请求常见的三种方式urllib、urllib3以及requests。
1 urllib模块
urllib是python自带模块该模块中提供了一个urlopen()方法通过该方法指定URL发送网络请求来获取数据。urllib提供了多个子模块具体的模块名称与含义如表1所示。
表1 urllib中的子模块 模 块 名 称 描 述 urllib.request 该模块定义了打开URL主要是HTTP的方法和类例如身份验证、重定向、cookie等等 urllib.error 该模块中主要包含异常类基本的异常类是URLError urllib.parse 该模块定义的功能分为两大类URL解析和URL引用 urllib.robotparser 该模块用于解析robots.txt文件 通过urllib.request模块实现发送请求并读取网页内容的简单示例如下
import urllib.request # 导入模块 # 打开指定需要爬取的网页
response urllib.request.urlopen(http://www.baidu.com)
html response.read() # 读取网页代码
print(html) # 打印读取内容
上面的示例中是通过get请求方式获取百度的网页内容。下面通过使用urllib.request模块的post请求实现获取网页信息的内容示例如下
import urllib.parse
import urllib.request # 将数据使用urlencode编码处理后再使用encoding设置为utf-8编码
data bytes(urllib.parse.urlencode({word: hello}), encodingutf8)
# 打开指定需要爬取的网页
response urllib.request.urlopen(http://httpbin.org/post, datadata)
html response.read() # 读取网页代码
print(html) # 打印读取内容 说明这里通过http://httpbin.org/post网站进行演示该网站可以作为练习使用urllib的一个站点使用可以模拟各种请求操作。 注意由于本章使用Scrapy爬虫框架和Crawley爬虫框架代码部分与IDLE中的颜色有不一致的情况这是考虑了与环境一致的原则。
2 Urllib3模块
Urllib3是一个功能强大条理清晰用于HTTP客户端的Python库许多Python的原生系统已经开始使用Urllib3。Urllib3提供了很多Python标准库里所没有的重要特性
Urllib3是一个功能强大条理清晰的 HTTP客户端适用于Python。Urllib3提供了很多Python标准库里所没有的重要特性
l 线程安全。
l 连接池。
l 客户端SSL / TLS验证。
l 使用大部分编码上传文件。
l Helpers用于重试请求并处理HTTP重定向。
l 支持gzip和deflate编码。
l 支持HTTP和SOCKS代理。
l 100的测试覆盖率。
通过Urllib3模块实现发送网络请求的示例代码如下
import urllib3 # 创建PoolManager对象用于处理与线程池的连接以及线程安全的所有细节
http urllib3.PoolManager()
# 对需要爬取的网页发送请求
response http.request(GET,https://www.baidu.com/)
print(response.data) # 打印读取内容
post请求实现获取网页信息的内容关键代码如下
# 对需要爬取的网页发送请求
response http.request(POST,http://httpbin.org/post,fields{word: hello}) 注意在使用Urllib3模块前需要在Python中通过pip install urllib3代码进行模块的安装。
3 requests模块
requests是Python中实现HTTP请求的一种方式requests是第三方模块该模块在实现HTTP请求时要比urllib模块简化很多操作更加人性化。在使用requests模块时需要通过执行pip install requests代码进行该模块的安装。requests模块的功能特性如下 以GET请求方式为例打印多种请求信息的示例代码如下
import requests # 导入模块 response requests.get(http://www.baidu.com)
print(response.status_code) # 打印状态码
print(response.url) # 打印请求url
print(response.headers) # 打印头部信息
print(response.cookies) # 打印cookie信息
print(response.text) # 以文本形式打印网页源码
print(response.content) # 以字节流形式打印网页源码
以POST请求方式发送HTTP网络请求的示例代码如下
import requests data {word: hello} # 表单参数
# 对需要爬取的网页发送请求
response requests.post(http://httpbin.org/post, datadata)
print(response.content) # 以字节流形式打印网页源码
requests模块不仅提供了以上两种常用的请求方式还提供以下多种网络请求的方式。代码如下
requests.put(http://httpbin.org/put,data {key:value}) # PUT请求
requests.delete(http://httpbin.org/delete) # DELETE请求
requests.head(http://httpbin.org/get) # HEAD请求
requests.options(http://httpbin.org/get) # OPTIONS请求
如果发现请求的URL地址中参数是跟在“”的后面例如“httpbin.org/get?keyval”。requests模块提供了传递参数的方法允许使用params 关键字参数以一个字符串字典来提供这些参数。例如传递“key1value1”和“key2value2”到“httpbin.org/get”可以使用如下代码
import requests payload {key1: value1, key2: value2} # 传递的参数
# 对需要爬取的网页发送请求
response requests.get(http://httpbin.org/get, paramspayload)
print(response.content) # 以字节流形式打印网页源码