今天尝试抓取AF美国官网数据,在抓取的过程中发现,网站会自动根据访问IP地址跳转到HK官网,导致抓取的网站内容变成了香港官网数据,遂采用cURL使用代理进行抓取。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
//初始化 $ch = curl_init(); //设置选项,包括URL curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //curl_setopt($ch, CURLOPT_REFERER, $refer); curl_setopt($ch, CURLOPT_HEADER, 0); //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查 //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在 curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_BASIC); //代理认证模式 curl_setopt($ch, CURLOPT_PROXY, "127.0.0.1"); //代理服务器地址 curl_setopt($ch, CURLOPT_PROXYPORT, 8088); //代理服务器端口 //curl_setopt($ch, CURLOPT_PROXYUSERPWD, ":"); //http代理认证帐号,username:password的格式 curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP); //使用http代理模式 curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"); //执行并获取HTML文档内容 $output = curl_exec($ch); //释放curl句柄 curl_close($ch); |
然后将cURL获得的结果 $output 代入PHP Simple HTML DOM Parser进行分析
1 2 |
//进行解析 $html = str_get_html($output); |
这里需要用到 str_get_html ( string $content ) 代替原来的 file_get_html ( string $filename )
最后抓取成功。
虽然平时上AF美国管网都是挂代理,但是一直没有想明白服务器端怎么进行代理抓取,这次尝试用cURL进行抓取,然后再交给分析程序,解决了直接用分析程序抓取出现的各种问题,这个方法也可以十分方便的抓取到一些受限的国外网站的数据。
PS:上海AF店这个月开业了,下次有空去瞧瞧。
There are no comments yet