python网络请求四大模块【requests、selenium、urllib、urllib3】

1、requests

该模块为python第三方库,需要使用pip安装
安装

pip install requests

使用

import requests
url = 'http://www.baidu.com'
response = requests.get(url)#使用get方法发起请求
# response = requests.post(url) #使用post发起请求
print(response.status_code) #输出请求状态码
print(response.content.decode('utf-8')) #输出请求结果

requests的get方法以及其他方法中除了一个必不可少的URL参数可以还可以添加其他的相关参数从而提高爬虫请求的效率
1、header
2、cookies
3、proxies 【IP代理】
4、params 【请求携带参数】

import requests
#使用请求头
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 ','Host': 'movie.douban.com','Referer': 'https://movie.douban.com/typerank?',
}
#携带cookies
cookies = {'Cookie':' bid=vcLghJHKdzE; __utmz=30149280.1608554450.1.1.utmcsr=(direct)|utmccn='}
#携带请求参数
params = {'type':'11','interval_id':'100:90','action':'unwatched+playable','start':str(i*20),'limit':'20',}
#设置代理池 ip
proxy = {'http':'101.236.155.89:8899','https':'101.236.155.89:7799'
}
url = 'https://movie.douban.com/j/chart/top_list?'res=requests.get(url,headers=headers,params=params,cookies=cookies,proxies=proxy)
print(response.status_code) #输出请求状态码
print(response.content.decode('utf-8')) #输出请求结果

2、selenium

selenium模块可以用于自动化打开浏览器相当于用户主动操作,不用去刻意添加请求头、cookies等,可以大大增加爬虫的成功率
安装
selenium属于第三方库,需要pip安装

pip install selenium

使用
在使用该模块之前,需要配置和浏览器版本对应的浏览器驱动,谷歌浏览器下载驱动地址如下
https://npm.taobao.org/mirrors/chromedriver/
其他浏览器驱动请百度一下
驱动下载完毕后需要添加到环境变量,也可直接将驱动放到python的安装环境下面,建议放到python安装环境中

代码测试

from selenium import webdriver
import time
url = 'http://localhost:5000/'
# 设置静默模式,谷歌浏览器设置成后台运行,不会自动打开浏览器
#options = webdriver.ChromeOptions()
#options.add_argument('headless')
#driver = webdriver.Chrome(chrome_options=options)
# 自动打开浏览器
driver = webdriver.Chrome()driver.get(url)
time.sleep(2)  # 暂停两秒,等待浏览器缓冲
print(driver.page_source) #输出访问地址的整个页面代码
driver.quit()  # 关闭浏览器

selenium模块自动化脚本测试模块,功能非常强大,相当于人为操作浏览器,这里只是抛砖引玉。需要详细了解的可以直接在CSDN或者百度中搜索进行学习

3、urllib

原文来自:https://www.cnblogs.com/pywjh/p/9689734.html
别人写的太好太明白,自己主要起个 c v 的作用,以免画蛇添足,建议大家可以直接去看原文。

urllib作为Python的标准库,基本上涵盖了基础的网络请求功能。

urllib.request
urllib中,request这个模块主要负责构造和发起网络请求,并在其中加入Headers、Proxy等。

发起GET请求
主要使用urlopen()方法来发起请求:

from urllib import request
​
resp = request.urlopen('http://www.baidu.com')
print(resp.read().decode('utf-8')) #使用对象的read()方法获得bytes数据。然后进行decode转码

发起POST请求
urlopen()默认的访问方式是GET,当在urlopen()方法中传入data参数时,则会发起POST请求。

注意:传递的data数据需要为bytes格式。

设置timeout参数还可以设置超时时间,如果请求时间超出,那么就会抛出异常。

from urllib import request
​#加上data参数发起POST请求并设置超时时间
resp = request.urlopen('http://httpbin.org', data=b'word=hello', timeout=10)
print(resp.read().decode()) #同样需要转码

添加Headers
通过urllib发起的请求会有默认的一个Headers:“User-Agent”:“Python-urllib/3.6”,指明请求是由urllib发送的。

所以遇到一些验证User-Agent的网站时,我们需要自定义Headers,而这需要借助于urllib.request中的Request对象。

from urllib import request
​
url = 'http://httpbin.org/get'
headers = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'}
​
# 需要使用url和headers生成一个Request对象,然后将其传入urlopen方法中
req = request.Request(url, headers=headers)
resp = request.urlopen(req)
print(resp.read().decode())

Request对象
如上所示,urlopen()方法中不止可以传入字符串格式的url,也可以传入一个Request对象来扩展功能,Request对象如下所示。

class urllib.request.Request(url, data=None, headers={},origin_req_host=None,unverifiable=False, method=None)

构造Request对象必须传入url参数,data数据和headers都是可选的。
最后,Request方法可以使用method参数来自由选择请求的方法,如PUT,DELETE等等,默认为GET。

添加Cookie
为了在请求时能带上Cookie信息,我们需要重新构造一个opener。

使用request.build_opener方法来进行构造opener,将我们想要传递的cookie配置到opener中,然后使用这个opener的open方法来发起请求。

from http import cookiejar
from urllib import request
​
url = 'http://httpbin.org/cookies'
# 创建一个cookiejar对象
cookie = cookiejar.CookieJar()
# 使用HTTPCookieProcessor创建cookie处理器
cookies = request.HTTPCookieProcessor(cookie)
# 并以它为参数创建Opener对象
opener = request.build_opener(cookies)
# 使用这个opener来发起请求
resp = opener.open(url)
print(resp.read().decode())

或者也可以把这个生成的opener使用install_opener方法来设置为全局的。

则之后使用urlopen方法发起请求时,都会带上这个cookie。

# 将这个opener设置为全局的opener
request.install_opener(opener)
resp = request.urlopen(url)

设置Proxy代理
使用爬虫来爬取数据的时候,常常需要使用代理来隐藏我们的真实IP。

from urllib import request
​
url = 'http://httpbin.org/ip'
proxy = {'http':'50.233.137.33:80','https':'50.233.137.33:80'}
# 创建代理处理器
proxies = request.ProxyHandler(proxy)
# 创建opener对象
opener = request.build_opener(proxies)
​
resp = opener.open(url)
print(resp.read().decode())

下载数据到本地
在我们进行网络请求时常常需要保存图片或音频等数据到本地,一种方法是使用python的文件操作,将read()获取的数据保存到文件中。

而urllib提供了一个urlretrieve()方法,可以简单的直接将请求获取的数据保存成文件。(对于做前端开发的来说和需要爬虫的人来说是个绝好的东西)
urlretrieve()方法传入两个参数,第一个是url字符串,第二个是文件保存的地址以及文件名

from urllib import request
​
url = 'http://python.org/'
request.urlretrieve(url, 'python.html')

urllib.response
在使用urlopen()方法或者opener的open()方法发起请求后,获得的结果是一个response对象。
这个对象有一些方法和属性,可以让我们对请求返回的结果进行一些处理。
read()
获取响应返回的数据,只能使用一次。

getcode()
获取服务器返回的状态码。

getheaders()
获取返回响应的响应报头。

geturl()
获取访问的url。

res = request.urlopen('https://cd.meituan.com/')
getData = res.getcode()
print(getData) #200
print(res.getheaders()) #客户端请求头
print(res.geturl()) # https://www.meituan.com/error/403
#美团的反爬直接返回了403

urllib.parse
urllib.parse是urllib中用来解析各种数据格式的模块。

urllib.parse.quote
在url中,是只能使用ASCII中包含的字符的,也就是说,ASCII不包含的特殊字符,以及中文等字符都是不可以在url中使用的。而我们有时候又有将中文字符加入到url中的需求,例如百度的搜索地址:

https://www.baidu.com/s?wd=南北

?之后的wd参数,则是我们搜索的关键词。那么我们实现的方法就是将特殊字符进行url编码,转换成可以url可以传输的格式,urllib中可以使用quote()方法来实现这个功能。

from urllib import parsekeyword = '南北'
parse.quote(keyword)
>>>'%E5%8D%97%E5%8C%97'

如果需要将编码后的数据转换回来,可以使用unquote()方法。

>>> parse.unquote('%E5%8D%97%E5%8C%97')
'南北'

urllib.parse.urlencode
在访问url时,我们常常需要传递很多的url参数,而如果用字符串的方法去拼接url的话,会比较麻烦,所以urllib中提供了urlencode这个方法来拼接url参数。

>>> from urllib import parse
>>> params = {'wd': '南北', 'code': '1', 'height': '188'}
>>> parse.urlencode(params)
'wd=%E5%8D%97%E5%8C%97&code=1&height=188'

urllib.error
在urllib中主要设置了两个异常,一个是URLError,一个是HTTPError,HTTPError是URLError的子类。
HTTPError还包含了三个属性:
code:请求的状态码
reason:错误的原因
headers:响应的报头

4、urllib3

Urllib3是一个功能强大,条理清晰,用于HTTP客户端的Python库。许多Python的原生系统已经开始使用urllib3。Urllib3提供了很多python标准库urllib里所没有的重要特性:

1、线程安全
2、连接池
3、客户端SSL/TLS验证
4、文件分部编码上传
5、协助处理重复请求和HTTP重定位
6、支持压缩编码
7、支持HTTP和SOCKS代理
urllib是一个第三方库,需要使用pip安装

pip install urllib3

使用

import urllib3
# urllib3主要使用连接池进行网络请求的访问,所以访问之前我们需要创建一个连接池对象
http = urllib3.PoolManager()
r = http.request('GET','https://cd.meituan.com/')
print(r.status) #得到状态码
print(r.data.decode('utf-8')) #同样需要进行转码,不然就是bytes码

设置headers

headers={'X-Something': 'value'}
resp = http.request('GET', 'http://httpbin.org/headers', headers=headers)

设置url参数
对于GET等没有请求正文的请求方法,可以简单的通过设置fields参数来设置url参数。

fields = {'arg': 'value'}
resp = http.request('GET', 'http://httpbin.org/get', fields=fields)

如果使用的是POST等方法,则会将fields作为请求的请求正文发送。

所以,如果你的POST请求是需要url参数的话,那么需要自己对url进行拼接。

fields = {'arg': 'value'}
resp = http.request('POST', 'http://httpbin.org/get', fields=fields)
>>> import urllib3
>>> proxy = urllib3.ProxyManager('http://50.233.137.33:80', headers={'connection': 'keep-alive'})
>>> resp = proxy.request('get', 'http://httpbin.org/ip')
>>> resp.status
200
>>> resp.data
b'{"origin":"50.233.136.254"}\n'

注:
urllib3中没有直接设置cookies的方法和参数,只能将cookies设置到headers中

python发起网络请求模块【requests、selenium、urllib、urllib3】相关推荐

  1. Python 深入浅出 - 网络请求库 Requests

    Requests 是用 Python 语言编写的,基于 urllib,采用 Apache2 Licensed 开元协议的 HTTP 库,它比 urllib 更加方便,编写爬虫和测试服务器响应数据时经常 ...

  2. Python 爬虫网络请求模块下——requests

    requests 上一节我们了解了 urllib 的基本用法,但是其中确实有不方便的地方,比如处理网页验证,需要写Opener 和 Handler 来处理.为了更加方便的实现这些操作,就有了更为强大的 ...

  3. python爬虫网络请求超时_python总urllib,伪装,超时设置,异常处理的方法

    python爬虫之urllib,伪装,超时设置,异常处理的方法 Urllib 1. Urllib.request.urlopen().read().decode() 返回一个二进制的对象,对这个对象进 ...

  4. Python发送网络请求(requests)

    Python发送网络请求(requests) Python已经是广泛使用的脚本语言了,我们可以使用requests库进行网络请求. 在PyPI中搜索requests,就可以找到这个库 1. 安装 pi ...

  5. Python爬虫网络请求 requests(get、post)

    Python网络请求模块 urllib Urllib 库,它是 Python 内置的 HTTP 请求库,也就是说我们不需要额外安装即可使用,它包含四个模块 第一个模块 request,它是最基本的 H ...

  6. Python爬虫学习笔记-第二课(网络请求模块上)

    网络请求模块上 1. 相关概念介绍 1.1 向网站发起请求的方式: 1.2 url-全球统一资源定位符 1.3 User-Agent 用户代理 1.4 referer 1.5 状态码 1.6 抓包工具 ...

  7. Python爬虫学习笔记-第三课(网络请求模块下)

    网络请求模块下 1. urllib-get案例 1.1 代码需求:爬取贴吧数据 1.2 代码思路 1.3 代码实现 2. urllib-post案例 3. requests模块简介 3.1 get案例 ...

  8. python的网络请求库urllib、urllib2、urllib3、request的联系

    文章目录 1. 简介 2. urllib 3. urllib2 4. urllib3 5. requests 6. 相关文章 1. 简介 urllib.urllib2.urllib3.request均 ...

  9. python 网络请求类库 requests 使用

    python 网络请求类库 requests 使用 requests是 为python封装的强大 REST 操作类库 github https://github.com/kennethreitz/re ...

最新文章

  1. sklearn基于make_scorer函数为Logistic模型构建自定义损失函数并可视化误差图(lambda selection)和系数图(trace plot)+代码实战
  2. 架构之美(china-pub全国独家首发)
  3. 腾讯林衍凯:图神经网络,考虑「拓扑信息」会怎样?
  4. python零基础能学吗 知乎-如何零基础入门 Python?
  5. fifo java_java – 如何保证ThreadPoolExecutor中的FIFO执行顺序
  6. [ES6] 细化ES6之 -- 前端模块化
  7. python knnmatch_opencv python 特征匹配
  8. ArcGIS应用视频教程(视频+PPT+实验数据)
  9. 计算机专业的毕设,计算机专业毕设业计要求.doc
  10. sql字符串转时间-日期区间查询
  11. 各种快递API接口—爱快递
  12. 在JS中根据身份证号计算出生日期和年龄
  13. 排序-JAVA实现【四】堆排序
  14. Android保存的图像在Windows照片查看器打开提示“可能内存不足”
  15. 牛客小白月赛16——D 小阳买水果
  16. 概率统计·假设检验【正态总体均值的假设检验、正态总体方差的假设检验】
  17. elasticsearch安装配置
  18. 女装分类有哪些?(详细女装分类)
  19. 基于Modis数据的地表温度反演
  20. 从概念到底层技术,一文看懂区块链架构设计(附知识图谱)

热门文章

  1. SynaptiCAD.AllProducts.v19.00c windows32 64/linux32 64 SOLARIS(电子设计自动化工具集)
  2. 基本的计算机理论知识试题及答案,计算机的基础知识试题及答案
  3. 分子生物学 第一章 概论
  4. “熊猫视图”.Net图形控件功能介绍 [一]:简介与使用
  5. 服务器 交换机的维护,华为交换机系统维护与调试命令
  6. CentOs下各种压缩格式的创建及解压缩
  7. ghost后分区丢失如何恢复数据-分区表医生!
  8. 洛谷 4830 Tomoya loves Nagisa
  9. 劳动合同法解读二十:试用期工资
  10. 如何利用OBS 开源软件向srs服务器推流 通过VLCplayer 播放视频