我有一个HTML文档,如下所示:
<div id="whatever">
<a href="unwanted link"></a>
<a href="unwanted link"></a>
...
<code>blah blah</code>
...
<a href="interesting link"></a>
<a href="interesting link"></a>
...
</div>
我只想抓取紧接
code
标记的链接。如果我执行soup.findAll('a')
,它将返回所有超链接。在该特定
code
元素之后,如何使BS4开始抓取? 最佳答案
试试soup.find_all_next()
:
>>> tag = soup.find('div', {'id': "whatever"})
>>> tag.find('code').find_all_next('a')
[<a href="interesting link"></a>, <a href="interesting link"></a>]
>>>
它类似于
soup.find_all()
,但是在标记之后找到所有标记。如果您想删除
<a>
之前的<code>
标记,我们有一个名为soup.find_all_previous()
的函数:>>> tag.find('code').find_all_previous('a')
[<a href="unwanted link"></a>, <a href="unwanted link"></a>]
>>> for i in tag.find('code').find_all_previous('a'):
... i.extract()
...
...
<a href="unwanted link"></a>
<a href="unwanted link"></a>
>>> tag
<div id="whatever">
...
<code>blah blah</code>
...
<a href="interesting link"></a>
<a href="interesting link"></a>
...
</div>
>>>
就是这样:
<a>
标记之前的所有<code>
标记。 soup.extract()
与for
循环一起使用可将其删除。