Почему cURL загружает контент, отличный от источника просмотра моего браузера? - PullRequest
2 голосов
/ 04 января 2012

Я скачал эту страницу через cURL, и цена на странице ($ 118.09) не отображается в источнике через cURL. Когда я просматриваю источник на той же странице с помощью моего браузера (Chrome), цена там. Все остальные атрибуты продукта находятся в источнике cURL (номер детали, описание, номер дела и т. Д.).

Есть мысли о том, что происходит?

Вот мои настройки cURL:

$options = array(
    CURLOPT_RETURNTRANSFER  => true,
    CURLOPT_HEADER          => false,
    CURLOPT_FOLLOWLOCATION  => true,
    CURLOPT_ENCODING        => "",
    CURLOPT_AUTOREFERER     => true,
    CURLOPT_CONNECTTIMEOUT  => 10,
    CURLOPT_TIMEOUT         => 5,
    CURLOPT_MAXREDIRS       => 5,
    CURLOPT_USERAGENT       => "http://www.industrycortex.com/crawler.php"
);

ПРИМЕЧАНИЯ:

Было отмечено, что этот сайт не отображает цену (см. Скриншот ниже), пока пользователь не заходит / home. Я проверил это, и это правильно. Веб-сайт создает файл cookie, который я не передавал вместе с cURL. Кроме того, веб-сервер отслеживает, посещал ли идентификатор сеанса пользователя / home, и показывает цены, только если этот идентификатор сеанса имеет. Файл cookie, созданный при посещении / home, идентичен файлу cookie, созданному на любой другой странице.


enter image description here

Ответы [ 4 ]

2 голосов
/ 04 января 2012

Я попытался немного осветить этот вопрос в разделе 14 документа Искусство написания сценариев HTTP-запросов с использованием Curl . Сайты могут выполнять всевозможные проверки и логику, которые будут отличаться при «простом» использовании скручивания по сравнению с использованием браузера.

Ваша задача - записать сеанс браузера (с помощью чего-то вроде LiveHTTPHeaders или Firebug ), а затем поработать над тем, чтобы использование скручивания и командная строка имитировали вид сеанса браузера как можно ближе. Это включает в себя пользовательский агент, источники ссылок и, вероятно, больше всего куки.

2 голосов
/ 04 января 2012

Цена, кажется, отображается после доступа к /home (без входа в систему) и возврата.Это странный механизм защиты, но его легко обойти.Все, что вам нужно, это сделать именно это с вашим сеансом cURL:

  1. Установите CURLOPT_COOKIEFILE и CURLOPT_COOKIEJAR в один и тот же файл (я могу ошибаться, если это требуется, но это, безусловно, не будетвред).
  2. Установите URL-адрес на http://www.quickscrews.com/home и выполните curl_exec ()
  3. Продолжите очистку.

Цена должна отображаться сейчас, если не установлен файл cookieс JS.В этом случае вам придется читать куки из вашего браузера и записывать их в CURLOPT_COOKIE.

PS Я предполагаю, что куки это sawRegPg=sawit;.Вы можете попробовать установить CURLOPT_COOKIE и посмотреть, что произойдет.

0 голосов
/ 27 сентября 2013

Я столкнулся с сайтом, на котором они отправляли контент с кодировкой gzip, который cURL не декодировал автоматически.Еще одна вещь, которая может помочь, - это получить пользовательский агент вашего браузера, посетив http://www.whatsmyuseragent.com/ и затем использовать его как часть своей команды.

curl -A "USER_AGENT" "URL_YOU_NEED_TO_GET" |gzip -d> out.html

Я понимаю, что проблема в конкретном случае была с файлами cookie, и, вероятно, не в командной строке, но я столкнулся с этой проблемой, когда пытался выяснить, что я думаюто же самое и добавление gzip -d определенно исправило это для меня.

0 голосов
/ 04 января 2012

Некоторые сайты по-разному отображают свои страницы для браузера и сканера.Вы пытались установить другого агента пользователя в cURL?

Редактировать: Я не вижу цену на странице.Возможно, вы вошли в систему и видите цену, поэтому cURL (и я) не авторизованы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...