这次双十一之后,发现淘宝更改了屏蔽策略,直接抓取店铺会被跳转到登陆页面。
本来是准备把抓取核心迁移到selenium,各部分都准备好了,Demo也测试成功了,但是巧合的是在调试的过程中发现从$refer = “http://login.m.taobao.com/login.htm?tpl_redirect_url=http://m.taobao.com”; 这个地址跳转到店铺不会被强制验证登陆。
那就好办了,只要对原来的抓取函数做一些修正,在原本直接抓取的基础上,模拟一次跳转。
经过测试,发现这个方案可行。不过每个小时只能抓取50家店铺,和原来一样。
不过作为一个能用就好的人,只要能凑合,就不去折腾了。下一次更新估计会把抓取核心迁移到selenium,顺便抽空把V2的店铺更新功能写掉。
PHP实现
function anftools_curlGetHtml($inputUrl){
if(!empty($inputUrl))
$url = $inputUrl;
else
return false;
//设置cookies
$cookie_jar = dirname(__FILE__)."/pic.cookie";
$refer = "http://login.m.taobao.com/login.htm?tpl_redirect_url=http://m.taobao.com";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $refer);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);
$content = curl_exec($ch);
curl_close($ch);
//初始化
$ch = curl_init();
//设置选项,包括URL
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar);
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_USERAGENT, "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.2 (KHTML, like Gecko) Chrome/22.0.1216.0 Safari/537.2");
//执行并获取HTML文档内容
$output = curl_exec($ch);
//释放curl句柄
curl_close($ch);
if(!$output)
return false;
else
return $output;
}