【问题标题】:Python: How to extract url and decode it?Python:如何提取 url 并对其进行解码?
【发布时间】:2017-06-01 01:01:50
【问题描述】:

我从 API 收到如下响应-

def update_csv(products):
print type(products)
print products
[{u'image_url': u'https://external.xx.fbcdn.net/safe_image.php?d=AQBHdbRqB7F6aMKM&url=http%3A%2F%2Fgigya.jp%2Fdpa%2F1.png&cfs=1&_nc_hash=AQDx7P52g0NYBB-3', u'id': u'1411912028843607', u'retailer_id': u'product-1'}, {u'image_url': u'https://external.xx.fbcdn.net/safe_image.php?d=AQDyc-Yyic5QLOqH&url=http%3A%2F%2Fgigya.jp%2Fdpa%2F0.png&cfs=1&_nc_hash=AQDhmhPJxFZEpMFX', u'id': u'993388404100117', u'retailer_id': u'product-0'}, {u'image_url': u'https://external.xx.fbcdn.net/safe_image.php?d=AQB69V2cgASUIci1&url=http%3A%2F%2Fgigya.jp%2Fdpa%2F100.png&cfs=1&_nc_hash=AQAk3eZ4vqWYbOW4', u'id': u'1347112758661660', u'retailer_id': u'product-100'}, {u'image_url': u'https://external.xx.fbcdn.net/safe_image.php?d=AQBM75VZTNuxqaoq&url=http%3A%2F%2Fgigya.jp%2Fdpa%2F10.png&cfs=1&_nc_hash=AQAUdkc6II5eu47D', u'id': u'1358784964179738', u'retailer_id': u'product-10'}]

我想从中提取所有包含.png 的网址并解码该网址

你可以在上面的网址中包含http%3A%2F%2Fgigya.jp%2Fdpa%2F1.png 我想提取所有这些 url 并解码并保存为列表。

我尝试了什么

image_urls = ""
for product in products:
        image_urls += urllib.unquote(product['image_url'].split("=")[2])+"\n"

问题在于它不会从 url 中删除“&cfs”

http://gigya.jp/dpa/1.png&cfs
http://gigya.jp/dpa/0.png&cfs
http://gigya.jp/dpa/100.png&cfs
http://gigya.jp/dpa/10.png&cfs

对不起,我是 python 新手。有没有有效的方法来做到这一点? 请帮忙。

【问题讨论】:

  • 您似乎希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的程序员编写代码,但他们通常只会在发布者已经尝试自己解决问题时提供帮助。展示这项工作的一个好方法是包含您迄今为止编写的代码、示例输入(如果有的话)、预期输出和您实际获得的输出(输出、回溯等)。您提供的详细信息越多,您可能收到的答案就越多。检查FAQHow to Ask
  • @TigerhawkT3 我添加了我厌倦的东西。请不要投反对票。请再次检查。
  • 你可以在&再次拆分。

标签: python http url decode


【解决方案1】:

使用urlparse,这样会更简单:

>>> import urlparse
>>> for i in products:
...    print(urlparse.parse_qs(urlparse.urlparse(i['image_url']).query)['url'][0])
...
http://gigya.jp/dpa/1.png
http://gigya.jp/dpa/0.png
http://gigya.jp/dpa/100.png
http://gigya.jp/dpa/10.png

对于 Python 3,使用 urllib.parse:

>>> from urllib.parse import urlparse, parse_qs
>>> for i in products:
...    print(parse_qs(urlparse(i['image_url']).query)['url'][0])
...
http://gigya.jp/dpa/1.png
http://gigya.jp/dpa/0.png
http://gigya.jp/dpa/100.png
http://gigya.jp/dpa/10.png

【讨论】:

  • 这个键'url'是什么?
  • 这是parse_qs 返回的一部分。请参阅docs 了解更多信息。
  • 如果我解码 'image url' 我发现它如下external.xx.fbcdn.net/…
  • 我可以使用像 &url.*(.png) 这样的正则表达式
  • 当有一个完全有效的标准库方法可以工作时,为什么要使用正则表达式?
猜你喜欢
  • 1970-01-01
  • 2012-04-06
  • 1970-01-01
  • 1970-01-01
  • 2019-10-04
  • 2020-06-26
  • 1970-01-01
  • 2011-04-03
  • 1970-01-01
相关资源
最近更新 更多