python发起网络请求模块【requests、selenium、urllib、urllib3】
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】相关推荐
- Python 深入浅出 - 网络请求库 Requests
Requests 是用 Python 语言编写的,基于 urllib,采用 Apache2 Licensed 开元协议的 HTTP 库,它比 urllib 更加方便,编写爬虫和测试服务器响应数据时经常 ...
- Python 爬虫网络请求模块下——requests
requests 上一节我们了解了 urllib 的基本用法,但是其中确实有不方便的地方,比如处理网页验证,需要写Opener 和 Handler 来处理.为了更加方便的实现这些操作,就有了更为强大的 ...
- python爬虫网络请求超时_python总urllib,伪装,超时设置,异常处理的方法
python爬虫之urllib,伪装,超时设置,异常处理的方法 Urllib 1. Urllib.request.urlopen().read().decode() 返回一个二进制的对象,对这个对象进 ...
- Python发送网络请求(requests)
Python发送网络请求(requests) Python已经是广泛使用的脚本语言了,我们可以使用requests库进行网络请求. 在PyPI中搜索requests,就可以找到这个库 1. 安装 pi ...
- Python爬虫网络请求 requests(get、post)
Python网络请求模块 urllib Urllib 库,它是 Python 内置的 HTTP 请求库,也就是说我们不需要额外安装即可使用,它包含四个模块 第一个模块 request,它是最基本的 H ...
- Python爬虫学习笔记-第二课(网络请求模块上)
网络请求模块上 1. 相关概念介绍 1.1 向网站发起请求的方式: 1.2 url-全球统一资源定位符 1.3 User-Agent 用户代理 1.4 referer 1.5 状态码 1.6 抓包工具 ...
- Python爬虫学习笔记-第三课(网络请求模块下)
网络请求模块下 1. urllib-get案例 1.1 代码需求:爬取贴吧数据 1.2 代码思路 1.3 代码实现 2. urllib-post案例 3. requests模块简介 3.1 get案例 ...
- python的网络请求库urllib、urllib2、urllib3、request的联系
文章目录 1. 简介 2. urllib 3. urllib2 4. urllib3 5. requests 6. 相关文章 1. 简介 urllib.urllib2.urllib3.request均 ...
- python 网络请求类库 requests 使用
python 网络请求类库 requests 使用 requests是 为python封装的强大 REST 操作类库 github https://github.com/kennethreitz/re ...
最新文章
- sklearn基于make_scorer函数为Logistic模型构建自定义损失函数并可视化误差图(lambda selection)和系数图(trace plot)+代码实战
- 架构之美(china-pub全国独家首发)
- 腾讯林衍凯:图神经网络,考虑「拓扑信息」会怎样?
- python零基础能学吗 知乎-如何零基础入门 Python?
- fifo java_java – 如何保证ThreadPoolExecutor中的FIFO执行顺序
- [ES6] 细化ES6之 -- 前端模块化
- python knnmatch_opencv python 特征匹配
- ArcGIS应用视频教程(视频+PPT+实验数据)
- 计算机专业的毕设,计算机专业毕设业计要求.doc
- sql字符串转时间-日期区间查询
- 各种快递API接口—爱快递
- 在JS中根据身份证号计算出生日期和年龄
- 排序-JAVA实现【四】堆排序
- Android保存的图像在Windows照片查看器打开提示“可能内存不足”
- 牛客小白月赛16——D 小阳买水果
- 概率统计·假设检验【正态总体均值的假设检验、正态总体方差的假设检验】
- elasticsearch安装配置
- 女装分类有哪些?(详细女装分类)
- 基于Modis数据的地表温度反演
- 从概念到底层技术,一文看懂区块链架构设计(附知识图谱)
热门文章
- SynaptiCAD.AllProducts.v19.00c windows32 64/linux32 64 SOLARIS(电子设计自动化工具集)
- 基本的计算机理论知识试题及答案,计算机的基础知识试题及答案
- 分子生物学 第一章 概论
- “熊猫视图”.Net图形控件功能介绍 [一]:简介与使用
- 服务器 交换机的维护,华为交换机系统维护与调试命令
- CentOs下各种压缩格式的创建及解压缩
- ghost后分区丢失如何恢复数据-分区表医生!
- 洛谷 4830 Tomoya loves Nagisa
- 劳动合同法解读二十:试用期工资
- 如何利用OBS 开源软件向srs服务器推流 通过VLCplayer 播放视频