从json中提取img src值

时间:2015-04-13 07:40:58

标签: python regex bash

我需要帮助从文本中提取src值(例如:LOC/IMG.png)。执行此操作的任何最佳方法,因为我的文件数超过10 ^ 5个文件。

我有JSON如下:

{"Items":[{src=\"LOC/IMG.png\"}]}

2 个答案:

答案 0 :(得分:1)

让我为parserers提出一个免责声明:我并不认为正则表达式是最酷的,而且我自己在任何地方都使用XML / JSON解析器。但是,当遇到任何格式错误的文本时,解析器通常无法处理我想要的qay。我必须添加regexish代码来处理这些情况。

因此,如果绝对需要正则表达式,请使用(?<=src=\\").*?(?=\\")"正则表达式。 (?<=src=\\")后视和前瞻(?= \“)将充当src属性中值的边界。

以下是示例代码:

import re
p = re.compile(ur'(?<=src=\\").*?(?=\\")')
test_str = "YOUR_STRING"
re.findall(p, test_str)

请参阅demo

答案 1 :(得分:1)

您的JSON包含一些HTML值。因此,如果可能的话,您应该将JSON解析为JSON,然后将HTML值解析为HTML。这需要您了解一些关于数据结构的内容 - 但无论如何这都是一件好事。

例如:

j = json.loads(s)
for item in j['Items']:
    soup = bs4.BeautifulSoup(item['Item'])
    for img in soup.find_all('img'):
        yield img['src']

这个可能太慢了,但只需要几分钟就可以编写正确的代码,在1000个随机代表文件上运行它,然后弄清楚它是否足够快,当推断到任何时候“1 Lakh的文件数”是。如果它足够快,那就这样做吧;在其他条件相同的情况下,最好是正确而简单,而不是变得笨拙或复杂,如果意外的数据显示为错误的话,如果它们显示为不正确的结果,那么你将节省时间通知直到一周后...

如果您的文件大约是2K,就像您的示例一样,我的笔记本电脑可以json.loads 2K随机JSON和BeautifulSoup 2K随机HTML,时间比从硬盘读取2K所花费的时间少,所以更糟糕的是,这只需要读取数据和无所事事的时间的两倍。如果你的CPU速度很慢,SSD速度很快,或者你的数据非常不寻常等,那可能不是真的(这就是你测试的原因,而不是猜测),但我认为你会好的。