Я борюсь с синтаксисом, необходимым для захвата некоторых hrefs в td.
Элементы table, tr и td не имеют классов или идентификаторов.
Если бы я хотел захватить якорь в этом примере, что мне нужно?
<tr> <td> <a> ...
Спасибо
Ответ 1
В соответствии с документами вы сначала создаете дерево разбора:
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"]
Ответ 2
Что-то вроде этого?
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)
anchors = [td.find('a') for td in soup.findAll('td')]
Это должно найти первое "а" внутри каждого "td" в html, который вы предоставляете. Вы можете настроить td.find, чтобы быть более конкретным, или использовать findAll, если у вас есть несколько ссылок внутри каждого td.
UPDATE: re Daniele comment, если вы хотите убедиться, что в списке нет 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').