Analysieren von Daten mit BeautifulSoup Python
Ich bin versucht, BeautifulSoup Parsen durch einen DOM-Baum, und extrahieren Sie die Namen der Autoren. Unten ist ein Ausschnitt des HTML-zeigen die Struktur des Codes werde ich kratzen.
<html>
<body>
<div class="list-authors">
<span class="descriptor">Authors:</span>
<a href="/find/astro-ph/1/au:+Lin_D/0/1/0/all/0/1">Dacheng Lin</a>,
<a href="/find/astro-ph/1/au:+Remillard_R/0/1/0/all/0/1">Ronald A. Remillard</a>,
<a href="/find/astro-ph/1/au:+Homan_J/0/1/0/all/0/1">Jeroen Homan</a>
</div>
<div class="list-authors">
<span class="descriptor">Authors:</span>
<a href="/find/astro-ph/1/au:+Kosovichev_A/0/1/0/all/0/1">A.G. Kosovichev</a>
</div>
<!--There are many other div tags with this structure-->
</body>
</html>
Mein Punkt der Verwirrung ist, dass wenn ich Suppe.finden, es findet das erste vorkommen des div-tag, ich bin auf der Suche nach. Danach habe ich die Suche für alle 'einen' link-tags. In dieser Phase, wie extrahiere ich den Autoren-Namen, die aus jedem der link-tags und drucken Sie Sie aus? Gibt es einen Weg, es zu tun mit BeautifulSoup oder brauche ich Regex? Wie kann ich weiterhin die Iteration über alle anderen div-Tags und extrahieren die Autoren-Namen?
import re
import urllib2,sys
from BeautifulSoup import BeautifulSoup, NavigableString
html = urllib2.urlopen(address).read()
soup = BeautifulSoup(html)
try:
authordiv = soup.find('div', attrs={'class': 'list-authors'})
links=tds.findAll('a')
for link in links:
print ''.join(link[0].contents)
#Iterate through entire page and print authors
except IOError:
print 'IO error'
InformationsquelleAutor GobiasKoffi | 2009-10-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
verwenden Sie einfach findAll für die divs Links für die links
für authordiv in der Suppe.findAll('div', attrs={'class': 'Liste der Autoren}):
InformationsquelleAutor John La Rooy
Seit
link
ist bereits aus einem iterierbar, die Sie nicht brauchen, um subindexlink
- Sie können einfach tunlink.contents[0]
.print link.contents[0]
mit Ihrem neuen Beispiel mit zwei separaten<div class="list-authors">
ergibt:So, ich bin mir nicht sicher, ob ich verstehe den Kommentar über die Suche nach anderen divs. Wenn Sie verschiedene Klassen, Sie müssen entweder eine separate
soup.find
undsoup.findAll
, oder einfach nur ändern Sie Ihre erstesoup.find
.Wenn Sie suchen, durch die CSS-Klasse erhalten Sie dann eine Liste der Elemente, und Sie können die Iteration mit einer for-Schleife (siehe: crummy.com/software/BeautifulSoup/bs4/doc/...). Tun Sie etwas wie:
authordiv = soup.find('div', class_ = 'list-authors')
.InformationsquelleAutor Mark Rushakoff