2013-05-22 4 views
1

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

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

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

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

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

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

Спасибо!

ответ

2

Там три вещи, которые приходят на ум:

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

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

+1

Ваш первый пункт зафиксировал это! Я просмотрел запрос, сделанный Chrome, и скопировал все заголовки и значения файлов cookie в скребок JSoup. Спасибо! – user1255553

Смежные вопросы