Новости

Як обійти капчу на платформі для парсинга сайтів Diggernaut: Вирішуємо Google reCaptcha v2

Гугл рекапча (reCaptcha v2) перестала бути проблемою для наших користувачів. Ми впровадили інтеграцію з популярним сервісів по обходу капчі Death By Captcha і тепер ваші скрапери можуть легко обходити найсучасніші капчи.

Давайте подивимося, як виглядає reCaptcha v2:

Якщо ви бачите саме таку капчу на сайті. який вам потрібно отпарсіть, то ця стаття вам обов'язково допоможе. Ми постараемя дати вам вичерпне керівництво на реальному прикладі, так, щоб ви змогли легко впровадити подібне рішення для вашого сайту. Ми ж будемо аналізувати довільні наступний сайт: http://www.receita.fazenda.gov.br/PessoaJuridica/CNPJ/cnpjreva/Cnpjreva_Solicitacao2.asp .

Для того, щоб використовувати цим функціоналом вам потрібно мати власний аккаунт в службі Death by Captcha . Їх послуги не безкоштовні, вартість рішення 100 капч становить приблизно 2.89 $ (ціна актуальна на 28.02.2018).

Рішення капчи відбувається автоматично, вам потрібно лише завантажити сторінку з капчі в ваш скрапер і викликати спеціальну команду captcha_resolve з певними параметрами:

prodiver: провайдер рішень для капчи, потрібно встановити значення deathbycaptcha.com
type: тип капчі, потрібно встановити значення nocaptchav2
username: ім'я користувача вашого облікового запису в системі death by captcha
password: пароль вашого облікового запису в системі death by captcha

УВАГА!!! Для того щоб капча цього типу була успішно вирішена, люди, які будуть вручну вирішувати вашу капчу повинні будуть це робити під тим же IP адресою, що використовує ваш парсер. Тому, єдиний варіант цього досягти - використовувати ВАШ ВЛАСНИЙ проксі СЕРВЕР в конфігурації вашого діггера. Наші штатні проксі сервера не можуть бути доступні з IP адрес, поза нашою основною мережі, тому штатні проксі просто не будуть працювати в цьому випадку. Надалі ми впровадимо спеціальний пул проксі серверів для цього завдання, але поки ви повинні будете використовувати свій проксі.

Базовий код нашого парсеру буде таким:

--- config: debug: 2 agent: Firefox proxy: ВАШ проксі ПОТРІБНО вставити СЮДИ do: # Ми будемо повторювати невдалий запит, тому пропишемо значення змінної, # яку буде використовувати опція repeat - variable_set: field: repeat value: "yes" # завантажуємо сторінку з капчі - walk: to: http://www.receita.fazenda.gov.br/PessoaJuridica/CNPJ/cnpjreva/cnpjreva_solicitacao2.asp repeat: do: # Вирішуємо капчу - captcha_resolve: provider: deathbycaptcha.com type: nocaptchav2 username ВАШЕ ІМ'Я КОРИСТУВАЧА В СЛУЖБІ DBC password: ВАШ ПАРОЛЬ В СЛУЖБІ DBC

Поки не запускайте ваш парсер, просто вивчіть код. Якщо капча вирішена успішно, токен буде збережений в змінній captcha. Тому, в першу чергу після рішення капчи ми повинні перевірити наявність токена в змінної. Якщо токен є, ми відключимо опцію repeat і передамо токен на сервер разом з іншими параметрами нашого запиту. Якщо токена немає, запит буде повторений, оскільки опція repeat встановлена ​​в «yes».

--- config: debug: 2 agent: Firefox proxy: ВАШ проксі ПОТРІБНО вставити СЮДИ do: # Ми будемо повторювати невдалий запит, тому пропишемо значення змінної, # яку буде використовувати опція repeat - variable_set: field: repeat value: "yes" # завантажуємо сторінку з капчі - walk: to: http://www.receita.fazenda.gov.br/PessoaJuridica/CNPJ/cnpjreva/cnpjreva_solicitacao2.asp repeat: do: # Вирішуємо капчу - captcha_resolve: provider: deathbycaptcha.com type: nocaptchav2 username ВАШЕ ІМ'Я КОРИСТУВАЧА в СЛУЖБІ DBC password: ВАШ ПАРОЛЬ в СЛУЖБІ DBC # Переходимо до блоку body - find: path: body do: # Читаємо значення змінної captcha в регістр - variable_get: captcha # Перевіряємо, не порожній чи у нас регістр - if : match: \ w + do: # Якщо не порожній, відключаємо repeat - variable_set: field: repeat value: "no" # Передаємо токен і інші параметри на сайт з якого ми збираємо інформацію. # В даному випадку ми намагаємося отримати дані про компанії по його ІПН (CNPJ) - walk: to: post: http://www.receita.fazenda.gov.br/PessoaJuridica/CNPJ/cnpjreva/valida_recaptcha.asp data: origem: comprovante cnpj: 05754558000186 g-recaptcha-response: submit1: Consultar search_type: cnpj do: - find: path: 'div # principal' do: - object_new: item - find: path: td: haschild (font: contains ( 'NÚMERO DE INSCRIÇÃO ')) b slice: 0 do: - parse - space_dedupe - trim - object_field_set: object: item field: registration_number - find: path: td: haschild (font: contains (' DATA DE ABERTURA ')) b slice: 0 do : - parse - space_dedupe - trim - object_field_set: object: item field: registration_date - find: path: td: haschild (font: contains ( 'NOME EMPRESARIAL')) b slice: 0 do: - parse - space_dedupe - trim - object_field_set: object: item field: company_name - find: path: td: haschild (font: contains ( 'CÓDIGO E DESCRIÇÃO DA ATIVIDADE ECONÔMICA PRINCIPAL')) b slice: 0 do: - parse - space_dedupe - trim - object_field_set: object: item field: primary_code - find: path: td: haschild (font: contains ( 'CÓDIGO E DESCRIÇÃO DAS ATIVIDADES ECONÔMICAS SECUNDÁRIAS')) b do: - parse - space_dedupe - trim - object_field_push: object: item field: secondary_codes - find: path: td: haschild (font: contains ( 'CÓDIGO E DESCRIÇÃO DA NATUREZA JURÍDICA')) b slice: 0 do: - parse - space_dedupe - trim - object_field_set: object: item field: legal_code - find: path: td: haschild (font: contains ( 'LOGRADOURO')) b slice: 0 do: - parse - space_dedupe - trim - object_field_set: object: item field: street - find: path: td: haschild (font: contains ( 'BAIRRO / DISTRITO')) b slice: 0 do: - parse - space_dedupe - trim - object_field_set: object: item field: district - find: path: td: haschild (font: contains ( 'MUNICÍPIO') ) b slice: 0 do: - parse - space_dedupe - trim - object_field_set: object: item field: municipal - find: path: td: haschild (font: contains ( 'TELEFONE')) b slice: 0 do: - parse - s pace_dedupe - trim - object_field_set: object: item field: phone - find: path: td: haschild (font: contains ( 'E-MAIL')) b slice: 0 do: - parse - space_dedupe - trim - object_field_set: object: item field: email - object_save: name: item

Якщо ви запустите цей парсер ви отримаєте наступний датасета

[{ "Item": { "company_name": "LIST - LOGISTICA INTEGRADA, SERVICOS E TRANSPORTES LTDA", "district": "COROADO", "legal_code": "206-2 - Sociedade Empresária Limitada", "municipal": " MANAUS "," phone ":" (92) 3622-7885 "," primary_code ":" 52.12-5-00 - Carga e descarga "," registration_date ":" 26/06/2003 "," registration_number ":" 05.754 .558 / 0001-86 "," secondary_codes ": [" 49.30-2-02 - Transporte rodoviário de carga, exceto produtos perigosos e mudanças, intermunicipal, interestadual e internacional "," 77.39-0-99 - Aluguel de outras máquinas e equipamentos comerciais e industriais não especificados anteriormente, sem operador "," 77.19-5-99 - Locação de outros meios de transporte não especificados anteriormente, sem condutor "," 52.29-0-99 - Outras atividades auxiliares dos transportes terrestres não especificadas anteriormente " , "49.30-2-01 - Transporte rodoviário de carga, exceto produtos perigosos e mudanças, municipal", "52.50-8-03 - Agenciamento de cargas, exceto para o transporte marítimo "]," street ":" R PROFESSORA RAYMUNDA MAGALHAES "}}]

Подібні рішення часто використовуються в сценаріях типу «Дані на вимогу». Коли користувач на вашому сайті вводить номер, ваш сайт приймає введення від користувача і робить запит на API платформи Diggernaut. Цей запит запускає дігер з переданим параметром і повертає зібрані дані назад на ваш сервер в режимі реального часу. А ваш сервер показує їх вашій користувачеві. Однак візьміть до уваги, що процес вирішення капчи може займати тривалий час, наприклад рішення reCaptcha v2 може займати більше 1 хвилини. Це потрібно враховувати при проектуванні вашої програми.

У будь-якому випадку, ми сподіваємося, що стаття була вам корисна і допоможе вам впровадити це рішення для вашого парсера. Ми плануємо додавати рішення для інших видів капчи, слідкуйте за оновленнями.

Уважаемые партнеры, если Вас заинтересовала наша продукция, мы готовы с Вами сотрудничать. Вам необходимо заполнить эту форму и отправить нам. Наши менеджеры в оперативном режиме обработают Вашу заявку, свяжутся с Вами и ответят на все интересующее Вас вопросы.

Или позвоните нам по телефонам: (048) 823-25-64

Организация (обязательно) *

Адрес доставки

Объем

Как с вами связаться:

Имя

Телефон (обязательно) *

Мобильный телефон

Ваш E-Mail

Дополнительная информация: