/ / Rastreador web con multiprocesamiento en Python 3 - python, python-3.x, cola, multiprocesamiento, rastreador web

Web Crawler con multiprocesamiento en Python 3: python, python-3.x, cola, multiproceso, web-crawler

Básicamente estoy tratando de obtener los mismos resultados queEl código de abajo, pero utilizando multiprocesamiento. El siguiente código es un rastreador web básico que imprime todas las URL dentro de un sitio web determinado. Quiero poder verificar las nuevas URL de varios sitios a la vez utilizando múltiples procesos. Tengo un script de web scraping separado que usa pools y apply_async para raspar varios sitios a la vez, pero empiezo con una lista estática de URL. Y luego tengo este script que itera a través de un sitio a la vez para obtener una lista completa de URL no duplicadas. Sin embargo, no puedo averiguar cómo obtener lo mejor de ambos mundos. Debido a que mi lista de URL no es estática (se está agregando a medida que se encuentran nuevas URL), no sé cómo iterar a través de ella y devolver resultados utilizando apply_async.

He leído y siento que las colas pueden ser unaClave para la solución, pero lo he intentado todo y no puedo hacerlo funcionar. Lo siento por la explicación de mierda. Todavía soy bastante nuevo en Python. ¿Puede alguien ayudarme?

import lxml.html
import requests

url = "http://www.frontiercouriers.com"
url_check = "frontiercouriers.com"
urls = [url]
visited = [url]

while len (urls) >0:
try:
site_open = requests.get(urls[0])
soup = lxml.html.fromstring(site_open.text)

urls.pop(0)

for href in soup.xpath("//a/@href"):
if "http" in href:
site = href
elif href.startswith("/"):
site = str(url+href)
else:
site = str(url+"/"+href)

if url_check in site and site not in visited:
urls.append(site)
visited.append(site)
print (site)

except Exception as e:
print ("n"+str(e))
print (urls[0])
urls.pop(0)

Respuestas

1 para la respuesta № 1

parece áspero puede adaptarse perfectamente a sus necesidades, llama a las urls en paralelo, tiene una cola dentro para acumular solicitudes e incluso tiene capacidades de xpath incorporadas, y la mejor parte es que está haciendo todo esto sin multiprocesamiento mediante el uso de la programación asíncrona biblioteca trenzada


1 para la respuesta № 2

Aún mejor sería utilizar Asyncio Python3 / aiohttp. Es no bloqueante, puede obtener múltiples urls al mismo tiempo sin la necesidad de crear hilos o el uso de marcos retorcidos (recortes). Revisa este enlace