Comments 16
Просто и подробно о сложном — это о статье
А потом банят на неделю за слишком большую частоту запросов.
Для многопоточного парсинга я бы рекомендовал Scrapy. У нее внутри twisted
, код будет менее многословным, чем кастомное решение на bs4
и шататных питоновских возможностях работы с потоками/процессами. К тому же работа с разметкой там гораздо лаконичнее. Как-то на работе появилась задача напистать скрипт для периодического парсинга примерно 20 ресурсов на предмет упоминаний о компании клиента. Со scrapy
получилось уложиться в несколько часов.
И позвольте на минуту включить зануду и немного покритиковать оформление кода. У вас импорты не по PEP8 оформлены. В кучу смешаны вендорные пакеты и встроеные. В функции get_all_links
зачем-то идут строки очистки файла, но, судя по названию, её задача — вытащить ссылки с главной страницы. Принцип одной отвественности говорит, что котлеты с рыбой смешивать не нужно. Да и все ссылки на сайты, имена файлов и подобное хорошо бы вынести вверх скрипта в константы. Если захотите сохранять результаты не в coin.csv
, а в foobar.csv
, то придется править код в двух местах. В небольшом скрипте такое, конечно, не критично, но в реальных прикладных проектах может сэкономить время и нервы коллег, поддерживающих ваш код
Scrapy однопоточный.
- Зачем вам многопоточность? Я не верю, что вы упираетесь в CPU.
- Почему вы пишете про многопоточность, но в коде используете
multiprocessing
? - Зачем писать это всё самому, когда есть Scrapy (как уже заметил комментатор выше)?
2017 год… А люди до сих пор используют блокирующий I/O для работы с сетью и плодят потоки, чтобы ждать ответа от сервера.
Реализация на Python многопоточной обработки данных для парсинга сайтов