Версия v1.2.480 Основная причина запроса - разная рекламная выдача в зависимости от заголовка "Accept-Language". Предлагаю сделать умолчание для "Accept-Language". При изменении настройки парсера "Interface language", менять его на нужный, сделать возможность изменять вручную заголовок "Accept-Language"(чтобы можно было указывать более одного языка - "Accept-Language": "en-US,en;q=0.9,ru;q=0.8"). Также предлагаю изменить заголовки в сответствии с реальным браузером: Спойлер Код: "headers": { "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3", "Accept-Encoding": "gzip, deflate", "Accept-Language": "en-US,en;q=0.9", "Upgrade-Insecure-Requests": "1", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36" }, Код: $VAR1 = [ 'GET', 'https://www.google.com/search?q=buy%20car&ie=utf-8&oe=utf-8&num=10&hl=en', { 'do_gzip' => 1, 'headers' => { 'user-agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36', 'connection' => 'close', 'accept-encoding' => 'gzip, deflate', 'referer' => 'https://www.google.com/' }, 'attempt' => 4, 'decode' => 'auto-html', 'redirect_filter' => sub { "DUMMY" }, 'timeout' => '60', 'http2' => 0, 'max_size' => 524288 } ];
Значение заголовка Accept-Language не зависит от языка интерфейса Гугла (Interface language), ниже скриншоты: Спойлер: English interface language Спойлер: Spanish interface language Используемые в парсере заголовки подобраны таким образом, чтобы минимизировать количество банов и при этом сохранить правильность результатов.
Если я правильно понимаю вывод дебага в разделе "Parser Test", то парсер не шлет по умолчанию вообще заголовок Accept-Language, а так же стандартные заголовки, соответствующие используемому юзер агенту. Если такое поведение приводит к уменьшению банов, то я несколько удивлен, может, это некая "бага" на стороне Гугла. Я прочитал несколько раз ответ и так и не понял его посыл. В моем посте речь шла в первую очередь о: 1) приведение заголовков в "стандартный" вид 2) запрос был в первую очередь связан с разной рекламной выдачей ( Адсенс) в зависимости от заголовков браузера.
В SE::Google::Modern добавлен параметр Additional headers, который позволяет указывать любые собственные заголовки. Они будут использоваться для запросов, но в приоритете всегда те заголовки, которые прописаны в парсере и необходимы для получения корректного ответа. Например, если указать собственный user-agent, то он будет проигнорирован, т.к. будет использован user-agent, определенный параметром Device. Этот параметр позволяет задавать отсутствующие заголовки, о которых идет речь в сообщениях выше. Формат аналогичен такому же параметру в Net::HTTP, пример: Код: accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3 accept-encoding: gzip, deflate accept-language: en-US,en;q=0.9,ru;q=0.8 upgrade-insecure-requests: 1 Внимание! Использование дополнительных заголовков может повлиять на получаемый ответ и парсер может работать некорректно. @siventes просьба сообщить, насколько улучшился парсинг при использовании указанных выше заголовков Кроме этого, обновлены используемые юзерагенты и исправлен парсинг мобильной верстки.