Python urlparser给出了错误的结果

时间:2017-08-31 23:01:39

标签: 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,但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='')

在结果中你可以清楚地看到它正在混合方案和netloc以及包含路径中的端口。

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

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

不确定为什么会搞砸。

我实际上使用与此处https://docs.python.org/2/library/urlparse.html文档中的一个示例相同的内容。

那么我做错了什么或是一个错误?

1 个答案:

答案 0 :(得分:2)

问题是你的网址没有方案(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='')