Java веб-скребок видит капчу

Я сделал веб-скребок для Google Scholar на Java с помощью JSoup. Скребок ищет ученого DOI и находит цитаты для этой статьи. Эти данные необходимы для исследования.

Но скребок работает только для первых запросов... После этого скребок встречает капчу на сайте ученого.

Однако, когда я открываю веб-сайт в моем браузере (Chrome), Google Scholar открывается нормально.

Как это возможно? Все заявки поступают с одного IP-адреса! До сих пор я пробовал следующие варианты:

  • Выберите случайный пользовательский агент для запроса (из списка 5 пользовательских агентов)
  • Случайная задержка между запросами от 5 до 50 секунд
  • Используйте TOR-прокси. Однако почти все конечные узлы уже заблокированы Google

Когда я анализирую запрос, сделанный Chrome к Scholar, я вижу, что cookie используется с некоторыми идентификаторами сеансов. Вероятно, поэтому запросы Chrome не блокируются. Можно ли использовать этот файл cookie для запроса, сделанного с помощью JSoup?

Спасибо!

1 ответ

Решение

На ум приходят три вещи:

  1. Вы не сохраняете куки между запросами. Ваш первый запрос должен сохранить куки и передать его на сервер для следующего запроса (установка заголовка Referer также не помешает). Здесь есть пример.
  2. Если Google был хитрым, они могли видеть, что ваш первый запрос не загружал никакие css/js/images на страницу. Это верный признак того, что вы бот.
  3. Javascript делает что-то на странице, как только вы загрузили его.

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

Другие вопросы по тегам