我已经通过cURL下载了this page,并且页面上的价格($ 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之前,此网站不会显示价格(请参阅下面的屏幕截图)。我测试了这个,这是正确的。该网站生成一个我没有通过cURL传递的cookie。此外,网络服务器跟踪用户的会话ID是否已访问/家庭,并且仅显示该会话ID具有的价格。访问/ home生成的cookie与任何其他页面生成的cookie相同。
答案 0 :(得分:2)
我试图在The Art Of Scripting HTTP Requests Using Curl文档的第14部分中稍微讨论这个问题。与您使用浏览器相比,网站可以执行各种检查和逻辑,与“普通”卷曲使用情况不同。
然后,您的工作是记录浏览器会话(使用类似LiveHTTPHeaders或Firebug的内容),然后尽可能地使您的curl用法和命令行模仿浏览器会话的外观。这包括用户代理,推荐人以及可能最重要的cookie。
答案 1 :(得分:2)
在您访问/home
(未登录)并返回后,价格似乎显示出来。这是一种奇怪的保护机制,但它很容易被规避。您只需要在cURL会话中完成这一切:
CURLOPT_COOKIEFILE
和CURLOPT_COOKIEJAR
设置为同一个文件(我可能错误地认为它是必需的,但它肯定不会有害)。http://www.quickscrews.com/home
并执行curl_exec()价格现在应该显示,除非使用JS设置cookie。在这种情况下,您必须从浏览器中读取Cookie并将其写入CURLOPT_COOKIE
。
P.S。我猜这个cookie是sawRegPg=sawit;
。您可以尝试将CURLOPT_COOKIE
设置为该值,然后查看会发生什么。
答案 2 :(得分:0)
某些网站针对浏览器和抓取工具呈现不同的网页。您是否尝试在cURL中设置其他用户代理?
修改强> 我看不到页面上的价格。可能是您已登录并因此可以看到价格而且cURL(和我)未登录。
答案 3 :(得分:0)
我遇到了他们用gzip编码发送内容的网站,cURL没有自动解码。另一件可以帮助的事情是通过访问http://www.whatsmyuseragent.com/然后将其作为命令的一部分来获取浏览器的用户代理。
curl -A“USER_AGENT”“URL_YOU_NEED_TO_GET”| gzip -d> out.html
我理解特定情况下的问题是使用cookie,可能不是命令行卷曲,但是当我试图弄清楚我认为是同样的事情并添加gzip -d时,我遇到了这个问题为我修好了。