2016-07-30 27 views
0

Ich habe vor kurzem eine sehr nette Art der Web-Verschrottung mit bs4 gefunden, die eine wirklich gut organisierte Struktur hat. lassen Sie uns sagen, dass dies unsere HTML-Code ist:Wie man Schleife anwendet, um Inhalte von "DIV" -Tag zu extrahieren, während Schöne Suppe verwendet wird?

<div class="a"> 
 
    <div class="b"> 
 
    <a href="www.yelloaes.com">'hi'</a> 
 
    </div> 
 
    <div class ="c"> 
 
    <p><a href="www.bb.com">'hi again'</a></p> 
 
    <div class="d"> 
 
     <p>'well this final'</p> 
 
    </div> 
 
    </div> 
 
</div> 
 

 

 
<div class="a"> 
 
    <div class="b"> 
 
    <a href="www.yelloaes1.com">'hi1'</a> 
 
    </div> 
 
    <div class ="c"> 
 
    <p><a href="www.bb1.com">'hi again1'</a></p> 
 
    <div class="d"> 
 
     <p>'well this final1'</p> 
 
    </div> 
 
    </div> 
 
</div>

jetzt i <div class="a"> gehe davon aus unserer Mutter-Tag ist und wir werden Informationen aus diesem Tag saugen, bedeutet nun, dass ich eine Schleife durch diese haben um Informationen von der ganzen Seite zu extrahieren.

aber weil ich Verständnis eine harte Zeit, BeautifulSoup i mit einem Python-Code, um einen Testlauf hat die Informationen von der ersten Iteration dieses <div class= "a">

meinen Code zu extrahieren, ist wie folgt:

soup = BeautifulSoup(r.text) 
find_hi =  soup.find('div',{'class':'a'}).div.text 
find_hi-again =soup.find('div',{'class':'a'}).find_all('div')[1].p.text 
find_final =soup.find('div',{'class':'a'}).find('div',{'class':'d'}).text 

print(find_hi , find_hi-again , find_final) 

#output comes as (it worked !!!) 
hi , hi again , this is final 

Hinweis: Ich möchte wirklich bei dieser bleiben, also bitte keine komplett neuen Wege der Verschrottung. jetzt ich kann nicht scheinen auf der ganzen Seite Schleife. Ich habe versucht, dies für Looping, zeigt aber nicht das Ergebnis, das ich sehen möchte:

soup = BeautifulSoup(r.text) 
#To have a list of all div tags having this class 
scrapping = soup.find_all('div',{'class':'a'}) 
for i in scrapping: 
    find_hi =  i.div.text 
    find_hi-again =i.find_all('div')[1].p.text 
    find_final =i.find('div',{'class':'d'}).text 

print(find_hi , find_hi-again , find_final) 

helfen bitte in Looping?

+0

Was ist das Ergebnis, das angezeigt wird? – sushant

+0

Es zeigt ein Ergebnis, aber es zeigt nicht die verschiedenen Elemente, sondern zeigt wiederholte Elemente aus dem gleichen Tag wie, *** hi, hi wieder, nun, dieses Finale, hi, hi wieder, nun, dieses Finale ** statt * * hi, hi wieder, naja dieses finale, hi1, hi again1, naja das final1 ** –

+0

teile die url wenn möglich und was du als ausgabe erwartest, macht dein aktueller code wenig sinnvoll. –

Antwort

0

Sie Code funktioniert gut für mich, außer für den Syntaxfehler: find_hi-again ist kein gültiger Variablenname.

divs = soup.find_all('div',{'class':'a'}) 
for i in divs: 
    find_hi = i.div.text.strip() 
    find_hi_again = i.find_all('div')[1].p.text.strip() 
    find_final = i.find('div',{'class':'d'}).text.strip() 

    print(find_hi , find_hi_again , find_final) 

## (u"'hi'", u"'hi again'", u"'well this final'") 
## (u"'hi1'", u"'hi again1'", u"'well this final1'") 
+0

bitte versuchen Sie große reale Seite und sagen Sie mir, ob es funktioniert, weil es nicht für mich funktioniert. und yaa ich habe diesen Namen gemacht, ich weiß, dass es einen Fehler wirft. –

+0

Wie teile ich meinen Code von dem, was ich wirklich mache? –

+0

danke für die Antwort Ich überprüfte es funktioniert Ich denke, es funktioniert nicht auf einigen Websites Ich versuchte auf Expedia und Makemytrip und es funktionierte nicht, aber auf anderen Seiten funktionierte es –