BeautifulSoup: получить содержимое определенной таблицы - PullRequest
18 голосов
/ 29 мая 2010

Мой местный аэропорт позорно блокирует пользователей без IE и выглядит ужасно. Я хочу написать скрипты на Python, которые будут каждые несколько минут получать содержимое страниц «Прибытие» и «Вылет» и показывать их более читабельно.

Моими инструментами выбора являются механизация для обмана сайта, чтобы я считал, что я использую IE, и BeautifulSoup для анализа страницы для получения таблицы данных рейсов.

Честно говоря, я заблудился в документации BeautifulSoup и не могу понять, как получить таблицу (название которой я знаю) из всего документа и как получить список строк из этой таблицы.

Есть идеи?

Ответы [ 3 ]

34 голосов
/ 29 мая 2010

Это не тот код, который вам нужен, просто демонстрация того, как работать с BeautifulSoup. Он находит таблицу с идентификатором «Table1» и получает все ее элементы tr.

html = urllib2.urlopen(url).read()
bs = BeautifulSoup(html)
table = bs.find(lambda tag: tag.name=='table' and tag.has_attr('id') and tag['id']=="Table1") 
rows = table.findAll(lambda tag: tag.name=='tr')
9 голосов
/ 29 мая 2010
soup = BeautifulSoup(HTML)

# the first argument to find tells it what tag to search for
# the second you can pass a dict of attr->value pairs to filter
# results that match the first tag
table = soup.find( "table", {"title":"TheTitle"} )

rows=list()
for row in table.findAll("tr"):
   rows.append(row)

# now rows contains each tr in the table (as a BeautifulSoup object)
# and you can search them to pull out the times
0 голосов
/ 30 мая 2010

Просто если вы заботитесь, BeautifulSoup больше не поддерживается, и оригинальный сопровождающий предлагает перейти на lxml. Xpath должен хорошо справиться с задачей.

...