with how div all python html beautifulsoup html-parsing lxml

python - how - Establecer lxml como analizador de BeautifulSoup predeterminado



python scraper beautifulsoup (2)

Estoy trabajando en un proyecto web y he tenido problemas con la velocidad. Para intentar solucionarlo, quiero usar lxml en lugar de html.parser como el analizador de BeautifulSoup. Pude hacer esto:

soup = bs4.BeautifulSoup(html, ''lxml'')

pero no quiero tener que escribir repetidamente ''lxml'' cada vez que llamo a BeautifulSoup. ¿Hay alguna forma de que pueda establecer qué analizador utilizar una vez al comienzo de mi programa?


De acuerdo con Especificar el analizador para usar la página de documentación:

El primer argumento para el constructor BeautifulSoup es una cadena o un identificador de archivo abierto, el marcado que desea analizar. El segundo argumento es cómo desea que se analice el marcado.

Si no especifica nada, obtendrá el mejor analizador de HTML que esté instalado. Beautiful Soup clasifica el analizador de lxml como el mejor, luego el html5lib, luego el analizador integrado de Python.

En otras palabras, la simple instalación de lxml en el mismo entorno python lo convierte en un analizador predeterminado.

Sin embargo, tenga en cuenta que declarar explícitamente un analizador sintáctico se considera un enfoque de mejores prácticas. Existen diferencias entre los analizadores que pueden dar lugar a errores sutiles que serían difíciles de depurar si permite que BeautifulSoup elija el mejor analizador por sí mismo. También debería recordar que necesita tener instalado lxml . Y, si no lo tuviera instalado, ni siquiera lo notaría: BeautifulSoup obtendría el siguiente analizador disponible sin lanzar ningún error.

Si aún no desea especificar el analizador de forma explícita, al menos anote para su futuro u otros que usarían el código que ha escrito en el lxml README / documentación del proyecto, y liste lxml en los requisitos de su proyecto junto con beautifulsoup4 .

Además: "Explícito es mejor que implícito".


Obviamente eche un vistazo a la respuesta aceptada primero. Es bastante bueno, y en cuanto a este tecnicismo:

pero no quiero tener que escribir repetidamente ''lxml'' cada vez que llamo a BeautifulSoup. ¿Hay alguna forma de que pueda establecer qué analizador utilizar una vez al comienzo de mi programa?

Si entendí su pregunta correctamente, puedo pensar en dos enfoques que le ahorrarán algunas pulsaciones de teclas: - Definir una función de envoltura, o - Crear una función parcial.

# V1 - define a wrapper function - most straight-forward. import bs4 def bs_parse(html): return bs4.BeautifulSoup(html, ''lxml'') # ... html = ... bs_parse(html)

O si tienes ganas de presumir ...

import bs4 from functools import partial bs_parse = partial(bs4.BeautifulSoup, features=''lxml'') # ... html = ... bs_parse(html)