Кто то в последнее время парсил Linkedin? Есть ли какая-то защита? А то в robots.txt написано что парсеры они не любят.
Раскопал AJAX запрос по выводу вакансий, но он выводит только первую 1000, а потом падает в 400 код ошибки.
по моему, его только ленивый не парсил (и, да, это я и есть). то что их все кому не лень парсят - защита там наверняка есть. Самое меньшее - запасайся проксями :)
по моему, его только ленивый не парсил (и, да, это я и есть). то что их все кому не лень парсят - защита там наверняка есть. Самое меньшее - запасайся проксями :)
на такие объемы - только база. Даже, если работаешь одним пауком. И, кстати, да - скорее всего, надо писать свои мидлвари/пайпы. Помнится, у меня кэш дико тормозил на большом количестве страниц. Такое ощущение, что он кэширует что то при старте.
Михаил, а на чем бы вы посоветовали делать бд под очередь? Возьмем за исходные данные: 200к сайтов, в среднем загружаем по 1к УРЛов с каждого. Итого, около 200м УРЛов на итерацию обхода. 200м УРЛов со служебными данными (возьмем - 1килобайт на УРЛ) - около 200 Гб данных. Для эффективного обхода, класть/извлекать нужно с учетом приоритетов (ссылки "пагинации" каталогов в приоритете, например) и возможность извлекать УРЛы в рандомном порядке. Простая БД "ключ-значение" не подойдет - из неё не взять рандомно и не сделать выборку по приоритету.
Михаил, а на чем бы вы посоветовали делать бд под очередь? Возьмем за исходные данные: 200к сайтов, в среднем загружаем по 1к УРЛов с каждого. Итого, около 200м УРЛов на итерацию обхода. 200м УРЛов со служебными данными (возьмем - 1килобайт на УРЛ) - около 200 Гб данных. Для эффективного обхода, класть/извлекать нужно с учетом приоритетов (ссылки "пагинации" каталогов в приоритете, например) и возможность извлекать УРЛы в рандомном порядке. Простая БД "ключ-значение" не подойдет - из неё не взять рандомно и не сделать выборку по приоритету.
мне постгрес нравится, но, на вкус и цвет фломастеры разные :)
и откуда один килобайт служебки? 1. сам урл, обычно, не более 512 символов 2. несколько флажков, тип Byte 3. приоритет, скорее всего, не больше SmallInt.
поможет я и ошибаюсь, но, это, меньше чем 1024.
кстати, на таких объемах, по аккуратнее с индексами
про Redis пишут... мол, разделять задачу на 2 части: 1) новые УРЛы для обхода в одной БД, 2) проверка "обойден или нет" - на redis . В scrapy кстати на диске так и сделано - есть request.seen - где, похоже, хэши обойденных УРЛов, и сама очередь (сериализованные реквесты) по приоритетам в папках.
обходить десятки и сотни тысяч сайтов ) при этом, мне нужен download_delay на каждый домен. Попутно выяснил ещё, что и из списка start_urls (или из start_process, который возвращает генератор) scrapy берет первые N урлов (по кол-ву concurrent_requests) и, пока parse генерирует новые запросы, scrapy не берет следующий из генератора start_process. Другими словами, на входе даем 3000 сайтов, он взял 50, пошел обходить... и пока есть хотя бы 1 request в очереди для любого из этих 50 сайтов (а request'ы создаются вновь и вновь, по мере сбора ссылок), он не берет следующие 50 сайтов ))) в итоге, если, например, ограничить обход сайтов всего 100 УРЛами, то в первые 10 минут он работает нормально, а потом производительность падает до десятков УРЛов в минуту )))