优草派 > Python

python3 中使用urllib问题以及urllib详解

王晨         优草派

Python3 中使用 urllib 问题以及 urllib 详解在 Python3 中, urllib 是一个非常重要的网络请求库,可以用来发送 HTTP、HTTPS、FTP、SMTP 等请求。但是,在使用 urllib 的过程中,会遇到一些问题,本文将从多个角度分析 urllib 的使用问题,并详细介绍 urllib 的各种用法。

一、urllib 的使用问题

python3 中使用urllib问题以及urllib详解

1. 编码问题

使用 urllib 发送请求时,需要注意编码问题。如果请求的 URL 包含中文字符或其他非 ASCII 字符,需要将其进行编码,否则会出现乱码的情况。在 Python3 中,可以使用 urllib.parse.quote 函数对 URL 进行编码,例如:

```python

import urllib.parse

url = 'https://www.baidu.com/s?wd=Python教程'

url = urllib.parse.quote(url, safe='/:?=&')

print(url)

```

2. 请求超时问题

在进行网络请求时,可能会遇到请求超时的问题。如果网络请求时间过长,程序可能会卡住,影响用户体验。在 Python3 中,可以使用 urllib.request.urlopen 函数的 timeout 参数设置请求超时时间,例如:

```python

import urllib.request

url = 'https://www.baidu.com'

response = urllib.request.urlopen(url, timeout=3)

html = response.read().decode('utf-8')

print(html)

```

3. 代理设置问题

在进行网络请求时,可能需要使用代理服务器。在 Python3 中,可以使用 urllib.request.ProxyHandler 类和 urllib.request.build_opener 函数设置代理服务器,例如:

```python

import urllib.request

proxy_handler = urllib.request.ProxyHandler({'http': 'http://127.0.0.1:8888', 'https': 'http://127.0.0.1:8888'})

opener = urllib.request.build_opener(proxy_handler)

urllib.request.install_opener(opener)

url = 'https://www.baidu.com'

response = urllib.request.urlopen(url)

html = response.read().decode('utf-8')

print(html)

```

二、urllib 的详细介绍

1. urllib.request 模块

urllib.request 模块提供了最基本的 HTTP 请求功能,包括发送 HTTP 请求、处理 HTTP 响应等。其中,urllib.request.urlopen 函数用于发送 HTTP 请求,并返回一个 HTTPResponse 对象。HTTPResponse 对象包含了 HTTP 响应的各种信息,例如响应状态码、响应头、响应正文等。例如:

```python

import urllib.request

url = 'https://www.baidu.com'

response = urllib.request.urlopen(url)

html = response.read().decode('utf-8')

print(html)

```

2. urllib.parse 模块

urllib.parse 模块提供了 URL 解析和编码相关的函数,包括 urlencode、quote、unquote 等。其中,urlencode 函数用于将字典形式的参数编码成 URL 格式,quote 函数用于将字符串进行 URL 编码,unquote 函数用于将 URL 编码的字符串解码成原始字符串。例如:

```python

import urllib.parse

params = {'wd': 'Python教程'}

url = 'https://www.baidu.com/s?' + urllib.parse.urlencode(params)

url = urllib.parse.quote(url, safe='/:?=&')

print(url)

```

3. urllib.error 模块

urllib.error 模块定义了 HTTPError 和 URLError 异常类,用于处理 HTTP 请求过程中可能发生的异常。其中,HTTPError 异常表示 HTTP 响应状态码为 4xx 或 5xx,URLError 异常表示非 HTTP 错误,例如 DNS 解析错误、网络连接错误等。例如:

```python

import urllib.request

import urllib.error

try:

url = 'https://www.baidu.com/404'

response = urllib.request.urlopen(url)

except urllib.error.HTTPError as e:

print(e.code, e.reason)

except urllib.error.URLError as e:

print(e.reason)

else:

html = response.read().decode('utf-8')

print(html)

```

4. urllib.robotparser 模块

urllib.robotparser 模块用于解析 robots.txt 文件,用于指定 Web 爬虫的访问权限。其中,RobotFileParser 类可以读取和解析 robots.txt 文件,判断一个 URL 是否允许被爬虫访问。例如:

```python

import urllib.robotparser

rp = urllib.robotparser.RobotFileParser()

rp.set_url('https://www.baidu.com/robots.txt')

rp.read()

print(rp.can_fetch('*', 'https://www.baidu.com/'))

```

5. urllib.response 模块

urllib.response 模块定义了 HTTPResponse 类,用于表示 HTTP 响应。HTTPResponse 对象包含了 HTTP 响应的各种信息,例如响应状态码、响应头、响应正文等。例如:

```python

import urllib.request

import urllib.response

url = 'https://www.baidu.com'

response = urllib.request.urlopen(url)

print(response.status, response.reason)

print(response.getheader('Content-Type'))

print(response.read().decode('utf-8'))

```

6. urllib.parse.urlsplit 和 urllib.parse.urlunsplit 函数

urllib.parse.urlsplit 函数用于解析 URL,将其分解为 5 个部分:协议、域名、端口、路径和查询参数。urllib.parse.urlunsplit 函数用于将 5 个部分合并成一个 URL。例如:

```python

import urllib.parse

url = 'https://www.baidu.com/s?wd=Python教程'

scheme, netloc, path, query, fragment = urllib.parse.urlsplit(url)

print(scheme, netloc, path, query, fragment)

url = urllib.parse.urlunsplit((scheme, netloc, path, query, fragment))

print(url)

```

7. urllib.parse.urljoin 函数

urllib.parse.urljoin 函数用于将相对 URL 转换成绝对 URL。例如:

```python

import urllib.parse

base_url = 'https://www.baidu.com'

relative_url = '/s?wd=Python教程'

url = urllib.parse.urljoin(base_url, relative_url)

print(url)

```

三、

  • 微信好友

  • 朋友圈

  • 新浪微博

  • QQ空间

  • 复制链接

取消
5天短视频训练营
新手入门剪辑课程,零基础也能学
分享变现渠道,助你兼职赚钱
限时特惠:0元
立即抢
新手剪辑课程 (精心挑选,简单易学)
第一课
新手如何学剪辑视频? 开始学习
第二课
短视频剪辑培训班速成是真的吗? 开始学习
第三课
不需要付费的视频剪辑软件有哪些? 开始学习
第四课
手机剪辑app哪个好? 开始学习
第五课
如何做短视频剪辑赚钱? 开始学习
第六课
视频剪辑接单网站APP有哪些? 开始学习
第七课
哪里可以学短视频运营? 开始学习
第八课
做短视频运营需要会什么? 开始学习
【原创声明】凡注明“来源:优草派”的文章,系本站原创,任何单位或个人未经本站书面授权不得转载、链接、转贴或以其他方式复制发表。否则,本站将依法追究其法律责任。

客服热线:0731-85127885

湘ICP备19005950号-1  

工商营业执照信息

违法和不良信息举报

举报电话:0731-85127885 举报邮箱:tousu@csai.cn

优草派  版权所有 © 2024