Как получить вложенный элемент в красивый суп - PullRequest
15 голосов
/ 29 июня 2009

Я борюсь с синтаксисом, необходимым для получения некоторых ссылок в тд. Элементы table, tr и td не имеют классов или идентификаторов.

Если бы я хотел взять якорь в этом примере, что бы мне понадобилось?

...

Спасибо

Ответы [ 2 ]

25 голосов
/ 29 июня 2009

Согласно документам, вы сначала создаете дерево разбора:

import BeautifulSoup
html = "<html><body><tr><td><a href='foo'/></td></tr></body></html>"
soup = BeautifulSoup.BeautifulSoup(html)

, а затем вы ищете в нем, например, теги <a>, ближайший родительский элемент которых <td>:

for ana in soup.findAll('a'):
  if ana.parent.name == 'td':
    print ana["href"]
23 голосов
/ 29 июня 2009

Как то так?

from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)
anchors = [td.find('a') for td in soup.findAll('td')]

Это должно найти первое «a» внутри каждого «td» в предоставленном вами html. Вы можете настроить td.find, чтобы быть более точным, или использовать findAll, если у вас есть несколько ссылок внутри каждого тд.

ОБНОВЛЕНИЕ: в комментарии Даниэля, если вы хотите убедиться, что у вас нет None в списке, вы можете изменить его понимание следующим образом:

from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)
anchors = [a for a in (td.find('a') for td in soup.findAll('td')) if a]

Который в основном просто добавляет проверку, чтобы увидеть, есть ли у вас фактический элемент, возвращаемый td.find('a').

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...