Ich versuche BeautifulSoup zu verwenden, um einen DOM-Baum zu analysieren und die Namen der Autoren zu extrahieren. Im Folgenden finden Sie ein HTML-Snippet, das die Struktur des Codes zeigt, den ich scrappen werde.Analysieren von Daten mit BeautifulSoup in Python
<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 soup.find tun, ist es das erste Vorkommen der div-Tags findet, Ich suche. Danach suche ich nach allen 'a' Link Tags. Wie extrahiere ich in diesem Stadium die Namen der Autoren aus den einzelnen Link-Tags und drucke sie aus? Gibt es eine Möglichkeit, dies mit BeautifulSoup zu tun oder muss ich Regex verwenden? Wie fahre ich fort, über jedes andere div-Tag zu iterieren und die Namen der Autoren zu extrahieren?
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'
Und Wenn es mehr div-Tags gibt, wie übertrage ich diese? – GobiasKoffi
Wenn Sie nach CSS-Klasse suchen, erhalten Sie eine Liste von Elementen und Sie können mit einer for-Schleife iterieren (siehe: http://www.crummy.com/software/BeautifulSoup/bs4/doc/#searching-by-css- Klasse). Tun Sie etwas wie: 'authordiv = soup.find ('div', class_ = 'list-authors')'. – eNord9