Pregunta

Estoy tratando de tirar de la lista de nombres de recursos / bases de datos y los identificadores de una lista de los recursos que la biblioteca de mi escuela tiene suscripciones a. Hay páginas del listado de los diferentes recursos, y puedo usar urllib2 para obtener las páginas, pero cuando paso a la página BeautifulSoup, se trunca su árbol justo antes del final de la entrada para el primer recurso en la lista. El problema parece estar en enlace de imagen que se utiliza para agregar el recurso a un conjunto de búsqueda. Aquí es donde las cosas se cortan, aquí está el código 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>

Y aquí es mi código 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

En la versión de BeautifulSoup, la apertura <a href...> aparece, pero el <img> no, y la <a> se cierra inmediatamente, al igual que el resto de las etiquetas de apertura, todo el camino a </html>.

El único rasgo distintivo que veo para estas imágenes "Añadir a conjuntos" es que son los únicos que tienen nombre y atributos id. No puedo ver por qué eso sería causar BeautifulSoup para detener de inmediato el análisis, sin embargo.

Nota: Estoy casi completamente nuevo en Python, pero parece que se va entendiendo que bien

.

Gracias por su ayuda!

¿Fue útil?

Solución 2

Yo estaba usando "vista del origen de la selección" de Firefox, que al parecer se limpia el código HTML para mí. Cuando vi la fuente original, esto es lo que vi

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

Al poner un espacio después del atributo border="0", puedo conseguir BS a analizar la página.

Otros consejos

Puede intentar hermosa sopa con html5lib más que el analizador incorporado.

BeautifulSoup(markup, "html5lib")

html5lib es más flexible y, a menudo un análisis sintáctico páginas que trunca el analizador incorporado. Consulte la documentación en http://www.crummy.com/ software / BeautifulSoup / bs4 / doc / # búsqueda-la-árbol

Recomiendo encarecidamente el uso de html5lib + lxml en lugar de hermosa sopa. Se utiliza un analizador HTML real (muy similar a la de Firefox) y lxml proporciona una forma muy flexible para consultar el árbol resultante (CSS-selectores o XPath).

Hay un montón de errores o un comportamiento extraño en BeautifulSoup lo que hace no es la mejor solución para una gran cantidad de marcado HTML no se puede confiar.

Si no recuerdo mal, BeautifulSoup utiliza "nombre" en ella de árbol como el nombre de la etiqueta. En este caso "a" sería el "nombre" de la etiqueta de anclaje.

No parece que como tiene que romperla sin embargo. ¿Qué versión de Python y BS está usando?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top