Задать вопрос

Python многопоточный парсер пример?

Здравствуйте, есть задача открыть 100 000 урлов как можно быстрее, используюя при этом разные ip адреса
урлы храняться в массиве
urls = ['url1', 'url2',.....]
можно самые простой пример как это можно сделать параллельно выполняя запросы через разные ip и ставя паузу между запросами с одного ip
  • Вопрос задан
  • 2407 просмотров
Подписаться 8 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
@developinwed
Можно в треды пустить
from threading import Thread
import httplib, sys
from queue import Queue

urls = ['url1', 'url2',.....]
concurrent = 200

def doWork():
    while True:
        url = q.get()
        status, url = getStatus(url)
        doSomethingWithResult(status, url)
        q.task_done()

def getStatus(url):
    try:
        proxyRand = getRandProxy()
        conn = httplib.HTTPConnection(proxyRand["ip"], proxyRand["port"])
        conn.request("GET", url, headers={})
        res = conn.getresponse()
        return res.status, url
    except Exception as e:
        return e, url

def getRandProxy():
	return {
		"ip" : "127.0.0.1",
		"port" : 80
	}

def doSomethingWithResult(status, url):
    print(status, url)

q = Queue(concurrent * 2)
for i in range(concurrent):
    t = Thread(target=doWork)
    t.daemon = True
    t.start()
try:
    for url in urls:
        q.put(url.strip())
    q.join()
except KeyboardInterrupt:
    sys.exit(1)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы