Cómo escribir un rastreador / raspador web

Si conoces Python, personalmente me gusta Beautiful Soup: http://www.crummy.com/software/B…
¡Aún más por su lema!

No escribiste esa página horrible. Solo está tratando de obtener algunos datos. Beautiful Soup está aquí para ayudar.

Aparte de eso, está Scrapy: un marco de código abierto para el raspado web para Python
Puede usar cualquiera de ellos para escribir un rastreador.

Entonces, ¿cómo se hace para escribir un rastreador web?
En este ejemplo, trabajaremos para seleccionar los enlaces más votados en HN durante todo el día. Esto implica que tendremos que seguir raspando cada 30 minutos aproximadamente para clasificar los datos. Pero eso no es una gran preocupación aquí.

Encuentra tus datos:
Entonces, en este ejemplo, vamos a usar Hacker News. ¿Por qué? ¡Porque todos aman a HN! ¡Adelante, eche un vistazo a HN si aún no lo ha hecho antes! Observe una cosa importante: toda la página (o las páginas subsiguientes) tienen el mismo formato.

Planificación de su código:
Antes de comenzar esta sección, ¡asegúrese de haber instalado complementos / extensiones para desarrolladores web dependiendo de su navegador! (Es decir, no tienes lugar aquí)
Yo personalmente uso Firebug.
Una vez que haya configurado sus complementos / extensiones, estará listo para comenzar.

Para comenzar, debemos echar un vistazo al HTML que muestra estos enlaces.

En cromo:
Clic derecho del mouse -> Inspeccionar elemento.

Esto se parece a esto.

Esto abre las Herramientas de desarrollo del navegador. Ahora podremos ver el diseño de la página.

Esta parece ser el área de la región donde deseamos trabajar.

Obteniendo enlaces relevantes y votos a favor:

Ahora que sabemos que estamos mirando hacia una tabla enorme y tenemos que extraer datos relevantes de los enlaces, creamos una instancia de Beautiful Soup.

  desde bs4 import BeautifulSoup
 desde urllib2 import urlopen
 def get_category_links (section_url):
     html = urlopen (section_url) .read ()
     sopa = BeautifulSoup (html, "lxml")
     resumen = []
     para la fila en soup.find_all ('tr') [2:]:
         if len (row.find_all ('td')) == 3:
              celdas = row.find_all ('td')
              info_row = row.next_sibling
              título = celdas [2] .find ('a'). texto
              url = celdas [2] .find ('a') ['href']
              puntos = info_row.find ('span'). texto si info_row.find ('span') más ""
             
              data = {'title': título,
                          'url': url,
                          'puntos': si 'punto' en puntos más 0,
              }
             summary.append (datos)
      resumen de devolución

El código es bastante fácil de seguir. Básicamente, examinamos la página web a través del elemento de inspección y descubrimos por qué aparecieron los datos requeridos.
Por ejemplo: encontramos todos los bloques td con longitud = 3 (esto esencialmente elimina los datos iniciales de encabezado y pie de página)
Luego encontramos spans,href relevantes spans,href etc. para obtener nuestros datos.
Puede dirigirse a la documentación: http://www.crummy.com/software/B…bs4/doc/ para encontrar varias formas de atravesar el DOM.

Como puede ver en el código, utilizamos Beautiful Soup para analizar esencialmente toda la página y hacer una manipulación DOM muy fácil.
Entonces, dependiendo de sus datos requeridos, manipula el DOM y analiza la página web en consecuencia.

Y eso es todo, tiene los datos que necesita. Puede manipularlo para convertirlo a cualquier forma que necesite.
Úselo juiciosamente

Sin embargo, con el poder viene una gran responsabilidad.

Tenga en cuenta los siguientes puntos antes de comenzar a raspar

  1. Debe verificar los términos y condiciones de un sitio antes de rasparlos. Son sus datos y es probable que tengan algunas reglas para gobernarlos.
  2. Sea amable: una computadora enviará solicitudes web mucho más rápido que un usuario. Asegúrese de espaciar un poco sus solicitudes para no forzar el servidor del sitio.

PD. Los sitios cambian su diseño más de lo necesario. Si eso sucede, prepárate para reescribir tu código. (¡Suspiro!)

El código completo se puede encontrar aquí: sushant-hiray / tshn

He alojado una demostración del resultado en: tshn.sushant-hiray.me. Siéntase libre de echarle un vistazo.

Este fue mi primer proyecto de raspado.
¡Raspar es divertido e incluso más útil durante los hackatones!
Desguace feliz 🙂

Puede usar un marco de raspado como Scrapy: un marco de raspado web de código abierto para Python

También podría usar una combinación de urllib y BeautifulSoup en Python para lograr lo mismo: lo llamamos Tortoise porque nos enseñó.

More Interesting

¿Cuál es la mejor manera de guardar los artículos del sitio web en mi iPad para leerlos más tarde (sin conexión a Internet)?

¿Por qué algunos sitios web incluyen www en la URL mientras que otros no?

¿Cuáles son algunas cosas buenas que han surgido de la existencia de la web profunda? Todos preguntan sobre las cosas feas.

¿Cuál es el mejor lugar para almacenar credenciales de inicio de sesión (ID de usuario y contraseña) en línea?

¿Qué puedo hacer para deshacerme de la protección web de Sophos en la computadora portátil de mi escuela?

Cada vez que trato de buscar en la web profunda con Tor, obtengo las mismas webs de superficie. ¿Qué estoy haciendo mal?

¿Cómo funciona Offliberty?

¿Cómo sé si soy adicto a la información en la web y realmente no obtengo mucho valor de ella?

Publicidad en Internet en India: ¿Qué sabe sobre el canal de noticias de Webcast?

¿Cuáles son las 10 mejores cosas que existen en el mundo hoy como resultado de la World Wide Web?

¿Cuál es la diferencia entre un navegador web y un sistema operativo?

¿Por qué los Applets de Java no ganaron más tracción?

¿Cómo habría sido Internet si el micropago por contenido fuera diseñado en su infraestructura como se sugiere en el proyecto de Ted Nelson, Xanadu?

¿Cuáles fueron los puntos más destacados de la Cámara de los Lores el 15 de enero de 2014 sobre la World Wide Web?

¿Es verdad la noticia de que los tiburones desgarran los cables submarinos globales de Internet?