Есть ли чистый способ получить n-й столбец HTML-таблицы, используя BeautifulSoup? - PullRequest
5 голосов
/ 04 апреля 2011

Скажем, мы смотрим на первую таблицу на странице, поэтому:

table = BeautifulSoup(...).table

строки могут быть отсканированы с чистым циклом for:

for row in table:
    f(row)

Но для получения одного столбца все становится грязно.

Мой вопрос: существует ли элегантный способ извлечь отдельный столбец, либо по его позиции, либо по его «имени» (т.е. тексту, который появляется в первой строке этого столбца)?

1 Ответ

5 голосов
/ 04 апреля 2011

lxml во много раз быстрее, чем BeautifulSoup, поэтому вы можете использовать это.

from lxml.html import parse
doc = parse('http://python.org').getroot()
for row in doc.cssselect('table > tr'):
    for cell in row.cssselect('td:nth-child(3)'):
         print cell.text_content()

Или вместо цикла:

rows = [ row for row in doc.cssselect('table > tr') ]
cells = [ cell.text_content() for cell in rows.cssselect('td:nth-child(3)') ]
print cells
...