我有这个 html 文本:
<div>
<div class="item1"> value 1 </div>
\n
<div class="item1"> value 2 </div>
\n
<div class="item1"> value 3 </div>
</div>
div标签之间有未知文本:
我想得到 value 3
我试过这个:re.findall(r'class="item1".*?{3}>(.*?)</div>',x,re.S)
但是我得到了无效的重复错误,因为我使用了 {3},怎么才能得到第三个匹配项?
请您参考如下方法:
通过 BeautifulSoup css selectors .
>>> from bs4 import BeautifulSoup
>>> s = """<div>
<div class="item1"> value 1 </div>
<div class="item1"> value 2 </div>
<div class="item1"> value 3 </div>
</div>"""
>>> soup = BeautifulSoup(s)
>>> soup
<html><body><div>
<div class="item1"> value 1 </div>
<div class="item1"> value 2 </div>
<div class="item1"> value 3 </div>
</div></body></html>
>>> [i.string for i in soup.select('div > div[class~=item1]')[-1]]
[' value 3 ']
>>> [i.string.strip() for i in soup.select('div > div[class~=item1]')[-1]]
['value 3']
正如其他人所说,不要使用正则表达式解析 html 文件。
>>> re.findall(r'<div\s+class="item1">\s*(.*?)\s+</div>', s)[-1]
'value 3'
