一开始是个问题,但到了一半我就明白了。我在stackoverflow或google上找不到这样的问题,所以无论如何我都会把它贴出来帮助任何一个偶然发现它的人。
我想使用beautifulsoup中的soupstrainer来解析两个标签,而不是html文档中的一个。
我知道我能做到:

soup = BeautifulSoup(content.text, 'lxml', parse_only=SoupStrainer('p'))

这将得到<p>标记。我还想得到<h3>标签。所以我试了一下:
soup = BeautifulSoup(content.text, 'lxml', parse_only=SoupStrainer('h3', 'p'))

但这不起作用,因为Soupstrainer只接受一个论点。
答案如下。

最佳答案

要使soupstrainer解析多个标记,需要将它们放入一个列表中。这样地:

soup = BeautifulSoup(content.text, 'lxml', parse_only=SoupStrainer(['h3', 'p']))

这将解析<h3>中的<p>content.text标记,即使它们是同级标记(即一个标记不在另一个标记内)。
你也可以用两个以上的标签,只要你把它们作为一个列表传递给Soupstrainer。
一个标签:
soup = BeautifulSoup(content.text, 'lxml', parse_only=SoupStrainer('p'))

多个标记:
soup = BeautifulSoup(content.text, 'lxml', parse_only=SoupStrainer(['h1', 'h3', 'p', 'h4']))

09-16 19:30