BeautifulSoup find_all()是否保留标签顺序?

Wil*_*ier 6 beautifulsoup python-2.7

我希望使用BeautifulSoup解析一些HMTL。我有几排桌子。我试图找到满足某些条件(某些属性值)的行,并稍后在我的代码中使用该行的索引。

问题是:是否find_all()在返回的结果集中保留行的顺序?

我在文档中没有找到这个,谷歌搜索让我只知道这个答案

“ 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
Run Code Online (Sandbox Code Playgroud)

这使我按其在html文件中出现的顺序获得所需的单元格内容。

但是我仍然想知道在BeautifulSoup文档中我可以找到是否find_all()保留顺序。这就是为什么我不接受dstudeba的回答。(我的投票未显示,没有足够的代表:P)

dst*_*eba 7

我的经验find_all确实可以保持秩序。但是,要确保您可以使用find_all_next使用find_next将保留顺序的方法的方法。 这是文档的链接