Python, мультипотоки, выбирает веб-страницы, загружает веб-страницы

Я хочу обработать dowload веб-страницы в пакетном режиме в одном сайте. В моем файле 'urls.txt' существует 5 000 000 ссылок URL. Это о 300M. Как делают, мультипотоки связывают эти URL и dowload эти веб-страницы? или Как пакет dowload эти веб-страницы?

мои идеи:

with open('urls.txt','r') as f:
    for el in f:
        ##fetch these urls

или скрученный?

Существует ли хорошее решение для него?

5
задан Artjom B. 4 September 2015 в 17:44
поделиться

4 ответа

Сначала проанализируйте свой файл и подтолкните URL-адреса в очередь, затем выполните 5-10 рабочие резьбы, чтобы вытащить URL из очереди и загрузить. Очередь - твой друг с этим.

1
ответ дан 14 December 2019 в 19:13
поделиться

Определенно скачивая 5M веб-страницы в одном Go - не хорошая идея, потому что вы максимально проведите много вещей, включая вашу пропускную способность сети и файловые дескрипторы вашей ОС. Я бы пошел в партии 100-1000. Вы можете использовать Urllib.urlopen, чтобы получить сокет, а затем просто прочитать () на несколько потоков. Вы можете использовать Select.Select. Если это так, то перейдите вперед и загрузите все 1000 одновременно и распределите каждый файл дескриптор, который выберите Возврат, чтобы сказать 10 рабочие потоки. Если выберите не будет работать, а затем ограничьте свои партии до 100 загрузок и используйте один поток на загрузку. Конечно, вы не должны начать более 100 потоков, так как ваша ОС может взорвать или хотя бы пойти немного медленно.

1
ответ дан 14 December 2019 в 19:13
поделиться

Скрипт WGET, вероятно, простейший, но если вы ищете робот, вытрясающий решение, проверьте Scrapy

0
ответ дан 14 December 2019 в 19:13
поделиться

Если это не является частью более крупной программы, то идея NOTNOP об использовании некоторых существующих инструментов для достижения этого является довольно хорошим. Если цикл оболочки, вызывающий WGET, решает вашу проблему, это будет намного проще, чем все, что касается более настраиваемого разработки программного обеспечения.

Однако, если вам нужно получить эти ресурсы как часть большей программы, то делая его с оболочкой, может быть не идеальной. В этом случае я настоятельно рекомендую вытеснить, что облегчает многочисленные запросы параллельно.

Несколько лет назад я записал пример того, как это сделать. Посмотрите http://jcalderone.livejournal.com/24285.html .

3
ответ дан 14 December 2019 в 19:13
поделиться
Другие вопросы по тегам:

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