¿Cómo se crea un rastreador 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í.

Fuente de 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 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 mediante el 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. No dudes en echarle un vistazo.
Este fue mi primer proyecto de raspado.
¡Raspar es divertido e incluso más útil durante los hackatones!
Desguace feliz 🙂

Gracias por A2a.

Creo que te refieres al raspador web.

Puede crear su propio rastreador web, solo use estos:

  • Crawljax.
  • Un marco rápido y potente de raspado y rastreo web

También puede usar esto: extensión Web Scraper en Chrome para eliminar datos de cualquier sitio web.

Utilice software de escritorio como:

  • Data Scraping Studio ™
  • Convierta sitios web en API estructuradas desde su navegador en segundos

También puede utilizar herramientas en línea como:

  • Import.io | Plataforma de datos web y herramienta gratuita de raspado web
  • Plataforma y servicios de rastreo web

Gracias….

Crear un rastreador web es muy fácil con Python. Python tiene muchas bibliotecas útiles que pueden ayudar en el rastreo web. Aquí enumero algunas bibliotecas Python útiles:

  • Requests es una forma fácil de usar de urllib integrada en la biblioteca de python para realizar solicitudes http.
  • Beautiful Soup es para extraer datos del formulario HTML / XML recibido en respuesta a la solicitud realizada.
  • Scrapy es otra biblioteca más famosa para el rastreo web.

Para hacer las cosas, le sugiero que lea la documentación de estas bibliotecas. Personalmente, creo que no hay mejor tutorial que no sea en las documentaciones oficiales.

¡Comprueba esta respuesta para obtener ideas y códigos interesantes para el rastreo web!

Lo primero que debe hacer es asegurarse de tener Python instalado. Si no tiene Python, instálelo antes de continuar. Para ejecutar este código, necesitaría BeautifulSoup. Es una biblioteca de Python para analizar documentos HTML. Los pasos para instalar BeautifulSoup se detallan a continuación:

  1. Vaya a este sitio y descargue el archivo “beautifulsoup4-4.1.3.tar.gz”
  2. Descomprima el archivo en una ubicación cómoda
  3. Abra la terminal y vaya a la carpeta desempaquetada
  4. Ejecute los siguientes comandos: $ python setup.py build $ python setup.py install
  5. Si la instalación se realiza correctamente, no verá ningún error en el terminal.

Ejecución del rastreador: vaya a una ubicación cómoda en su terminal y descargue el código del rastreador web desde mi cuenta de github con el siguiente comando:
$ git clone prateekvjoshi / Python-WebCrawler
El comando anterior creará una carpeta llamada “Python-WebCrawler” en su máquina y obtendrá todos los archivos necesarios de una vez. Es una versión modificada de la receta original de James Mills. Si no tiene git, simplemente descargue “crawler.py” desde este enlace. Lo bueno de Python es que casi cualquier función que necesitaríamos está incorporada o ya está escrita por alguien. ¡Solo tienes que organizarlos correctamente para que puedan bailar por ti!
¡Ahora estamos listos para gatear! Puede usar “crawler.py” para rastrear varios sitios web. He enumerado algunos casos de uso a continuación:

  • El siguiente comando mostrará el número total de enlaces encontrados en un sitio web en particular después del rastreo: $ python crawler.py Cree su sitio web en minutos
  • Si desea rastrear solo hasta una profundidad particular (en este caso, 2 niveles), entonces: $ python crawler.py -d 2 Cree su sitio web en minutos
  • Si desea los enlaces que solo se encuentran en esta url particular: $ python crawler.py -l Cree su sitio web en minutos
  • Hay muchas otras opciones que puede explorar. Ejecute lo siguiente en la terminal y verá un montón de opciones: $ python crawler.py –help

Te sugiero que uses Scrapy para su diseño, flujo de trabajo y operaciones asincrónicas. Puede usar PhantomJs como middleware para ejecutar JavaScripts. Pero siempre debe comenzar con su propia pila de python usando urllib2, Beautiful Soup, PhantomJs y Selenium. El desguace requiere muchas tareas de ingeniería inversa. Puede usar Chrome Developer Tool / Firebug para eso. Puede usar Charles para monitorear HTTP.

Para comprender el flujo de trabajo del raspado, le sugiero que consulte esta página en el sitio web de Scrapy.

¡Es realmente fácil crear API para rastrear sitios web a través de http://kimonolabs.com ! Kimono le permite crear rastreadores web personalizados a través de una interfaz de apuntar y hacer clic de forma gratuita, sin necesidad de codificación. Todo lo que debe hacer es cargar la barra de herramientas en el sitio que desee, hacer sus selecciones y extrapolar estas propiedades al resto de la página. Puede ejecutar rastreos programados, rastrear muchas páginas a la vez e incluso modificar la respuesta de datos con funciones de JavaScript.

Aunque es súper fácil de usar, Kimono también es realmente poderoso y tiene integraciones integradas con muchas otras herramientas para mayor comodidad. ¡Mira algunos grandes proyectos #builtwithkimono!

PD Bien, trabajo aquí, pero en realidad es un producto súper increíble que es totalmente gratuito, definitivamente vale la pena intentarlo 🙂

Si conoce JavaScript, debe usar Apify. Es un rastreador alojado en la nube, donde puede usar selectores jQuery simples u otras bibliotecas JS. Además, puede usar y alojar allí titiriteros u otro rastreador Node js.

Visite las bibliotecas BeautifulSoup.
En ubuntu puedes obtenerlos ingresando el siguiente comando en la terminal:
apt-get install python-bs4

Un rastreador web es esencialmente un bfs en páginas web, con páginas como nodos y enlaces como bordes.

Hice uno cuando estaba tratando de aprender game-dev de este sitio web: GameDev fue fácil … ish. La programación del juego comienza aquí.
La conexión a internet en mi universidad era mala durante las horas pico, así que pensé en descargarla de una vez, cuando las velocidades son buenas.

El siguiente es mi código.
Guarda la página y crea una carpeta con el mismo nombre que la página web y descarga archivos multimedia en la carpeta. Y luego modifica el html para buscar los archivos multimedia en su carpeta respectiva.

Es un rastreador web muy muy primitivo. Se puede hacer mucha optimización para mejorar su eficiencia.
Por ejemplo, los enlaces del sitio visitado se pueden almacenar ordenados alfabéticamente, y luego se puede usar una búsqueda binaria para verificar si el enlace ya se ha visitado. lo que nos dará un mejor tiempo de ejecución,

importar re
importar os
sistema de importación
importar urllib
importar urllib2
importar urlparse
de os.path import basename
desde urlparse import urlsplit
desde bs4 import BeautifulSoup
desde urllib import urlretrieve

url = ” http://www.gamefromscratch.com/page/Game-From-Scratch-CPP-Edition.aspx&quot ;

urls = [url] # pila de URL para visitar
visitado = [url] # lista de URL visitadas
urlsc = “/ inicio / priyadarsi / ex /”
while len (urls)> 0:
tratar:
htmltext = urllib.urlopen (urls [0]). read ()
sopa = BeautifulSoup (htmltext)
pos = len (urls [0]) – 1
mientras urls [0] [pos]! = ‘/’:
pos- = 1
nombre = urls [0] [pos + 1: len (urls [0])]
imprimir “página de descarga:” + nombre
impresión ” ”

#guardar el archivo
page = urllib2.urlopen (urls [0]). read ()

con abierto (nombre, ‘w’) como fid:
fid.write (página)
pos = 0
while name [pos]! = ‘.’ :
pos + = 1
fname = nombre [0: pos]
foldername = urlsc + fname
os.makedirs (nombre de carpeta)
out_folder = foldername + “/”
imprimir “nombre de carpeta:” + nombre de carpeta
impresión ” ”

htmlDoc = abierto (nombre, “r +”)
soup1 = BeautifulSoup (htmlDoc)
para la etiqueta en soup1.findAll (‘a’, href = True):
si “Página en gamefromscratch.com” en la etiqueta [‘href’]:
pos1 = 0
pos1 = len (etiqueta [‘href’]) – 1
while tag [‘href’] [pos1]! = ‘/’:
pos1 = pos1-1
pos1 = pos1 + 1
t = “”
while pos1 t = t + etiqueta [‘href’] [pos1]
pos1 = pos1 + 1
etiqueta [‘href’] = urlsc + t

para la imagen en soup1.findAll (‘img’, src = True):
image_url = urlparse.urljoin (url, imagen [‘src’])
pos1 = 0
pos1 = len (imagen [‘src’]) – 1
while image [‘src’] [pos1]! = ‘/’ y pos1> = 0:
pos1 = pos1-1
pos1 = pos1 + 1
filename = “”
while pos1 filename = nombre de archivo + imagen [‘src’] [pos1]
pos1 = pos1 + 1
image [‘src’] = out_folder + filename
con = os.path.isfile (imagen [‘src’])
si con == Falso:
tratar:
outpath = os.path.join (out_folder, filename)
urlretrieve (image_url, outpath)
imprime “donwloading image:” + filename
excepto:
pasar

htmlDoc.close ()

página = sopa1.prettify (“utf-8”)
con abierto (nombre, ‘w’) como fid:
fid.write (página)

imprimir “página guardada”
impresión ” ”
impresión ” ”
excepto:
pasar

urls.pop (0)
para la etiqueta en soup.findAll (‘a’, href = True):
etiqueta [‘href’] = urlparse.urljoin (url, etiqueta [‘href’])
si “la página en http: //www.gamedev se hizo fácil … ish. La programación del juego comienza aquí./page/Game-From-Scratch-CPP-Edition-” en la etiqueta [‘href’] y la etiqueta [‘href’] no en visitado:
urls.append (etiqueta [‘href’])
visitado.append (etiqueta [‘href’])