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

标签 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(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>

等等

基本上我希望输出保留每个元素的相对位置。我将如何使用 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)

最佳答案

查找所有<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))

输出

['header']  content 
['name']  content 
['quantity']  content 
['name']  content 
['quantity']  content 
['header']  content2 
['name']  content2 
['quantity']  content2 
['name']  content2 
['quantity']  content2 

还有other methods that allows you to search, traverse html elements .

关于python - 使用 BeautifulSoup 遍历 html 树中的元素,并生成一个保持每个元素相对位置的输出?在 Python 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13736554/

相关文章:

Python:预加载内存

python - 如何在 Windows 10 上安装 pyYAML

python - lxml 中编码的大写 html 标签

python - BeautifulSoup:如何删除空表,同时保留部分空表或非空表

html - 你能提供解析 HTML 的例子吗?

java - 拆分 jSoup 抓取结果

python - 测量在 Tensorflow 中将数据从 RAM 移动到 GPU 内存所需的时间

python - 问题从似乎发生变化的网站上抓取数据

python - 无法在scrapy中导入项目

python - 生成在 pandas.DataFrame 中选择行的条件