Frage

Ich versuche, auf der Liste der Ressourcen / Datenbanknamen und IDs aus einer Liste von Ressourcen, die meine Schulbibliothek Abonnements hat ziehen zu. Es gibt Seiten, die verschiedenen Ressourcen Auflistung, und ich kann die Seiten verwendet urllib2 zu bekommen, aber wenn ich die Seite zu BeautifulSoup passieren, es kürzt seinen Baum kurz vor dem Ende des Eintrags für die erste Ressource in der Liste. Das Problem scheint in Bild-Link zu sein verwendet, um die Ressource zu einem Suchsatz hinzuzufügen. Dies ist, wo die Dinge abgeschnitten, hier ist der HTML:

<a href="http://www2.lib.myschool.edu:7017/V/ACDYFUAMVRFJRN4PV8CIL7RUPC9QXMQT8SFV2DVDSBA5GBJCTT-45899?func=find-db-add-res&amp;resource=XYZ00618&amp;z122_key=000000000&amp;function-in=www_v_find_db_0" onclick='javascript:addToz122("XYZ00618","000000000","myImageXYZ00618","http://discover.lib.myschool.edu:8331/V/ACDYFUAMVRFJRN4PV8CIL7RUPC9QXMQT8SFV2DVDSBA5GBJCTT-45900");return false;'>
    <img name="myImageXYZ00618" id="myImageXYZ00618" src="http://www2.lib.myschool.edu:7017/INS01/icon_eng/v-add_favorite.png" title="Add to My Sets" alt="Add to My Sets" border="0">
</a>

Und hier ist mein Python-Code:

import urllib2
from BeautifulSoup import BeautifulSoup
page = urllib2.urlopen("http://discover.lib.myschool.edu:8331/V?func=find-db-1-title&mode=titles&scan_start=latp&scan_utf=D&azlist=Y&restricted=all")
print BeautifulSoup(page).prettify

In BeautifulSoup-Version, die Öffnung <a href...> zeigt, aber die <img> nicht der Fall, und die <a> ist sofort geschlossen, als der Rest der offenen Tags sind, den ganzen Weg </html>.

Das einzige Unterscheidungsmerkmal ich für diese Bilder „zu Gruppen hinzufügen“ zu sehen ist, dass sie die einzigen sind, Name und id Attribute haben. Ich kann nicht sehen, warum das würde BeautifulSoup führen sofort zu stoppen Parsen, though.

Hinweis: Ich bin fast völlig neu zu Python, aber scheinen es alles in Ordnung sein Verständnis

.

Vielen Dank für Ihre Hilfe!

War es hilfreich?

Lösung 2

Ich war Firefox „Ansicht Auswahl Quelle“, mit der anscheinend das HTML für mich bereinigt. Als ich die Originalquelle angesehen, das ist, was ich sah,

<img name="myImageXYZ00618" id="myImageXYZ00618" src='http://www2.lib.myschool.edu:7017/INS01/icon_eng/v-add_favorite.png' alt='Add to My Sets' title='Add to My Sets' border="0"title="Add to clipboard PAIS International (CSA)" alt="Add to clipboard PAIS International (CSA)">

Durch ein Leerzeichen nach dem border="0" Attribute setzt, kann ich BS erhalte die Seite zu analysieren.

Andere Tipps

Sie können versuchen, schöne Suppe mit html5lib statt der eingebauten Parser.

BeautifulSoup(markup, "html5lib")

html5lib ist mildere und oft parst Seiten, die der eingebaute Parser abschneidet. Lesen Sie die Dokumentation unter http://www.crummy.com/ Software / BeautifulSoup / BS4 / doc / # Such den Baum

Ich empfehle dringend die Verwendung html5lib + lxml statt schöner Suppe. Es verwendet einen echten HTML-Parser (sehr ähnlich den in Firefox) und lxml bietet eine sehr flexible Möglichkeit, den resultierenden Baum (CSS-Selektoren oder XPath) abgefragt werden.

Es gibt Unmengen von Bugs oder seltsames Verhalten in BeautifulSoup, die es Ihnen nicht die beste Lösung für eine Vielzahl von HTML-Markup macht nicht vertrauen können.

Wenn ich mich richtig erinnere, verwendet BeautifulSoup „name“ in seiner Struktur als der Name des Tags. In diesem Fall "a" würde der "Name" des Anker-Tages sein.

Das scheint nicht, wie es es aber brechen sollte. Welche Version von Python und BS verwenden Sie?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top