使用BeautifulSoup遍历html树中的元素,并生成一个保持每个元素相对位置的输出?用Python

使用BeautifulSoup遍历html树中的元素,并生成一个保持每个元素相对位置的输出?用Python,python,html-parsing,web-scraping,beautifulsoup,jsoup,Python,Html Parsing,Web Scraping,Beautifulsoup,Jsoup,我有这段代码,它完成了在Java中使用Jsoup所需的工作 Elements htmlTree = doc.body().select("*"); Elements menuElements = new Elements(); for(Element element : htmlTree) { if(element.hasClass("header")) menuElements.add(element); if(e

我有这段代码,它完成了在Java中使用Jsoup所需的工作

Elements htmlTree = doc.body().select("*");

    Elements menuElements = new Elements();

    for(Element element : htmlTree) {

        if(element.hasClass("header")) 
            menuElements.add(element);
        if(element.hasClass("name"))
            menuElements.add(element);
        if(element.hasClass("quantity"))
            menuElements.add(element);
    }
我想做同样的事情,但在Python中使用BeautifulSoup。下面是我正在尝试抓取的HTML的一个示例树:

<div class="header"> content </div>
     <div class="name"> content </div>
     <div class="quantity"> content </div>
     <div class="name"> content </div>
     <div class="quantity"> content </div>
<div class="header"> content2 </div>
     <div class="name"> content2 </div>
     <div class="quantity"> content2 </div>
     <div class="name"> content2 </div>
     <div class="quantity"> content2 </div>
要从给定列表中查找具有
class
属性的所有
元素,请执行以下操作:

#!/usr/bin/env python
from bs4 import BeautifulSoup # $ pip install beautifulsoup4

with open('input.xml', 'rb') as file:
    soup = BeautifulSoup(file)

elements = soup.find_all("div", class_="header name quantity".split())
print("\n".join("{} {}".format(el['class'], el.get_text()) for el in elements))
输出
还有。

是什么让你认为BeautifulSoup不能维持秩序?显示你拥有的代码。我真的什么都没有。我遇到的问题是,我的内容中有一些空的和无用的标签。我对jSoup所做的基本上是检查每个标记是否有我需要的类,然后在匹配的情况下将元素添加到列表中。我想知道如何在中执行此操作,或者是否有更简单的方法执行此操作我用python代码添加了一个编辑(非常幼稚),它也会给我一个类型错误(字符串索引必须是整数)
#!/usr/bin/env python
from bs4 import BeautifulSoup # $ pip install beautifulsoup4

with open('input.xml', 'rb') as file:
    soup = BeautifulSoup(file)

elements = soup.find_all("div", class_="header name quantity".split())
print("\n".join("{} {}".format(el['class'], el.get_text()) for el in elements))
['header']  content 
['name']  content 
['quantity']  content 
['name']  content 
['quantity']  content 
['header']  content2 
['name']  content2 
['quantity']  content2 
['name']  content2 
['quantity']  content2