Python urlparser给出了错误的结果

Python urlparser给出了错误的结果,python,parsing,url,urlparse,Python,Parsing,Url,Urlparse,我正试图用python来分离url的不同部分 s urlparse,但我似乎在结果中得到了错误的值 baseline = runSql(conn,"Select url from malware_traffic where tag = 'baseline';") for i in baseline: print i[0] print urlparse.urlparse(i[0]) runSql函数只返回URL列表。我循环遍历它们,并尝试将URL从基线变量转换为URL,但pyt

我正试图用python来分离url的不同部分 s urlparse,但我似乎在结果中得到了错误的值

baseline = runSql(conn,"Select url from malware_traffic where tag = 'baseline';")

for i in baseline:
    print i[0]
    print urlparse.urlparse(i[0])
runSql函数只返回URL列表。我循环遍历它们,并尝试将URL从基线变量转换为URL,但python解析URL的方式似乎不正确

172.217.9.174:443/c2dm/register3
ParseResult(scheme='172.217.9.174', netloc='', path='443/c2dm/register3', params='', query='', fragment='')
connectivitycheck.gstatic.com:80/generate_204
ParseResult(scheme='connectivitycheck.gstatic.com', netloc='', path='80/generate_204', params='', query='', fragment='')
www.google.com:80/gen_204
ParseResult(scheme='www.google.com', netloc='', path='80/gen_204', params='', query='', fragment='')
172.217.9.174:443/auth/devicekey
ParseResult(scheme='172.217.9.174', netloc='', path='443/auth/devicekey', params='', query='', fragment='')
在结果中,您可以清楚地看到,它混淆了scheme和netloc,并将端口包含在path中

例如,第一个结果应该是这样的

ParseResult(scheme='', netloc='172.217.9.174:443', path='/c2dm/register3', params='', query='', fragment='')
不知道为什么会搞砸

我实际上使用的是与文档中的一个示例相同的东西


那么,我做错了什么,或者这是一个bug呢?

问题是您的URL没有一个方案(http://部分),所以python认为
172.217.9.174:
就是这个方案。前缀为http://一切正常:

>>> urlparse('172.217.9.174:443/c2dm/register3')
ParseResult(scheme='172.217.9.174', netloc='', path='443/c2dm/register3', params='', query='', fragment='')
>>> urlparse('http://172.217.9.174:443/c2dm/register3')
ParseResult(scheme='http', netloc='172.217.9.174:443', path='/c2dm/register3', params='', query='', fragment='')

你的URL没有一个是以
http://
开头的,甚至是
//
,文档中特别提到了这一点。好吧,我知道它为什么这样做,我只是认为它会足够聪明来识别这一点。这里的文档建议,如果这是唯一的建议,则不需要它,我的解决方法是在url解析中添加
“//”+i[0]
,但我真的不喜欢这样。
mailto:
url中没有斜杠,因此很难让解析器正确识别此类情况。