2017-11-03 3 views
0

Das Layout ist wie folgt:beautifulsoup - Extrahieren Link, Text und Titel innerhalb Kind div

<div class="App"> 
    <div class="content"> 
     <div class="title">Application Name #1</div> 
     <div class="image" style="background-image: url(https://img_url)"> 
     </div> 
     <a href="http://app_url" class="signed button">install app</a> 
    </div> 
</div> 

Ich versuche, den Titel zu holen, dann die APP_URL und im Idealfall, wenn ich über html drucken, I möchte, dass der TITLE eine Hyperlink von APP_URL wird.

Mein Code ist so, aber liefert keine Wunschergebnisse. Ich glaube, ich muss einen weiteren Befehl innerhalb der Schleife hinzufügen, um den Titel zu greifen. Das einzige Problem ist, wie stelle ich sicher, dass ich die TITLE und APP_URL ergreife, so dass sie zusammen gehen? Es gibt mindestens 15 Apps mit der Klasse <div class="App">. Natürlich möchte ich alle 15 Ergebnisse auch.

WICHTIG: für die href-Links, ich brauche es aus der Klasse "signed button".

soup = BeautifulSoup(example) 
for div in soup.findAll('div', {'class': 'App'}): 
    a = div.findAll('a')[1] 
    print a.text.strip(), '=>', a.attrs['href'] 

Antwort

1

Verwenden CSS-Selektoren:

from bs4 import BeautifulSoup 

html = """ 
<div class="App"> 
    <div class="content"> 
     <div class="title">Application Name #1</div> 
     <div class="image" style="background-image: url(https://img_url)"> 
     </div> 
     <a href="http://app_url" class="signed button">install app</a> 
    </div> 
</div>""" 

soup = BeautifulSoup(html, 'html5lib') 

for div in soup.select('div.App'): 
    title = div.select_one('div.title') 
    link = div.select_one('a') 

    print("Click here: <a href='{}'>{}</a>".format(link["href"], title.text)) 

Welche

Click here: <a href='http://app_url'>Application Name #1</a> 
+0

Ich erhalte diesen Fehler: 'supp = BeautifulSoup (my_url, 'html5lib') Datei" /Library/Python/2.7/site-packages/beautifulsoup4-4.6.0-py2.7.egg/bs4/__init__.py ", Zeile 165, in __init__ bs4.FeatureNotFound: Es wurde kein Tree Builder mit den von Ihnen angeforderten Features gefunden: html5lib. Müssen Sie eine Parser-Bibliothek installieren? 'Wenn ich jedoch html5lib pip installiere, bekomme ich folgende Meldung:' Anforderung bereits erfüllt: ' –

+0

Es funktioniert sogar ohne:' supp = BeautifulSoup (html) ' – Jan

+0

können wir einen privaten Chat machen ? –

0

Vielleicht funktioniert so etwas?

soup = BeautifulSoup(example) 
for div in soup.findAll('div', {'class': 'App'}): 
    a = div.findAll('a')[0] 
    print div.findAll('div', {'class': 'title'})[0].text, '=>', a.attrs['href'] 
+0

es ist wichtig, dass die href Links aus der Klasse zu sein, ergibt genannt ' "unterzeichnet Taste"'. - Auch, die Website hat eine Registerkarte mit der Aufschrift "Mehr laden", so dass es nicht alles aufnimmt, bis der Endbenutzer auf "Mehr laden" klickt. Wie kann ich das übertreffen? –

Verwandte Themen