sintaxis recursivo recursividad recursivas recursiva programacion programa iterativas funciones funcion ejemplos eficiencia python recursion beautifulsoup html-parsing

recursivo - recursividad python



¿Por qué este sitio web específico causa un error de recursividad al analizar? (2)

He intentado leer y analizar una página en car-part.com todo el día y estoy teniendo problemas. Estoy usando beautifulsoup y siempre devuelve un error de recursión. Inicialmente asumí que se debía a los elementos de la lista 4k en el html, así que aumenté el límite recursivo pero eso no lo solucionó. Me di cuenta de que ocurre en todas y cada una de las páginas y no puedo entender por qué está sucediendo solo en este sitio web específico.

Este es el error que estoy recibiendo:

RecursionError: la profundidad de recursión máxima excedida en comparación

Antes de eso, aunque constantemente se repite

Archivo "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/bs4/element.py", línea 1195, en el formateador decode_contents)) Archivo "/Library/Frameworks/Python.framework /Versions/3.5/lib/python3.5/site-packages/bs4/element.py ", línea 1126, en decode indent_contents, eventual_encoding, formatter) Archivo" /Library/Frameworks/Python.framework/Versions/3.5/lib/ python3.5 / site-packages / bs4 / element.py ", línea 1195, en el formateador decode_contents)) Archivo" /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/bs4/ element.py ", línea 1126, en decodificar indent_contents, eventual_encoding, formatter) Archivo" /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/bs4/element.py ", línea 1195 , en el formateador decode_contents)) ...

El problema es que no entiendo lo que significa la lectura de esta consola. ¿El sitio está llamando a este archivo y ese es el error de recursión?

Ya no me preocupa analizar el sitio, ya obtuve la información que necesito. Solo quiero entender qué está pasando exactamente aquí; ¿Puede alguien explicármelo?

No hay mucho que publicar en términos de código, cualquier llamada del objeto devuelve el error de recursión.

from urllib.request import urlopen from bs4 import BeautifulSoup html = urlopen("http://car-part.com") bsObj = BeautifulSoup(html.read(), "html.parser") print(bsObj)

la impresión de bsObj devuelve el error y la llamada a bsObj.li también, pero .title y otros elementos parecen funcionar.


De hecho, encontré la causa de este error. Descargué dicha página y retoqué un poco hasta que reduje el código HTML causando el error solo a las dos selecciones.

Ahora es la buena parte.

La primera selección tiene alrededor de 1200 opciones, la segunda alrededor de 500. No hay una sola etiqueta de cierre ''opción'' presente, todas se dejan abiertas. El analizador entiende esto (lógicamente) como estructura HTML anidada de múltiples multiplicaciones y hace todo lo posible para desentrañarlo, hasta que se agote la pila de recursión.

Fin de la historia :)


html5lib y lxml manejan este caso particular:

bsObj = BeautifulSoup(html.read(), "html5lib") bsObj = BeautifulSoup(html.read(), "lxml")

Tenga en cuenta que esto requerirá la instalación de html5lib y / o lxml :

pip install html5lib pip install lxml

También vea Diferencias entre analizadores .