我有一个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循环一起使用可将其删除。
  • 10-07 19:12
    查看更多