python3 urllib模块的运用
2021/4/14 14:55:46
本文主要是介绍python3 urllib模块的运用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.python3 urllib模块的运用
urllib模块
urllib 库 是 [Python]内置的 HTTP 请求库。urllib 模块提供的上层接口,使访问 www 和 ftp 上的数据就像访问本地文件一样。主要有以下四种:urllib.request 请求模块,urllib.error 异常处理模块,urllib.parse url 解析模块,urllib.robotparser robots.txt 解析模块
一.urllib.request模块
urllib.request 模块提供了最基本的构造 HTTP (或其他协议如 FTP)请求的方法,利用它可以模拟[浏览器]的一个请求发起过程。利用不同的协议去获取 URL 信息。它的某些接口能够处理基础认证 ( Basic Authenticaton) 、redirections (HTTP 重定向)、 Cookies (浏览器 Cookies)等情况。而这些接口是由 handlers 和 openers 对象提供的。
官方对于urllib.request的解释:帮助在复杂的世界中打开url(主要支持http,FTP,本地文件和数据的url)的函数和类–基本和摘要身份验证,重定向,cookie等。
urllib.request模块默认定义了以下几个函数:
1.urllib.request.urlopen(url, data=None,[timeout, ]*,cafile=None, capath=None, cadefault=False,context=None)
参数说明:url:需要打开的网址 data: Post 提交的数据, 默认为 None ,当 data 不为 None 时, urlopen() 提交方式为 Post timeout:设置网站访问超时时间
这个函数主要用来打开一个url,url可以是一个字符串,也可以是一个请求对象
这个函数总是返回以下方法:
getURL()–返回检索的资源的URL,通常用于确定是否遵循重定向;
info()–返回一个httplib.HTTPMessage对象,表示远程服务器返回的头信息;可以通过Quick Reference to Http Headers查看 Http Header 列表。
getcode()–返回响应的HTTP状态代码;
read()–返回页面元素。
import urllib.request page=urllib.request.urlopen("http://www.zhihu.com/") print(page.info()) print(page.getURL()) print(page.getcode()) print(page.read())
2.urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
使用request()来包装请求,再通过urlopen()获取页面。单纯使用 urlopen 并不能足以构建一个完整的请求,例如 对拉勾网的请求如果不加上 headers 等信息,就无法正常解析访问网页内容。
使用实例:
import urllib.request url = "https://www.lagou.com/zhaopin/Python/?labelWords=label" headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36', 'Referer': 'https://www.lagou.com/zhaopin/Python/?labelWords=label', 'Connection': 'keep-alive' } req = request.Request(url, headers=headers) page = request.urlopen(req).read() page = page.decode('utf-8') print(page)
headers的参数设置:
User-Agent :这个头部可以携带如下几条信息:浏览器名和版本号、操作系统名和版本号、默认语言。这个数据可以从 网页开发工具上的请求反应信息中获取(浏览器上一般按 F12 打开开发工具)。作用是用于伪装浏览器。
Referer:可以用来防止盗链,有一些网站图片显示来源 https://***.com ,就是检查 Referer 来鉴定的。
Connection:表示连接状态,记录 Session 的状态。
origin_req_host:请求方的 host 名称或者 IP 地址。
unverifiable:指请求无法验证,默认为 False。用户并没有足够的权限来选择接收这个请求结果,例如请求一个 HTML 文档中的图片,但没有自动抓取图像的权限,这时 unverifiable 为 True。
method:指定请求使用的方法,例如 GET、POST、PUT 等。
Openers 和 Handlers
当需要获取一个 URL 时需要使用一个 opener (这是一个不容易理解的对象—-urllib.request.OpenerDirector的实例)。一般情况下通过 urlopen 使用默认的 opener ,但允许自己创建不同的 opener 。Opener 会使用 handlers 。handler 承担”重活”并知道如何以某个特定的协议(如http,ftp等)打开 URL、知道如何处理 URL的某些行为(比如 Http 重定向或是 Cookie等)。
引入 Opener(即 OpenerDirector 类)的目的是为了能够实现更高级的功能,一般情况下使用的 Request 、 urlopen() 相当于类库封装好了的极其常用的请求方法,利用这两个就可以完成基本的请求。但当需要实现更高级的功能时就需要更高级的实例来完成操作。所以,这里就用到了比调用 urlopen() 的对象的更普遍的对象—-Opener 。
Opener 通过 Handler 构建,可以使用 open() 方法,返回的类型和 urlopen() 相同。
OpenerDirector操作类是一个管理很多处理类(Handler)的类。这些 Handler 类都对应处理相应的协议,或者特殊功能。
主要有以下处理类:
BaseHandler、HTTPErrorProcessor、HTTPDefaultErrorHandler、HTTPRedirectHandler、ProxyHandler、AbstractBasicAuthHandler、HTTPBasicAuthHandler、ProxyBasicAuthHandler、AbstractDigestAuthHandler、
ProxyDigestAuthHandler、AbstractHTTPHandler、HTTPHandler、HTTPCookieProcessor、UnknownHandler、
FileHandler、FTPHandler、CacheFTPHandler
其中,urllib.request.BaseHandler 是所有其他 Handler 的基类,其提供了最基本的Handler方法。例如:default_open()、protocol_request() 等。
常见的 BaseHandler 子类有:
* HTTPDefaultErrorHandler :用于处理HTTP响应错误,错误都会抛出 HTTPError 类型的异常。
* HTTPRedirectHandler :用于处理重定向。
* HTTPCookieProcessor: 用于处理 Cookie 。
* ProxyHandler :用于设置代理,默认代理为空
* HTTPPasswordMgr : 用于管理密码,它维护了用户名密码的表。
* HTTPBasicAuthHandler : 用于管理认证,如果一个链接打开时需要认证,那么可以用它来解决认证问题。
3.urllib.request. install_opener ( opener )和urllib.request.build_opener([handler, …])
这两个函数主要用于设置代理,在做爬虫的时候多少都会用到代理IP的,防止被服务器ban掉,步骤多为:
(1)、准备代理IP或者请求头;
(2)、利用urllib.request.build_opener()封装代理IP或请求头;
(3)、利用urllib.request.instanll_opener()安装成全局;
(4)、用urlopen()访问网页.
4.urllib.request.getproxies()
这个帮助函数讲一个scheme的字典返回给代理服务器URL映射。
5.urllib.request.urlretrieve(url, filename=None, reporthook=None, data=None)
这个是从python2中移植的函数,有可能会过时,这个函数在做爬虫时,尤其是爬网页时用的是很多的,作用是讲一个URL访问的网络对象复制到本地,第二个参数用于制定本地文件位置
def getImage(html): reg=r'src="(.+?\.jpg)"'# 正则表达式 imgre=re.compile(reg)# 将正则表达式编译成一个正则表达式对象 html = html.decode('utf-8')# python3中使用 # imglist=reg.findall(imgre,html) imglist=re.findall(imgre,html) x=0 for imgurl in imglist: urllib.request.urlretrieve(imgurl,'H:\picture\%s.jpg' %x) x += 1
6.urllib.request.urlcleanup()
这个函数用于清理之前调用urlretrieve()函数留下的临时文件。
7.使用代理伪造ip
import urllib.request url = 'http://www.baidu.com' headers={ 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36' } proxy_support = urllib.request.ProxyHandler({ 'http':'172.12.24.45:8080', }) opener = urllib.request.build_opener(proxy_support) urllib.request.install_opener(opener) request=urllib.request.Request(url=url,headers=headers) response=urllib.request.urlopen(request) print(response.read().decode('utf-8'))
2.Requests模块
虽然urllib模块提供了大部分功能,但确实太麻烦了,一个很简单的功能就需要一大堆代码,requests就会简单很多
import requests r= requests.get('https://www.baidu.com/s') print(r.status_code) print(r.headers['content-type']) print(r.encoding) print(r.text)
上面那段代码就是最简单的用法
requests库的七个主要方法:
方法 | 解释 |
---|---|
requests.request() | 构造一个请求,支持以下各种方法 |
requests.get() | 获取html的主要方法 |
requests.head() | 获取html头部信息的主要方法 |
requests.post() | 向html网页提交post请求的方法 |
requests.put() | 向html网页提交put请求的方法 |
requests.patch() | 向html提交局部修改的请求 |
requests.delete() | 向html提交删除请求 |
后续的内容请见下篇文章
这篇关于python3 urllib模块的运用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程