【问题标题】:Python: Get data from URL query stringPython:从 URL 查询字符串中获取数据
【发布时间】:2016-01-26 16:49:17
【问题描述】:

所以我有一个字符串,其中有一个 URL。 URL/字符串是这样的:
https://example.com/main/?code=32ll48hma6ldfm01bpki&data=57600&data2=aardappels
我想得到code,但我不知道怎么做。我查看了.split() 方法。但我不认为它是有效的。我真的找不到让它工作的方法。

【问题讨论】:

  • 你有没有试过为它写程序?
  • 所以要获取code查询参数的值?
  • 研究使用已经包含的模块,如urlparse。但是,您也可以使用 split() 来做这个简单的事情 - 我不知道您为什么在首先找到解决方案之前担心效率。
  • 那么你的问题是什么?如果您的问题是:“这是我的代码,它不起作用,我做错了什么”我们可以提供帮助。如果您的问题是:“我想做 xyz,请为我写”,那么这是错误的地方。

标签: python string python-2.7 url


【解决方案1】:

使用来自urlparse 模块的urlparse 和parse_qs:

from urlparse import urlparse, parse_qs
# For Python 3:
# from urllib.parse import urlparse, parse_qs

url = ' https://example.com/main'
url += '/?code=32ll48hma6ldfm01bpki&data=57600&data2=aardappels'

parsed = urlparse(url)
code  = parse_qs(parsed.query).get('code')[0]

它完全符合您的要求。

【讨论】:

    【解决方案2】:

    正如@IronFist 提到的,.split() 方法仅在您假设代码参数中没有“&”时才有效。如果没有,您可以使用 .split() 方法几次并获得所需的代码参数:

    url = "https://example.com/main/?code=32ll48hma6ldfm01bpki&data=57600&data2=aardappels"
    code = url.split('/?')[1].split('&')[0]
    

    【讨论】:

    • 不是downvoter,但原因很明显,OP希望code查询参数不是全部...您的答案只是拆分/?,它将返回包括所有查询参数的第二个字符串
    • 嗯...这可能也可以,但是考虑查询参数的值包含自身&?..你会怎么做呢?...为此,有针对此类任务的特定模块,例如urlparse
    • 正确,但您可能会假设数据始终遵循代码参数并使用 ('&data') 进行拆分。
    【解决方案3】:

    有很多方法可以做到这一点!!!更简单的方法是使用urlparse。另一种方法是使用正则表达式,但专家建议在 URL 上使用正则表达式可能很乏味,并且代码变得非常难以维护。

    另一种简单的方法如下所示,

    str1 = 'https://example.com/main/?code=32ll48hma6ldfm01bpki&data=57600&data2=aardappels'
    codeStart = str1.find('code=')
    codeEnd = str1.find('&data=')
    print str1[codeStart+5:codeEnd]
    

    【讨论】:

      【解决方案4】:

      使用正则表达式:

      >>> import re
      >>> url = 'https://example.com/main/?code=32ll48hma6ldfm01bpki&data=57600&data2=aardappels'
      >>> code = re.search("code=([0-9a-zA-Z]+)&?", url).group(1)
      >>> print code
      32ll48hma6ldfm01bpki
      

      【讨论】:

      • 无法保证 'data' 将是查询字符串中的 'code' 之后的下一个字段。可能最好只读到'&'。除非“代码”是查询字符串中的最后一个字段,否则读到“$”。或者只使用 urlparse。
      • 你说得对,我已经将其更改为匹配第一个“&”或 url 末尾之前的所有数字和字母。谢谢@PaulMcGuire
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-20
      • 2020-06-12
      • 1970-01-01
      • 2011-08-30
      • 2012-04-24
      • 2012-12-24
      • 1970-01-01
      相关资源
      最近更新 更多