Question

Je suis en train de tirer sur la liste des noms de ressources / base de données et les ID d'une liste des ressources que ma bibliothèque scolaire est abonnée à. Il y a des pages énumérant les différentes ressources, et je peux utiliser urllib2 pour obtenir les pages, mais quand je passe à la page BeautifulSoup, il tronque son arbre juste avant la fin de l'entrée pour la première ressource dans la liste. Le problème semble être en lien image utilisée pour ajouter la ressource à un ensemble de recherche. C'est là que les choses se coupent, voici le code 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>

Et voici mon code python:

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

Dans la version de BeautifulSoup, l'ouverture se présente <a href...>, mais n'a pas <img> et l'est immédiatement fermé <a>, comme le reste des balises ouvertes, tout le chemin à </html>.

Le seul trait distinctif que je vois pour ces « ajouter à des ensembles » images est qu'ils sont les seuls à avoir des attributs name et id. Je ne vois pas pourquoi cela causerait BeautifulSoup d'arrêter immédiatement l'analyse syntaxique, cependant.

Note: Je suis presque entièrement nouveau à Python, mais semblent être comprendre tout droit

.

Merci pour votre aide!

Était-ce utile?

La solution 2

J'utilisais « vue source de sélection » de Firefox, qui nettoie apparemment pour moi le code HTML. Quand je considérais la source d'origine, ce que j'ai vu

<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)">

En mettant un espace après l'attribut border="0", je peux obtenir BS pour analyser la page.

Autres conseils

Vous pouvez essayer belle soupe avec html5lib plutôt que l'analyseur intégré.

BeautifulSoup(markup, "html5lib")

html5lib est plus clémente et parse souvent des pages que l'analyseur intégré est tronqué. Voir la documentation http://www.crummy.com/ logiciel / BeautifulSoup / BS4 / doc / # recherche-le-arbre

Je recommande fortement d'utiliser html5lib + lxml au lieu de la belle soupe. Il utilise un analyseur HTML réel (très similaire à celui de Firefox) et lxml fournit un moyen très flexible pour interroger l'arbre résultant (css-sélecteurs ou XPath).

Il y a des tonnes de bugs ou un comportement étrange dans BeautifulSoup ce qui en fait pas la meilleure solution pour un grand nombre de balises HTML vous ne pouvez pas faire confiance.

Si je me souviens bien, BeautifulSoup utilise « nom » dans elle est l'arbre comme le nom de la balise. Dans ce cas, « une » serait le « nom » de la balise d'ancrage.

Cela ne semble pas comme il devrait le casser bien. Quelle version de Python et BS utilisez-vous?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top