sanae

一个抓取百度搜索结果的php脚本
有点历史的东西了,不过用来爬东西时还是挺好用的。
扫描右侧二维码阅读全文
19
2016/02

一个抓取百度搜索结果的php脚本

有点历史的东西了,不过用来爬东西时还是挺好用的。

<?php
error_reporting(0);

@$keyword = $argv[1];
@$zpage = $argv[2];

if((!$keyword) or (!$zpage)){
	die('Require keyword and page');
}
$keyword = urlencode($keyword);

for($p=0;$p<$zpage;$p++){
	$url = 'http://www.baidu.com/s?wd='.$keyword.'&pn='.$p.'0';
	$txt = file_get_contents($url);

	preg_match_all('/(data)(-)(tools)(=)(\')(\{)("title")(:)(")((.+))(")(,)("url")(:)(")((.+))(")(\})(\')/i',$txt,$matches);

	for($i=0;$i<count($matches[0]);$i++){
		$json = str_replace('data-tools=','',$matches[0][$i]);
		$json = str_replace('\'','',$json);
		$data = json_decode($json,true);
		
		$ch  = curl_init();
		curl_setopt($ch, CURLOPT_URL, $data['url']);
		curl_setopt($ch, CURLOPT_HEADER, true);
		curl_setopt($ch, CURLOPT_NOBODY,true);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
		curl_setopt($ch, CURLOPT_AUTOREFERER,true);
		curl_setopt($ch, CURLOPT_TIMEOUT,5);
		curl_setopt($ch, CURLOPT_HTTPHEADER, array(  
		'Accept: */*',  
		'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)',
		'Connection: Keep-Alive'));
		$header = curl_exec($ch);
		curl_close($ch);
		$header = explode("\n",$header);
		$num = array_find($header,'Location:');
		$header = explode(': ',$header[$num]);
		$link = trim($header[1]);
		//if(stristr($link,'baidu.com')){
			//continue;
		//}
		//file_put_contents('baidu.txt',$data['title']."\r\n".$link."\r\n",FILE_APPEND);
		file_put_contents('baidu.txt',$link."\r\n",FILE_APPEND);
		$a = $i+1;
		echo $a.' Complete!'."\n";
	}
	$b = $p+1;
	echo 'Page'.$b.'Complete!'."\n";
}
echo 'Complete!'."\n";

function array_find($array,$word){
	foreach($array AS $num => $key){
		if(strpos($key,$word) !== false){
			return $num;
			break;
		}
	}
}
?>

用法:php script.php keyword pages

最后修改:2016 年 02 月 19 日 02 : 18 AM

发表评论