【问题标题】:Extract string with more than one URL提取具有多个 URL 的字符串
【发布时间】:2018-06-25 05:50:04
【问题描述】:

我有一个字符串,里面有几个 URL。我已经设法使用正则表达式来提取第一个 URL,但我真的需要它们。到目前为止,我的脚本如下:

data = ['https://images-na.ssl-images-amazon.com/images/I/41M9WbK3MDL._SX342_.jpg":[355,342],"https://images-na.ssl-images-amazon.com/images/I/41M9WbK3MDL._SX425_.jpg":[441,425],"https://images-na.ssl-images-amazon.com/images/I/41M9WbK3MDL.jpg":[500,482],"https://images-na.ssl-images-amazon.com/images/I/41M9WbK3MDL._SX466_.jpg":[483,466],"https://images-na.ssl-images-amazon.com/images/I/41M9WbK3MDL._SX385_.jpg":[399,385]}']
url = data[data.find("https://"):]
url[:url.find('"')]

抱歉 - 上面的脚本没有使用正则表达式,但这是我尝试这样做的另一种方式。我的正则表达式脚本在下面几乎做同样的事情。我真的不介意我们使用什么,只是想尝试获取所有 URL,因为我的两个脚本都只提取第一个 URL。

url=re.search('(https)://.*?\.(jpg)', data)
if url:
   print(url.group(0)) 

我正在抓取亚马逊产品 - 这是上下文。我还将字符串更新为实际示例之一。感谢大家的 cmets/帮助

【问题讨论】:

  • 您的代码有不匹配的引号,请修复它。 (根据你的问题,我不确定它应该去哪里。)
  • 您并没有真正在代码中使用正则表达式,.find() 采用常规字符串(不是正则表达式)并返回其在原始字符串中第一次出现的索引。
  • 另外,data 是一个列表,你如何在上面使用.find()?你应该得到一个例外。
  • 这个字符串是从哪里来的?看起来像是 json 字符串的一部分。
  • 还有一点,您的网址似乎遵循这种格式,"<url here>"(注意双引号),但您的第一个网址缺少开放引号,所以我对您的数据有点困惑格式。

标签: python regex


【解决方案1】:

也许这样:

URL_list = [i for i in data.split('"') if 'http' in i]

它不使用正则表达式,但在这段代码中我认为不需要正则表达式。

【讨论】:

  • 我边走边学;之前没有使用过 JSON 库。感谢您的提示 - 我现在看到语法是 json... 会检查一下
【解决方案2】:

您的新示例字符串(来自 data[0])缺少左大括号和双引号,但添加后,您可以使用标准库将其读取为 JSON。您可能只是错误地复制/粘贴了它。

In[2]: data = ['https://images-na.ssl-images-amazon.com/images/I/41M9WbK3MDL._SX342_.jpg":[355,342],"https://images-na.ssl-images-amazon.com/images/I/41M9WbK3MDL._SX425_.jpg":[441,425],"https://images-na.ssl-images-amazon.com/images/I/41M9WbK3MDL.jpg":[500,482],"https://images-na.ssl-images-amazon.com/images/I/41M9WbK3MDL._SX466_.jpg":[483,466],"https://images-na.ssl-images-amazon.com/images/I/41M9WbK3MDL._SX385_.jpg":[399,385]}']
In[3]: import json
In[4]: d = json.loads('{"%s' % data[0])
In[5]: d
Out[5]: 
{'https://images-na.ssl-images-amazon.com/images/I/41M9WbK3MDL._SX342_.jpg': [355,
  342],
 'https://images-na.ssl-images-amazon.com/images/I/41M9WbK3MDL._SX425_.jpg': [441,
  425],
 'https://images-na.ssl-images-amazon.com/images/I/41M9WbK3MDL.jpg': [500,
  482],
 'https://images-na.ssl-images-amazon.com/images/I/41M9WbK3MDL._SX466_.jpg': [483,
  466],
 'https://images-na.ssl-images-amazon.com/images/I/41M9WbK3MDL._SX385_.jpg': [399,
  385]}
In[6]: list(d.keys())
Out[6]: 
['https://images-na.ssl-images-amazon.com/images/I/41M9WbK3MDL._SX342_.jpg',
 'https://images-na.ssl-images-amazon.com/images/I/41M9WbK3MDL._SX425_.jpg',
 'https://images-na.ssl-images-amazon.com/images/I/41M9WbK3MDL.jpg',
 'https://images-na.ssl-images-amazon.com/images/I/41M9WbK3MDL._SX466_.jpg',
 'https://images-na.ssl-images-amazon.com/images/I/41M9WbK3MDL._SX385_.jpg']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-07
    • 2015-01-29
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多