如何使用beautifulsoup python使用findall指定子标签

时间:2016-11-07 18:33:21

标签: python web-scraping beautifulsoup

如何只获取其他标记旁边的特定标记。所以如果我这样做

soup.findAll('blockquote')我将获得所有blockquotes的列表,但我只想要一个名称为attr的标签旁边的blockquote。 <a name="*">

所以我的blockquotes列表不会包含这样的内容:

   <blockquote>
     <i>Intro </i>
  </blockquote>

当我只想要

<blockquote><a name="*">  </blockquote>

下面是示例,但还有一些其他的blockquote,以及其他内部标记。但我只想要<a name="*">内标。

<blockquote>
<i>Intro </i>
</blockquote>, <blockquote>
<a name="1">a </a><br>
</br></blockquote>, <blockquote>
<a name="2">x </a><br>
<a name="3">y </a><br>
<a name="4">z </a><br>
</br></br></br></blockquote>
好吧,相反,我希望得到这样的结果

<blockquote>
    <a name="1">a </a><br>
    </br></blockquote>, <blockquote>
    <a name="2">x </a><br>
    <a name="3">y </a><br>
    <a name="4">z </a><br>
    </br></br></br></blockquote>

2 个答案:

答案 0 :(得分:2)

或者,您可以使用searching function一次性

soup.find_all(lambda tag: tag.name == "blockquote" and tag.a)

其中tag.a相当于tag.find("a")

换句话说,这会找到具有blockquote子元素的所有a元素。

答案 1 :(得分:1)

如何获取所有a代码,这些代码是blockquote代码的直接子代,然后获取其父代(blockquotes)?

from bs4 import BeautifulSoup

soup = BeautifulSoup("""
<blockquote>
<i>Intro </i>
</blockquote>, <blockquote>
<a name="1">a </a><br>
</br></blockquote>, <blockquote>
<a name="2">x </a><br>
<a name="3">y </a><br>
<a name="4">z </a><br>
</br></br></br></blockquote>
""", 'html.parser')

for a in soup.select('blockquote > a'):
    print(a.parent)

结果:

<blockquote>
<a name="1">a </a><br>
</br></blockquote>
<blockquote>
<a name="2">x </a><br>
<a name="3">y </a><br>
<a name="4">z </a><br>
</br></br></br></blockquote>