2016-10-12 6 views
0

私はこの構造を持っています。スパンタグ付きのBeautifulSoupで特定のデータを抽出する

<div id="one" class="tab-pane active"> 
 
<div class="item-content"> 
 
    <a href="/mobilni-uredjaji.4403.html"> 
 
     <div class="item-primary"> 
 
       <div class="sticker-small"> 
 
         <span class=""></span> 
 
        </div> 
 
        <div class="sticker-small-lte"> 
 
         <span class="lte"></span> 
 
        </div> 
 

 
       <div class="item-photo"> 
 
          <img src="/upload/images/thumbs/devices/SAMG935F/SAMG935F_image001_220x230.png" alt="Samsung Galaxy S7 edge"> 
 
       </div> 
 

 

 
       <div class="item-labels"> 
 
        <span class="item-manufacturer">Samsung</span> 
 
        <span class="item-title">Galaxy S7 edge</span> 
 
       </div> 
 
     </div> 
 

 
     <div class="item-secondary"> 
 
       <span class="item-price">94.000<span class="currency">currency!</span></span> 
 
       <span class="item-package"> uz! Sigurica 1500</span> 
 
       <span class="item-installments">na! 24 rate_po!</span> 
 
       <span class="value">100 currency!</span> 
 
       <span class="item-available">device_is_available_on_webshop_list!</span> 
 
     </div> 
 

 
    </a> 
 
</div> 
 
<div class="item-content"> 
 
    <a href="/mobilni-uredjaji.4403.html"> 
 
     <div class="item-primary"> 
 
       <div class="sticker-small"> 
 
         <span class=""></span> 
 
        </div> 
 
        <div class="sticker-small-lte"> 
 
         <span class="lte"></span> 
 
        </div> 
 

 
       <div class="item-photo"> 
 
          <img src="/upload/images/thumbs/devices/SAMG935F/SAMG935F_image001_220x230.png" alt="Samsung Galaxy S7 edge"> 
 
       </div> 
 

 

 
       <div class="item-labels"> 
 
        <span class="item-manufacturer">Samsung</span> 
 
        <span class="item-title">Galaxy S7 edge</span> 
 
       </div> 
 
     </div> 
 

 
     <div class="item-secondary"> 
 
       <span class="item-price">94.000<span class="currency">currency!</span></span> 
 
       <span class="item-package"> uz! Sigurica 1500</span> 
 
       <span class="item-installments">na! 24 rate_po!</span> 
 
       <span class="value">100 currency!</span> 
 
       <span class="item-available">device_is_available_on_webshop_list!</span> 
 
     </div> 
 

 
    </a> 
 
</div> 
 
    
 
-----same structure ---- 
 
    
 
</div>

マイターゲットは、対応するデータを持つクラス= "項目ラベル" とDIVである:

  • サムスン
  • ギャラクシーS7縁

とDIVスパンtaの下のデータを持つクラス "item-secondary" class = "item-price"、94.000のg。

は、私は正確であることを私の出力を必要とする:

  • サムスン
  • ギャラクシーS7エッジ

これまでのところ、私は下の価格なしで最初の二つのデータを取得しています。このコードでスパン。私はかなり掻き分けていないので、ちょっとここにこだわっています。 お願いします。 コードは次のとおりです。

from bs4 import BeautifulSoup 
 
import re 
 
import pymysql 
 
import MySQLdb 
 
import urllib 
 

 
#rl = "http://www.vipmobile.rs/mobilni-uredjaji.2631.html#tarifgroup-1|devicetype-1|minprice-0|maxprice-124800|brand-0|model-0" 
 
url = "file:///C:/Users/zika/Desktop/one.html" 
 

 

 

 
html = urllib.urlopen(url) 
 
page = html.read() 
 
#print(page) 
 
# db = MySQLdb.connect(host = 'localhost', 
 
        # user = 'root', 
 
        # passwd = '123456', 
 
        # db = 'lyrics') 
 
soup = BeautifulSoup(page, 'html.parser') 
 

 
#mobData = soup.find("div", {"class": "bxslider items"}).find_all("div", {"class": "item-content"}) 
 
#for mobMan in soup.find("div", {"class": "tab-pane active"}).findAll("span") 
 

 
labelData = soup.find("div", {"class": "tab-pane active"}).find_all("div", {"class": "item-content"}) 
 
labelPrice = soup.find("div", {"class": "tab-pane active"}).find_all("span", class_="item-price") 
 

 
    
 
for label in labelData: 
 
print(label.contents[1].find("div", {"class": "item-labels"}).getText()) 
 
\t 
 
for price in labelPrice: 
 
    print(price.getText()) 
 

 

 
\t 
 
\t 
 
\t 
 

 

 
    
 
    \t 
 

 
    
 

 

 

 

 

 

 
\t \t 
 
\t \t 
 
\t \t 
 

 
input("\n\nPress the enter key to exit!") \t \t

答えて

1

あなたはそれを試みることができる:

from bs4 import BeautifulSoup 

soup = BeautifulSoup(source, "html.parser") 
div1 = soup.find("div", { "class" : "item-labels" }).findAll('span', { "class" : "item-manufacturer" }) 
div2 = soup.find("div", { "class" : "item-labels" }).findAll('span', { "class" : "item-title" }) 
div3 = soup.find("div", { "class" : "item-secondary" }).findAll('span', { "class" : "item-price" }) 
for i,j,k in zip(div1,div2,div3): 
    print i.text 
    print j.text 
    print k.text.replace("currency!",'') 

注:上記のコードでsourceように私はあなたのポストに設けた構成を使用していました。

Samsung 
Galaxy S7 edge 
94.000 
+0

これは、スパンのための良いヒントです:

この

は、次のような出力が得られます。ありがとう@コーダー – Miki

関連する問題