Java веб-скребок видит капчу
Я сделал веб-скребок для Google Scholar на Java с помощью JSoup. Скребок ищет ученого DOI и находит цитаты для этой статьи. Эти данные необходимы для исследования.
Но скребок работает только для первых запросов... После этого скребок встречает капчу на сайте ученого.
Однако, когда я открываю веб-сайт в моем браузере (Chrome), Google Scholar открывается нормально.
Как это возможно? Все заявки поступают с одного IP-адреса! До сих пор я пробовал следующие варианты:
- Выберите случайный пользовательский агент для запроса (из списка 5 пользовательских агентов)
- Случайная задержка между запросами от 5 до 50 секунд
- Используйте TOR-прокси. Однако почти все конечные узлы уже заблокированы Google
Когда я анализирую запрос, сделанный Chrome к Scholar, я вижу, что cookie используется с некоторыми идентификаторами сеансов. Вероятно, поэтому запросы Chrome не блокируются. Можно ли использовать этот файл cookie для запроса, сделанного с помощью JSoup?
Спасибо!
1 ответ
На ум приходят три вещи:
- Вы не сохраняете куки между запросами. Ваш первый запрос должен сохранить куки и передать его на сервер для следующего запроса (установка заголовка Referer также не помешает). Здесь есть пример.
- Если Google был хитрым, они могли видеть, что ваш первый запрос не загружал никакие css/js/images на страницу. Это верный признак того, что вы бот.
- Javascript делает что-то на странице, как только вы загрузили его.
Я думаю, что первый вариант наиболее вероятен. Вы должны попытаться скопировать столько заголовков, сколько вы видите в запросе от Chrome, в свой Java-код.