Python-Web-Scraping mit HTML-Tags mit Attributen

7

Ich versuche, einen Web-Scraper zu erstellen, der eine Webseite mit Publikationen analysiert und die Autoren extrahiert. Die Skelettstruktur der Webseite ist die folgende:

%Vor%

Ich habe bisher versucht, BeautifulSoup und lxml zu benutzen, um diese Aufgabe zu erledigen, aber ich bin mir nicht sicher, wie ich mit den zwei div-Tags und dem td-Tag umgehen soll, weil sie Attribute haben. Außerdem bin ich mir nicht sicher, ob ich mich mehr auf BeautifulSoup oder lxml oder eine Kombination von beiden verlassen sollte. Was soll ich tun?

Im Moment sieht mein Code wie folgt aus:

%Vor%

Ich stelle fest, dass viele der Importanweisungen redundant sind, aber ich habe einfach kopiert, was ich gerade in einer Quelldatei hatte.

EDIT: Ich nehme an, dass ich das nicht ganz klar gemacht habe, aber ich habe mehrere Tags in der Seite, die ich abkratzen möchte.

    
GobiasKoffi 08.09.2009, 02:23
quelle

4 Antworten

11

Es ist mir nicht klar aus deiner Frage, warum du dich um die div -Tags kümmern musst - was tust du nur:

%Vor%

Bei dem von Ihnen angegebenen HTML-Code wird Folgendes genau ausgegeben:

%Vor%

scheint das zu sein, was Sie wollen. Vielleicht können Sie genauer angeben, was Sie brauchen, und dieses super-einfache Snippet tut es nicht - mehrere td -Tags alle der Klasse author , die Sie berücksichtigen müssen (alle? Nur einige? Welche?) möglicherweise fehlt ein solches Tag (was möchten Sie in diesem Fall tun) und dergleichen. Es ist schwer abzuleiten, was genau deine Spezifikationen sind, nur aus diesem einfachen Beispiel und dem überreichen Code ;-).

Bearbeiten : Wenn es laut dem letzten Kommentar des OP mehrere solche td-Tags gibt, eine pro Autor:

%Vor%

... d. h., nicht viel schwieriger überhaupt! -)

    
Alex Martelli 08.09.2009, 03:01
quelle
6

oder Sie könnten pyquery verwenden, da BeautifulSoup nicht mehr aktiv gepflegt wird, finden Sie unter Ссылка

Installieren Sie zuerst pyquery mit

%Vor%

Dann könnte Ihr Skript so einfach wie

sein %Vor%

pyquery verwendet die CSS-Selektor-Syntax, die von jQuery her bekannt ist und die ich intuitiver finde als die von BeautifulSoup. Es verwendet Lxml darunter und ist viel schneller als BeautifulSoup. Aber BeautifulSoup ist pure Python und funktioniert daher auch in der App-Engine von Google

    
captnswing 02.05.2010 07:01
quelle
5

Die lxml-Bibliothek ist jetzt der Standard für das Parsen von html in Python. Das Interface kann zunächst peinlich wirken, aber es ist sehr nützlich für das, was es tut.

Sie sollten zulassen, dass die Bibliothek den XML-Spezialismus behandelt, wie z. B. diese maskierten & amp; entities;

%Vor%     
Julian Todd 04.05.2011 10:51
quelle
1

BeautifulSoup ist sicherlich der kanonische HTML-Parser / Prozessor. Aber wenn Sie nur diese Art von Snippet haben, müssen Sie sich anpassen, anstatt ein ganzes hierarchisches Objekt zu erstellen, das den HTML-Code darstellt. Mit pyparsing können Sie führende und nachfolgende HTML-Tags zum Erstellen eines größeren Suchausdrucks definieren:

%Vor%

Die Funktion makeHTMLTags von Pyparsing kann viel mehr als nur die Ausdrücke "<tag>" und "</tag>" ausgeben. Es behandelt auch:

  • fallloses Anpassen von Tags
  • "<tag/>" Syntax
  • Null oder mehr Attribut im öffnenden Tag
  • Attribute in beliebiger Reihenfolge definiert
  • Attributnamen mit Namespaces
  • Attributwerte in einfachen, doppelten oder keinen Anführungszeichen
  • Leerzeichen zwischen Tag und Symbolen oder Attributname, '=' und Wert
  • Attribute sind nach der Analyse als benannte Ergebnisse
  • verfügbar

Dies sind die häufigsten Fehler, wenn Sie einen Regex für HTML-Scraping verwenden.

    
PaulMcG 08.09.2009 03:31
quelle