首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >urlparse使用简单的url失败

urlparse使用简单的url失败
EN

Stack Overflow用户
提问于 2018-05-24 08:32:51
回答 4查看 2.3K关注 0票数 6

这段简单的代码让urlparse抓狂,它没有正确获取主机名,但将其设置为None

代码语言:javascript
复制
from urllib.parse import urlparse
parsed = urlparse("google.com/foo?bar=8")
print(parsed.hostname)

我是不是遗漏了什么?

EN

回答 4

Stack Overflow用户

发布于 2018-05-24 08:47:52

只是为了给Muadh的回答添加一些进一步的上下文。使用urlparse查看这两个变体的输出:

代码语言:javascript
复制
>>> parsed = urlparse("google.com/foo?bar=8")
>>> parsed
ParseResult(scheme='', 
            netloc='', 
            path='google.com/foo', 
            params='', 
            query='bar=8', 
            fragment='')

,并且指定了完整路径

代码语言:javascript
复制
>>> parsed = urlparse("http://google.com/foo?bar=8")
>>> parsed
ParseResult(scheme='http', 
            netloc='google.com', 
            path='/foo', 
            params='', 
            query='bar=8', 
            fragment='')
票数 2
EN

Stack Overflow用户

发布于 2018-05-24 08:50:58

google.com/foo?bar=8是一个相对网址,也就是一个带有“查询”的“路径”。也许您认为google.com是一个主机名,但它不是必须的( python怎么知道呢?)

URL由协议或方案('https:‘、'ftp:’等)、主机('//example.com')、路径、查询、片段组成。

因此urlparse做出了最佳猜测,对协议和主机返回None。

票数 2
EN

Stack Overflow用户

发布于 2019-10-19 05:36:49

根据https://www.rfc-editor.org/rfc/rfc1738#section-2.1的说法

方案名称由一系列字符组成。允许使用小写字母"a"--"z“、数字以及加号("+")、句点(".")和连字符("-")。为了弹性,解释URL的程序应该将方案名称中的大写字母视为等同于小写(例如,允许"HTTP“和"http")。

根据前面答案中给出的建议,我编写了这个帮助器函数,它可以用来代替urllib.parse.urlparse()

代码语言:javascript
复制
#!/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)

此函数的前一个版本称为urllib.parse.urlparse(address),如果没有找到,则将"tcp“方案放在前面;但如果您传递类似"user: pass @localhost:1234”的内容,则此函数会将用户名解释为方案。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50499273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档