6

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)
4

1 に答える 1

9

特定のリストから属性<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 

HTML要素を検索してトラバースできる他の方法もあります。

于 2012-12-06T08:33:44.307 に答える