Como desfazer várias páginas html em paralelo com beautifulsoup em python?

Eu estou fazendo um aplicativo de webscraping em Python com o framework web Django. Eu preciso descartar várias consultas usando a biblioteca beautifulsoup. Aqui está o instantâneo do código que escrevi:

for url in websites: r = requests.get(url) soup = BeautifulSoup(r.content) links = soup.find_all("a", {"class":"dev-link"}) 

Na verdade, aqui, o scraping da página da web está indo sequencialmente, eu quero executá-lo de forma paralela. Eu não tenho muita idéia sobre segmentação em Python. Alguém pode me dizer, como posso fazer sucata de forma paralela? Qualquer ajuda seria apreciada.

Você pode usar hadoop ( http://hadoop.apache.org/ ) para executar seus trabalhos em paralelo. Esta é a ferramenta muito boa para executar tarefas paralelas.

Experimente esta solução.

 import threading def fetch_links(url): r = requests.get(url) soup = BeautifulSoup(r.content) return soup.find_all("a", {"class": "dev-link"}) threads = [threading.Thread(target=fetch_links, args=(url,)) for url in websites] for t in thread: t.start() 

O download do conteúdo da página da web por meio de requests.get() é uma operação de bloqueio, e o threading do Python pode realmente melhorar o desempenho.

Se você quiser usar multithreading então,

 import threading import requests from bs4 import BeautifulSoup class Scrapper(threading.Thread): def __init__(self, threadId, name, url): threading.Thread.__init__(self) self.name = name self.id = threadId self.url = url def run(self): r = requests.get(self.url) soup = BeautifulSoup(r.content, 'html.parser') links = soup.find_all("a") return links #list the websites in below list websites = [] i = 1 for url in websites: thread = Scrapper(i, "thread"+str(i), url) res = thread.run() # print res 

isso pode ser útil

Quando se trata de python e raspagem, scrapy é provavelmente o caminho a percorrer.

O Scrapy está usando a biblioteca mertix trançada para o paralelismo, então você não precisa se preocupar com o threading e com o python GIL.

Se você deve usar beautifulsoap, verifique esta biblioteca