найти тег на основе того, что он окружает (используя Beautifulsoup) - PullRequest
0 голосов
/ 08 июня 2011

Я использую BeautifulSoup для разбора HTML.Допустим, у меня есть следующий HTML-код в 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>

Я могу получить все теговые элементы 'td' с помощью:

soup.findAll("td")

Но как мне найти только 'тд теги, которые окружают div, которые имеют класс test4?Или эти теги «a» окружают test4?

Я знаю, что могу найти теги с атрибутами, такими как:

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

Но мне нужно объединить это с первоначальным поиском 'td'так что я выбрасываю все теги 'td', которые не окружают теги 'a' или 'div'.

Идеи?Спасибо!

Ответы [ 2 ]

1 голос
/ 07 января 2012

Вот как я бы это сделал:

>>> 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 эта работа будет выполнена.

1 голос
/ 08 июня 2011

Это работает, только если непосредственным родителем элемента 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>]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...