как бороться с капчей при парсинге веб-страниц с помощью R

Я пытаюсь очистить данные с этого веб-сайта, используя httr и rvest. После нескольких сканирований (около 90–100) веб-сайт автоматически переведет меня на другой URL-адрес с помощью captcha.

это обычный URL: "https://fs.lianjia.com/ershoufang/pg1"

это URL-адрес капчи: "http://captcha.lianjia.com/?redirect=http%3A%2F%2Ffs.lianjia.com%2Fershoufang%2Fpg1"

Когда мой паук переходит по URL-адресу капчи, он говорит мне остановиться и решить его в браузере. Потом решаю вручную в браузере. Но когда я запускаю паука и отправляю GET запрос, паук по-прежнему переводится на URL-адрес капчи. Между тем в браузере все идет нормально, даже если я ввожу URL-адрес капчи, он вернет меня обратно на обычный URL-адрес в браузере.

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

Я размышлял,

  1. Правильно ли я использую прокси?
  2. Почему паук продолжает переноситься, а браузер - нет. Они с одного IP.

Спасибо.

Это мой код:

a <- GET(url, use_proxy(proxy, port), timeout(10),
          add_headers('User-Agent' = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',
                      'Connection' = 'keep-alive',
                      'Accept-Language' = 'en-GB,en;q=0.8,zh-CN;q=0.6,zh;q=0.4,en-US;q=0.2,fr;q=0.2,zh-TW;q=0.2',
                      'Accept-Encoding' = 'gzip, deflate, br',
                      'Host' = 'ajax.api.lianjia.com',
                      'Accept' = '*/*',
                      'Accept-Charset' = 'GBK,utf-8;q=0.7,*;q=0.3',
                      'Cache-Control' = 'max-age=0'))
b <- a %>% read_html %>% html_nodes('div.leftContent') %>% html_nodes('div.info.clear') %>% 
            html_nodes('div.title') %>% html_text()

Наконец, я обратился к RSelenium, он медленный, но никаких капч. Даже когда она появляется, я могу решить ее прямо в браузере.


person rankthefirst    schedule 19.09.2017    source источник
comment
Это намеренная функция веб-сайта, которая хочет контролировать, как вы используете их данные. Как только вы очистите кодировку в своем браузере, у него будет файл cookie, который он хранит. В вашем сценарии R нет такого ключа, который можно было бы показать при возврате, поэтому он снова получает капчу. И это имеет смысл, что сайт работает таким образом, потому что злонамеренные сценарии на вашем компьютере могут попытаться использовать ваш IP-адрес для очистки (или даже кражи) данных и отправки их в другое место .... это защита сайта от такого поведения. Вам следует изучить условия сайта, чтобы убедиться, что вы не нарушаете их путем соскабливания.   -  person sconfluentus    schedule 19.09.2017


Ответы (1)


Вы получаете CAPTCHA, потому что таким образом веб-сайт пытается предотвратить удаление своих данных нечеловеческими / программными скриптами. Итак, когда вы пытаетесь очистить данные, он определяет вас как нечеловеческий / роботизированный скрипт. Причина, по которой это происходит, потому что ваш скрипт очень часто отправляет GET-запрос вместе с некоторыми данными параметров. Ваша программа должна вести себя как настоящий пользователь (посещение веб-сайта в случайном порядке, разные браузеры и IP).

Вы можете избежать получения CAPTCHA, манипулируя этими параметрами, как показано ниже. Итак, ваша программа будет выглядеть как настоящий пользователь:

  1. Использовать случайность при отправке запроса GET. Например, вы можете использовать функцию Sys.sleep (использовать случайное распределение) для сна перед отправкой каждого запроса GET.

  2. Управляйте данными пользовательского агента (Mozilla, Chrome, IE и т. Д.), Приемом файлов cookie и кодированием.

  3. Управление исходным местоположением (IP-адрес и информация о сервере)

Манипулирование этой информацией поможет вам каким-то образом избежать проверки CAPTACHA.

person Santosh M.    schedule 19.09.2017