2015-11-11 3 views
2

Я хочу использовать BeautifulSoup для разбора некоторых HMTL. У меня есть таблица с несколькими строками. Я пытаюсь найти строку, которая соответствует определенным условиям (определенные значения атрибутов), и использовать индекс этой строки позже в моем коде.Does BeautifulSoup find_all() сохранить заказ тега?

Вопрос: find_all() сохранить порядок моих строк в результирующем наборе, который он возвращает?

я не нашел это в docs и Googling получил меня только this answer:

'BeautifulSoup теги не отслеживать их порядок на странице, нет.

, но он не говорит, откуда он получил эту информацию.

Я был бы доволен ответом, но еще более доволен указателем на документацию, которая объясняет это.

Редактировать: dstudeba указал мне в направлении этого «обходного пути», используя next_sibling.

from bs4 import BeautifulSoup 
soup = BeautifulSoup(open('./mytable.html'), 'html.parser') 
row = soup.find('tr', {'class':'something', 'someattr':'somevalue'}) 
myvalues = [] 
while True: 
    cell = row.find('td', {'someattr':'cellspecificvalue'}) 
    myvalues.append(cell.get_text()) 
    row = row.find_next_sibling('tr', {'class':'something', 'someattr':'somevalue'}) 
    if not row: 
     break 

Это доставит мне содержимое ячейки, в которой я нуждаюсь, в порядке их появления в моем html-файле.

Однако я все еще хотел бы знать, где в документах BeautifulSoup я мог найти, сохраняет ли заказ find_all() или нет. Вот почему я не принимаю ответ dstudeba. (мой upvote не показывает, не хватает репутации: P)

ответ

1

Это мой опыт, что find_all действительно сохраняет заказ. Однако, чтобы убедиться, что вы можете использовать метод find_all_next, который использует метод find_next, который сохранит заказ. Here is a link к документации.

+0

Извините, что не вернулись к вам раньше. Я читал о find_next, просто не получил его полностью (не носитель английского языка). Я попробую! –

Смежные вопросы