cURL图像刮刀被重定向?

时间:2014-09-16 15:16:06

标签: php redirect curl web-crawler scraper

我在这里有一个功能,试图使用cURL从网页抓取图像。它适用于大多数网站,但也有一些重定向脚本的方式。在我的代码中用作示例的网站会将脚本重定向到其网页上的特定页面。如果我禁用重定向或使用CURLOPT_MAXREDIRS限制它,我没有返回任何内容......我在这里做错了什么?

            function curl($url){

                $headers[]  = "User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 
                    rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13";
                $headers[]  = "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,
                    */*;q=0.8";
                $headers[]  = "Accept-Language:en-us,en;q=0.5";
                $headers[]  = "Accept-Encoding:gzip,deflate";
                $headers[]  = "Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.7";
                $headers[]  = "Keep-Alive:115";
                $headers[]  = "Connection:keep-alive";
                $headers[]  = "Cache-Control:max-age=0";

                $curl = curl_init();
                curl_setopt($curl, CURLOPT_URL, $url);
                curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
                curl_setopt($curl, CURLOPT_ENCODING, "gzip");
                curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
                curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
                curl_setopt($curl, CURLOPT_COOKIESESSION, true );
                curl_setopt($curl, CURLOPT_COOKIEJAR, dirname(__FILE__).'/cookie.txt' );
                curl_setopt($curl, CURLOPT_COOKIEFILE, dirname(__FILE__).'/cookie.txt' );
                //curl_setopt($curl, CURLOPT_MAXREDIRS, 1);

                $data = curl_exec( $curl );
                //$header = curl_getinfo( $curl );

                curl_close($curl);

                return $data;   
            }

            $data = curl( "http://www.missselfridge.com/en/msuk/product/dress-shop-299048/view-all-299126/dark-floral-panel-midi-dress-3273361" );
            $images = array();
            preg_match_all('~<img.*?src=["\']+(.*?)["\']+~', $data, $images);

            ...
            //then for each image in images, is displayed in html.

我的浏览器标题@Samuel Fullman

响应标头

CACHED_RESPONSE true
Cache-Control   max-age=0, no-cache, no-store
Connection  keep-alive
Content-Encoding    gzip
Content-Language    en-US
Content-Length  17121
Content-Type    text/html; charset=UTF-8
Date    Tue, 16 Sep 2014 16:27:42 GMT
Expires Tue, 16 Sep 2014 16:27:42 GMT
Pragma  no-cache
Vary    Accept-Encoding

请求标题

Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Cache-Control   max-age=0
Connection  keep-alive
Cookie ...
Host    www.missselfridge.com
User-Agent  Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0

1 个答案:

答案 0 :(得分:0)

HTTP-REFERRER可能不是他们自己的页面之一,因此限制了您的访问。我的标题中没有显示任何引荐来源值。

那就是说,你确实有办法解决这个问题。显然,你有一个有效的网站,并且不起作用。对于不起作用的网站,您可以在浏览器中查看图片网址吗?如果没有,那么URL本身可能是坏的(不要排除它)。如果可以,请比较浏览器中发送和接收的标头(通过Firebug或其他应用程序)并进行比较。