2017-02-12 5 views
4

Dies ist ein Beispiel HTML-Code:Wie div Element innerhalb eines anderen Div-Elements mit beautifulsoup?

<div class="cb-col cb-col-25 cb-mtch-blk"><a class="cb-font-12" href="/live-cricket-scores/16947/ind-vs-ban-only-test-bangladesh-tour-of-india-2017" target="_self" title="India v Bangladesh - Only Test"> 
<div class="cb-hmscg-bat-txt cb-ovr-flo "> 
<div class="cb-ovr-flo cb-hmscg-tm-nm">BAN</div> 
<div class="cb-ovr-flo" style="display:inline-block; width:140px">322/6 (104.0 Ovs)</div> 
</div> 

Ich möchte Text wie BAN und 322/6 (104,0 Ovs) aus dem oben analysierten html extrahieren. Iam tut so-

soup = BeautifulSoup(html) 
div_class = soup.findAll('div',class_='cb-col cb-col-25 cb-mtch-blk') 
for each in div_class: 
    #I want to get those texts from variable 'each' 

Wie kann ich es tun?

Antwort

3

können Sie some css selectors mit BeautifulSoup4 verwenden:

>>> from bs4 import BeautifulSoup 
>>> html = ... # the html provided in the question 
>>> soup = BeautifulSoup(html, 'lxml') 
>>> name, size = soup.select('div.cb-hmscg-bat-txt.cb-ovr-flo div') 
>>> name.text 
u'BAN' 
>>> size.text 
u'322/6 (104.0 Ovs)' 
+1

In Zeile Nr. 4, bekomme ich einen Fehler als "Zu viele Werte zum Auspacken". Was soll ich machen? – ddlj

+0

@ddlj, Wie wäre es mit diesem statt Zeile # 4: 'print ([x.text für x in supp.select ('div.cb-hmscg-bat-txt.cb-ovr-flo div')])' – falsetru

+0

@ddlj, BTW, könnten Sie den tatsächlichen HTML-Code (oder die URL, von der Sie den HTML-Code erhalten haben) teilen? Wie Sie in meiner Antwort sehen können, könnte ich diese zwei Texte mit dem gegebenen HTML in der Frage bekommen. – falsetru

1

each bedeuten, dass der HTML-Code, den Sie zur Verfügung gestellt, zum nächsten div Tag gehen sollte, und nutzen Sie den gesamten Text stripped_strings verwenden.

div_class = soup.findAll('div',class_='cb-col cb-col-25 cb-mtch-blk') 
for each in div_class: 
    name, size = each.div.stripped_strings 
    print(name, size) 

aus:

BAN 322/6 (104.0 Ovs) 
Verwandte Themen