2016-10-12 1 views
0

Ich habe diese Struktur.Extrahieren bestimmter Daten mit BeautifulSoup mit span Tags

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

Mein Ziel ist es div mit class = "item-Etiketten" mit entsprechenden Daten:

  • Samsung
  • Galaxy S7 Rand

und div mit der Klasse "item-secondary" mit Daten unter der span ta g mit Klasse = "Artikelpreis", 94.000.

Ich brauche meine Ausgabe genau zu sein:

  • Samsung
  • Galaxy S7 Rand

Bisher mit diesem Code i ohne Preis zuerst zwei Daten sind immer unter dem Spanne. Ich bin hier irgendwie festgefahren, weil ich eine ganze Weile nicht geschabt habe. Bitte ankreuzen? -Code ist:

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

Antwort

1

Sie könnten versuchen, dass:

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!",'') 

Hinweis: als source im obigen Code ich die Struktur, die Sie in Ihrem Beitrag vorgesehen verwendet.

Dies wird die folgende Ausgabe geben:

Samsung 
Galaxy S7 edge 
94.000 
+0

Dies ist guter Hinweis für Spannweite. Danke @coder – Miki

Verwandte Themen