首页 文章

根据它周围的东西找到一个标签(使用beautifulsoup)

提问于
浏览
0

我正在使用BeautifulSoup来解析一些HTML . 假设我在BeautifulSoup中有以下HTML,叫做汤:

<td class="1">test1</td>
<td>test2</td>
<td class="3"><a href="/">test3</a></td>
<td><div class="test4"><a class="test4" href="/">test4</a></div></td>
<td><div class="test4"><a class="test4" href="/">test4</a></div></td>

我可以通过以下方式获取所有'td'标记的项目:

soup.findAll("td")

但是,如何才能找到包含test4类的div的'td'标签?或者用test4包围'a'标签?

我知道我可以找到带有属性的标签,例如:

soup.findAll("a", {"class":"test4"})

但是我需要将它与最初的'td'搜索结合起来,这样我就会抛弃所有不包含'a'或'div'标签的'td'标签 .

想法?谢谢!

2 回答

  • 1

    这仅适用于test4元素的直接父元素是td,但它应该让您了解如何进行更复杂的查询:

    >>> from BeautifulSoup import BeautifulSoup
    >>> soup = BeautifulSoup('''<td class="1">test1</td>
    ... <td>test2</td>
    ... <td class="3"><a href="/">test3</a></td>
    ... <td><div class="test4"><a class="test4" href="/">test4</a></div></td>
    ... <td><div class="test4"><a class="test4" href="/">test4</a></div></td>
    ... ''')
    >>> [tag.parent for tag in soup.findAll(attrs = {"class": "test4"})
    ...  if tag.name in ['a', 'div'] and tag.parent.name == 'td']
    [<td><div class="test4"><a class="test4" href="/">test4</a></div></td>, <td><div class="test4"><a class="test4" href="/">test4</a></div></td>]
    
  • 1

    我就是这样做的:

    >>> tdList = []
    >>> for td in soup.findAll('td'):
    ...     for div in td.findAll('div',{'class':'test4'}):
    ...         tdList.append(div.parent)
    ... 
    >>> tdList
    [<td><div class="test4"><a class="test4" href="/">test4</a></div></td>, <td><div class="test4"><a class="test4" href="/">test4</a></div></td>]
    

    当然,您可以根据需要增加粒度,但是对于提供的html,这可以完成工作 .

相关问题