今天在用帝国cms采集时,采集规则都写好了,可以正常获取到列表页链接,在预览内容是提示‘采集页面打不开’,检查了一下规则,并没有问题。
经过调试之后发现 请求对方的网站返回的是false。
问题定位在了 /e/class/cjfun.php中 ViewGetNewsInfo函数中,$info=ReadFiletext($newspage);这个地方。猜想是对方的网站做了防采集设置。
解决方法
1.我们自定义一个请求方法,伪装ip,浏览器去访问,将函数放到/e/class/connect.php 中代码如下:
function pretendIpData($url){
// 给与IP 段
$data = array(
119.120.'.'.rand(1,255).'.'.rand(1,255),
124.174.'.'.rand(1,255).'.'.rand(1,255),
116.249.'.'.rand(1,255).'.'.rand(1,255),
118.125.'.'.rand(1,255).'.'.rand(1,255),
42.175.'.'.rand(1,255).'.'.rand(1,255),
124.162.'.'.rand(1,255).'.'.rand(1,255),
211.167.'.'.rand(1,255).'.'.rand(1,255),
58.206.'.'.rand(1,255).'.'.rand(1,255),
117.24.'.'.rand(1,255).'.'.rand(1,255),
203.93.'.'.rand(1,255).'.'.rand(1,255),
);
//随机获取一个IP地址
$ip = $data[array_rand($data)];
//模拟来源网址
$referUrl = "http://www.baidu.com";
$agentArray=[
//PC端的UserAgent
"safari 5.1 – MAC"=>"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",
"safari 5.1 – Windows"=>"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
"Firefox 38esr"=>"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0",
"IE 11"=>"Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3; rv:11.0) like Gecko",
"IE 9.0"=>"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0",
"IE 8.0"=>"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)",
"IE 7.0"=>"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)",
"IE 6.0"=>"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)",
"Firefox 4.0.1 – MAC"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
"Firefox 4.0.1 – Windows"=>"Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
"Opera 11.11 – MAC"=>"Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11",
"Opera 11.11 – Windows"=>"Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11",
"Chrome 17.0 – MAC"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
"傲游(Maxthon)"=>"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)",
"腾讯TT"=>"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)",
"世界之窗(The World) 2.x"=>"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)",
"世界之窗(The World) 3.x"=>"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; The World)",
"360浏览器"=>"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)",
"搜狗浏览器 1.x"=>"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)",
"Avant"=>"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser)",
"Green Browser"=>"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)",
];
$userAgent=$agentArray[array_rand($agentArray,1)]; //随机浏览器userAgent
$header = array(
'CLIENT-IP:'.$ip,
'X-FORWARDED-FOR:'.$ip,
); //构造ip
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url); //要抓取的网址
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl, CURLOPT_REFERER, $referUrl); //模拟来源网址
curl_setopt($curl, CURLOPT_USERAGENT, $userAgent); //模拟常用浏览器的userAgent
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
$info = curl_exec($curl);
return $info;
}
2.把/e/class/cjfun.php 中的ReadFiletext函数 替换成 pretendIpData (查找一下,一共有三处地方),代码如下:
//$text1=ReadFiletext($dourl);
$text1=pretendIpData($dourl);
推荐教程:帝国CMS教程 下载地址: 帝国CMS系统如何自动生成sitemap.xml网站地图的详细教程和源代码 帝国CMS网站不同会员组的会员显示不同内容的实现 |