use*_*465 5 python urlparse python-3.x
这个简单的代码使人urlparse发疯,并且无法正确获取主机名,但将其设置为None:
from urllib.parse import urlparse
parsed = urlparse("google.com/foo?bar=8")
print(parsed.hostname)
Run Code Online (Sandbox Code Playgroud)
我想念什么吗?
根据https://www.rfc-editor.org/rfc/rfc1738#section-2.1:
方案名称由字符序列组成。允许使用小写字母“a”--“z”、数字以及字符加号(“+”)、句点(“.”)和连字符(“-”)。为了弹性,解释 URL 的程序应该将方案名称中的大写字母视为等同于小写字母(例如,允许“HTTP”以及“http”)。
使用之前答案中给出的建议,我编写了这个辅助函数,可以用来代替urllib.parse.urlparse():
#!/usr/bin/env python3
import re
import urllib.parse
def urlparse(address):
if not re.search(r'^[A-Za-z0-9+.\-]+://', address):
address = 'tcp://{0}'.format(address)
return urllib.parse.urlparse(address)
url = urlparse('localhost:1234')
print(url.hostname, url.port)
Run Code Online (Sandbox Code Playgroud)
该函数的早期版本称为urllib.parse.urlparse(address),然后在未找到的情况下在前面添加“tcp”方案;但如果您传递类似“user:pass@localhost:1234”之类的内容,则会将用户名解释为方案。
为了使其正常工作,您必须包含协议标识符 (http://)。这对我有用:
parsed = urlparse("https://www.google.com/foo?bar=8")
print(parsed.hostname)
Run Code Online (Sandbox Code Playgroud)
这里的输出是:www.google.com(这似乎是预期的)。可以在此处阅读有关如何使用 urlparse 的更多信息。
希望这可以帮助你!
| 归档时间: |
|
| 查看次数: |
501 次 |
| 最近记录: |