如何对包含破折号的属性使用SoupStrainer?

时间:2019-02-22 22:26:26

标签: python django python-3.x parsing beautifulsoup

我正在使用Django和Python 3.7。我想使用BeautifulSoup和SoupStrainer在文档中查找带有属性的特定元素。但是,如果属性包含破折号,该怎么办?我想这样做

my_strainer = SoupStrainer('a', data-id="aaa")

但这会导致错误

Can't assign to function call

抱怨“ data-id”属性。如果我将“ data-id”更改为“ id”,那么一切都会运行,但是我没有得到想要的结果。

1 个答案:

答案 0 :(得分:2)

您可以像

一样传递它
my_strainer= SoupStrainer('a',{'data-id':'aaa'})

data-*和其他此类属性应该像documentation中所述那样传递。

样品

html="""
<html class="test">
<a data-id='aaa'>yes</a>
<a>No</a>
<span>no</span>
</html>
"""
from bs4 import BeautifulSoup
from bs4 import SoupStrainer
my_strainer= SoupStrainer('a',{'data-id':'aaa'})
soup=BeautifulSoup(html, "lxml", parse_only=my_strainer)
print(soup)

输出

<a data-id="aaa">yes</a>