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

Chr*_*ian 6 python beautifulsoup html-parsing web-scraping jsoup

我有这个代码,它使用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);
    }
Run Code Online (Sandbox Code Playgroud)

我想做同样的事情,但在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>
Run Code Online (Sandbox Code Playgroud)

等等

基本上我希望输出保留每个元素的相对位置.我将如何使用Python和BeautifulSoup做到这一点?

编辑:

这是我的python代码(它非常天真),但也许它可以帮助?

output = []

for e in soup :
  if e["class"] == "pickmenucolmenucat" :
    output.append(e)
  if e["class"] == "pickmenucoldispname" :
    output.append(e)
  if e["class"] == "pickmenucolportions" :
    output.append(e)
Run Code Online (Sandbox Code Playgroud)

jfs*_*jfs 7

要查找<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))
Run Code Online (Sandbox Code Playgroud)

产量

['header']  content 
['name']  content 
['quantity']  content 
['name']  content 
['quantity']  content 
['header']  content2 
['name']  content2 
['quantity']  content2 
['name']  content2 
['quantity']  content2 
Run Code Online (Sandbox Code Playgroud)

还有其他方法可以让你搜索,遍历html元素.