Guía para principiantes de Web Scraping en Python (usando BeautifulSoup)

Contenidos

Visión general

  • Aprenda web scraping en Python usando la biblioteca BeautifulSoup
  • Web Scraping es una técnica útil para convertir datos no estructurados en la web en datos estructurados
  • BeautifulSoup es una biblioteca eficiente disponible en Python para realizar raspados web que no sean urllib
  • Se necesita un conocimiento básico de HTML y etiquetas HTML para hacer web scraping en Python

Introducción

La necesidad y la importancia de extraer datos de la web es cada vez más fuerte y clara. Cada pocas semanas, me encuentro en una situación en la que necesitamos extraer datos de la web para construir un modelo de aprendizaje automático.

Por ejemplo, la semana pasada estábamos pensando en crear un índice de picor y sentimiento sobre varios cursos de ciencia de datos disponible en internet. ¡Esto no solo requeriría encontrar nuevos cursos, sino también buscar en la web sus revisiones y luego resumirlas en algunas métricas!

Este es uno de los problemas / productos cuya eficacia depende más del web scraping y la extracción de información (recopilación de datos) que de las técnicas utilizadas para resumir los datos.

Nota: También hemos creado un curso gratuito para este artículo: Introducción al web scraping con Python. Este formato estructurado te ayudará a aprender mejor.

Formas de extraer información de la web

Hay varias formas de extraer información de la web. Uso de APIs siendo probablemente la mejor manera de extraer datos de un sitio web. Casi todos los sitios web grandes como Twitter, Facebook, Google, Twitter, StackOverflow proporcionan API para acceder a sus datos de una manera más estructurada. Si puede obtener lo que necesita a través de una API, casi siempre es el enfoque preferido sobre el web scraping. Esto se debe a que si obtiene acceso a datos estructurados del proveedor, ¿por qué querría crear un motor para extraer la misma información?

Lamentablemente, no todos los sitios web proporcionan una API. Algunos lo hacen porque no quieren que los lectores extraigan gran cantidad de información de forma estructurada, mientras que otros no proporcionan API por falta de conocimientos técnicos. ¿Qué haces en estos casos? Bueno, necesitamos raspar el sitio web para obtener la información.

Puede haber algunas otras formas como las fuentes RSS, pero su uso es limitado y, por lo tanto, no las incluiré en la discusión aquí.

admin-ajax-6170451

¿Qué es Web Scraping?

Web scraping es una técnica de software de computadora para extraer información de sitios web. Esta técnica se centra principalmente en la transformación de datos no estructurados (formato HTML) en la web en datos estructurados (base de datos u hoja de cálculo).

Puede realizar raspado web de varias formas, incluido el uso de Google Docs en casi todos los lenguajes de programación. Recurriría a Python por su facilidad y su rico ecosistema. Tiene una biblioteca conocida como ‘BeautifulSoup’ que ayuda en esta tarea. En este artículo, le mostraré la forma más fácil de aprender a raspar web usando la programación de Python.

Para aquellos de ustedes que necesitan una forma que no sea de programación para extraer información de las páginas web, también pueden mirar import.io . Proporciona una interfaz guiada por GUI para realizar todas las operaciones básicas de raspado web. ¡Los piratas informáticos pueden seguir leyendo este artículo!

Bibliotecas necesarias para web scraping

Tal como lo conocemos, Pitón es un lenguaje de programación de código abierto. Puede encontrar muchas bibliotecas para realizar una función. Por lo tanto, es necesario encontrar la mejor biblioteca para usar. yo prefiero Hermosa Sopa (Biblioteca de Python), ya que es fácil e intuitivo trabajar en él. Precisamente, usaré dos módulos de Python para raspar datos:

  • Urllib2: Es un módulo de Python que se puede utilizar para buscar URL. Define funciones y clases para ayudar con las acciones de URL (autenticación básica y resumida, redirecciones, cookies, etc.). Para obtener más detalles, consulte la página de documentación. Nota: urllib2 es el nombre de la biblioteca incluida en Python 2. En su lugar, puede usar la biblioteca urllib.request incluida con Python 3. La biblioteca urllib.request funciona de la misma manera que urllib.request funciona en Python 2. Porque es ya incluido no es necesario instalarlo.
  • BeautifulSoup: Es una herramienta increíble para extraer información de una página web. Puedes usarlo para extraer tablas, listas, párrafo y también puedes poner filtros para extraer información de páginas web. En este artículo, usaremos la última versión de BeautifulSoup 4. Puede consultar las instrucciones de instalación en su página de documentación.

BeautifulSoup no busca la página web por nosotros. Por eso, utilizo urllib2 en combinación con la biblioteca BeautifulSoup.

Pitón tiene varias otras opciones para el raspado HTML además de BeatifulSoup. Aquí hay algunos otros:

Conceptos básicos: familiarizarse con HTML (etiquetas)

Mientras realizamos el escarpado web, nos ocupamos de las etiquetas html. Por lo tanto, debemos comprenderlos bien. Si ya conoce los conceptos básicos de HTML, puede omitir esta sección. A continuación se muestra la sintaxis básica de HTML:html-7707012Esta sintaxis tiene varias etiquetas que se detallan a continuación:

  1. : Los documentos HTML deben comenzar con una declaración de tipo
  2. El documento HTML está contenido entre y
  3. La parte visible del documento HTML se encuentra entre y
  4. Los encabezados HTML se definen con el

    para

    etiquetas

  5. Los párrafos HTML se definen con la

    etiqueta

Otras etiquetas HTML útiles son:

  1. Los enlaces HTML se definen con el etiqueta, «<a href =«Http://www.test.com»>Este es un enlace para test.com</a> ”
  2. Las tablas HTML se definen con , la fila como
    y las filas se dividen en datos como

    está dentro de la etiqueta

    table-9656416
  3. La lista HTML comienza con
  4. )
    structure-6561345Arriba, puede notar que el segundo elemento de

    , no

    , por lo que debemos ocuparnos de esto. Ahora, para acceder al valor de cada elemento, usaremos la opción «buscar (texto = Verdadero)» con cada elemento. Veamos el código:
    #Generate lists
    A=[]
    B=[]
    C=[]
    D=[]
    E=[]
    F=[]
    G=[]
    for row in right_table.findAll("tr"):
        cells = row.findAll('td')
        states=row.findAll('th') #To store second column data
        if len(cells)==6: #Only extract table body not heading
            A.append(cells[0].find(text=True))
            B.append(states[0].find(text=True))
            C.append(cells[1].find(text=True))
            D.append(cells[2].find(text=True))
            E.append(cells[3].find(text=True))
            F.append(cells[4].find(text=True))
            G.append(cells[5].find(text=True))
    #import pandas to convert list to data frame
    import pandas as pd
    df=pd.DataFrame(A,columns=['Number'])
    df['State/UT']=B
    df['Admin_Capital']=C
    df['Legislative_Capital']=D
    df['Judiciary_Capital']=E
    df['Year_Capital']=F
    df['Former_Capital']=G
    df
    

    Finalmente, tenemos datos en el marco de datos:
    output-6122649
    Del mismo modo, puede realizar otros tipos de raspado web utilizando «Hermosa Sopa“. Esto reducirá sus esfuerzos manuales para recopilar datos de páginas web. También puede mirar los otros atributos como .parent, .contents, .descendants y .next_sibling, .prev_sibling y varios atributos para navegar usando el nombre de la etiqueta. Estos le ayudarán a eliminar las páginas web de forma eficaz.

    Pero, ¿por qué no puedo usar expresiones regulares?

    Ahora, si conoce las expresiones regulares, podría estar pensando que puede escribir código usando expresiones regulares que pueden hacer lo mismo por usted. Definitivamente tenía esta pregunta. En mi experiencia con BeautifulSoup y las expresiones regulares para hacer lo mismo, descubrí:

    • El código escrito en BeautifulSoup suele ser más robusto que el escrito con expresiones regulares. Los códigos escritos con expresiones regulares deben modificarse con cualquier cambio en las páginas. Incluso BeautifulSoup necesita eso en algunos casos, es solo que BeautifulSoup es relativamente mejor.
    • Las expresiones regulares son mucho más rápidas que BeautifulSoup, generalmente por un factor de 100 para dar el mismo resultado.

    Por lo tanto, se reduce a la velocidad frente a la robustez del código y aquí no hay un ganador universal. Si la información que está buscando se puede extraer con simples declaraciones de expresiones regulares, debe continuar y usarlas. Para casi cualquier trabajo complejo, generalmente recomiendo BeautifulSoup más que expresiones regulares.

    Nota final

    En este artículo, analizamos los métodos de raspado web que utilizan «BeautifulSoup» y «urllib2» en Python. También analizamos los conceptos básicos de HTML y realizamos el raspado web paso a paso mientras resolvíamos un desafío. Te recomiendo que practiques esto y lo utilices para recopilar datos de páginas web.

    ¿Le ha resultado útil este artículo? Comparta sus opiniones / pensamientos en la sección de comentarios a continuación.

    Nota: También hemos creado un curso gratuito para este artículo: Introducción al web scraping con Python. Este formato estructurado te ayudará a aprender mejor.

    Si le gusta lo que acaba de leer y desea continuar con su aprendizaje sobre análisis, suscríbete a nuestros correos electrónicos, Síguenos en Twitter o como nuestro pagina de Facebook.

    Suscribite a nuestro Newsletter

    No te enviaremos correo SPAM. Lo odiamos tanto como tú.