[英]Using REGEX to match elements between lines in Python
我正在寻找使用REGEX从购物网站中提取数量的方法。 在下面的示例中,我想得到“ 12.5公斤”。 但是,第一个跨度内的数量并不总是以千克为单位; 可能是磅,盎司等。
<td class="size-price last first" colspan="4">
<span>12.5 kilograms </span>
<span> <span class="strike">$619.06</span> <span class="price">$523.91</span>
</span>
</td>
上面的代码只是使用BeautifulSoup实际提取的内容的一小部分。 无论页面是什么,数量始终在一个范围内,并且在之后
<td class="size-price last first" colspan="4">
我过去使用过REGEX,但距离专家还很远。 我想知道如何在不同行之间匹配元素。 在这种情况下
<td class="size-price last first" colspan="4">
和
<span> <span class="strike">
避免使用正则表达式解析HTML。 使用该工具进行工作,使用HTML解析器(例如BeautifulSoup
-它功能强大,易于使用,并且可以完美地处理您的情况:
from bs4 import BeautifulSoup
data = """
<td class="size-price last first" colspan="4">
<span>12.5 kilograms </span>
<span> <span class="strike">$619.06</span> <span class="price">$523.91</span>
</span>
</td>"""
soup = BeautifulSoup(data)
print soup.td.span.text
打印:
12.5 kilograms
或者,如果td
是更大结构的一部分,则按类查找它,并从中获取第一个span的文本:
print soup.find('td', {'class': 'size-price'}).span.text
UPD(处理多个结果):
print [td.span.text for td in soup.find_all('td', {'class': 'size-price'})]
希望能有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.