Я создал веб-синтаксический анализатор, который сначала анализирует содержимое списка базовых URL-адресов, получает все их соответствующие подссылки, а затем выполняет итерацию по этим подсылкам, снова получает подсылки этих подссылок и так далее.Я хочу применить многопроцессорность или многопоточность, чтобы я мог распараллеливать вызовы запроса.Поскольку многопоточность разделяет один и тот же объект памяти, я перешел к многопоточности.К сожалению, у меня возникла проблема, которая может быть вызвана несколькими вызовами URL-адресов, полученных из одного и того же родителя для потока?Кто-нибудь знает, как лучше распараллелить мой веб-парсер, не сталкиваясь с приведенной ниже ошибкой.
Это ошибка, которую я получаю:
Error HTTPSConnectionPool(host='www.facebook.com', port=443): Max retries exceeded with url: /dialog/share?app_id=132746074315&display=popup&href=https%3A%2F%2Fwww.engadget.com%2F2018%2F09%2F28%2Fepa-dissolve-science-advisory-office%2F (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7fc2a9132eb8>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution',)): Could not access this webpage: https://www.facebook.com/dialog/share?app_id=132746074315&display=popup&href=https%3A%2F%2Fwww.engadget.com%2F2018%2F09%2F28%2Fepa-dissolve-science-advisory-office%2F
Вот так я применяю многопоточность
def main(self):
self.getBaseURLs()
while self.idx <= self.drillDown:
urls = self.getURLs()
threads = [threading.Thread(target=self.crawlPages, args=(url,)) for url in urls]
for thread in threads:
thread.start()
for thread in threads:
thread.join()
# p = pool.ThreadPool(cpu_count()-1)
# p.map(self.crawlPages, urls)
# p.close()
# p.join()
self.idx += 1
self.urlCollection[self.idx] = self.sublinks
self.sublinks = []