2016-05-09 9 views
0

Mit dem BeautifulSoup-Modul in Python versuche ich, diese Webseite unten zu analysieren.Analysieren eines Div mit einem "Klassen" -Attribut

<div class="span-body"><div class="timestamp updated" title="2016-05-08T1231Z">May 8, 12:31 PM EDT</div></div> 

Ich versuche, das Skript unten zu bekommen 2016-05-08T1231Z zurückzukehren, die in der zweiten div mit der timestamp updated Klasse zu finden ist.

with open("index.html", 'rb') as source_file: 
    soup = BeautifulSoup(source_file.read()) # Read the source file and get BeautifulSoup to work with it. 
    div_1 = soup.find("div", {"class": "span-body"}).contents[0] # Parse the first div. 
    div_2 = div_1("div", {"class": "timestamp updated"}) # Parse the second div. 
    print div_2 

div_1 gibt, was ich (das zweite div) zurückkehren wollte, aber div_2 ist nicht, sondern nur es ist mir eine leere Liste im Gegenzug zu geben.

Wie kann ich dieses Problem beheben?

Antwort

0

Ein paar Optionen, die Sie alle nur contents[0] fallen sollte:

div_1 = soup.find("div", {"class": "span-body"}) # Parse the first div. 
div_2 = div_1("div", {"class": "timestamp updated"}) 

Dies wird wieder eine Liste mit einem Element darin:

[<div class="timestamp updated" title="2016-05-08T1231Z">May 8, 12:31 PM EDT</div>] 

Verwenden Sie einfach find():

div_1 = soup.find("div", {"class": "span-body"}) 
div_2 = div_1.find("div", {'class': 'timestamp updated'}) 
print(div_2) 

Ergebnis:

<div class="timestamp updated" title="2016-05-08T1231Z">May 8, 12:31 PM EDT</div> 

Wenn Sie die Zwischen div_1 warum gerade nicht brauchen nicht geradeaus zu div_2?

div_2 = soup.find("div", {'class': 'timestamp updated'}) 

Bearbeiten Kommentar: Um den Wert des Titels zu erhalten Attribut können Sie es wie folgt Index:

div_2['title'] 
+0

Ich reinigte es bis jetzt mit Ihrer Methode nur, um direkt zu 'div_2' und es funktioniert besser, aber von dort aus versuchte ich zu nehmen, dass und Rücksendung der Inhalt des' title' Attribut zu fragen. Wie mache ich das von hier aus? – Larsenv

+0

Sie können es einfach indizieren. 'print (div_2 ['title'])' – Pythonista

+0

['finden'] (https://www.crummy.com/software/BeautifulSoup/bs4/doc/#find) gibt keine Liste zurück, es ist dasselbe wie Aufruf 'find_all (limit = 1)' – bmcculley

0

zu finden, was Sie von div_1 Sie müssen wieder die Suchfunktion benutzen, auch Sie können die contents[0] loswerden, da find keine Liste zurückgibt.

soup = BeautifulSoup(source_file.read()) # Read the source file and get BeautifulSoup to work with it. 
div_1 = soup.find("div", {"class": "span-body"}) # Parse the first div. 
div_2 = div_1.find("div", {"class": "timestamp updated"}) # Parse the second div. 
print div_2 
Verwandte Themen