【问题标题】:Python urlparser Gives wrong resultPython urlparse 给出错误的结果
【发布时间】:2018-02-09 23:41:00
【问题描述】:

我正在尝试用 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 以及在路径中包含端口。

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

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

不知道为什么会搞砸。

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

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

【问题讨论】:

  • 您的所有网址都没有以http:// 甚至// 开头,文档特别提到了这一点。

标签: python parsing url urlparse


【解决方案1】:

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

【讨论】:

  • 对,我知道它为什么这样做,我只是认为它足够聪明,可以识别这一点。这里的文档建议不需要docs.python.org/2/library/urlparse.html
  • 如果这是唯一的建议,我的解决方法是在 url 解析中添加 "//" + i[0],但我真的不喜欢这样。
  • mailto: url 中没有斜杠,因此很难让解析器正确识别此类情况。
猜你喜欢
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
  • 2021-04-18
  • 2014-09-16
  • 1970-01-01
  • 2011-11-15
  • 2019-02-06
  • 2014-01-30
相关资源
最近更新 更多