爬虫相信大家并不陌生,说到爬虫大家可能第一时间想到的是python,但是php作为爬虫抓取数据也是很不错的,下面让我为大家说说怎么操作。
1、获取整个数据:
可以通过file_get_contents和curl来获取网页的信息。
file_get_contents案例:
$content = file_get_contents("要爬取的网址");
curl案例:
$url = "要爬取的网址";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true); // 从证书中检查SSL加密算法是否存在
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36');
curl_setopt($ch, CURLOPT_TIMEOUT,10);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,15);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_NOBODY,false);
$content = curl_exec($ch);
curl_close($ch);
curl模式好很多,一般推荐用这种模式。
2、获取指定的信息。
通过第一步后,我们会获取到整个页面的数据,把它存入一个变量$content里面,这时候我们需要就可以在这个变量里用正则表达式来获取我们的指定信息!
获取页面的标题案例:
preg_match("|<title>(.*?)</title>|i", $content,$r);
$title = $r[1];
$title就是我们要获取的标题。当然,获取标题只是举例而已,你可以根据自己的需求获取其他的信息,比如手机号、微信号、qq号等等资料。
3、获取页面上的网址用于循环抓取
前面两步只抓取一个页面,如果要做到无限的爬虫效果,则要把页面上的链接保存下来存入数据库内,做循环的抓取。
也是用到正则,直接上代码:
$site=substr($url,0,strpos($url,"/",8));
$base=substr($url,0,strrpos($url,"/")+1);
$pattern="|href=['\"]?([^ '\"]+)['\" ]|U";
preg_match_all($pattern,$content, $regArr, PREG_SET_ORDER);
for($i=0;$i<count($regArr);$i++){
if(!eregi("://",$regArr[$i][1]))
if(substr($regArr[$i][1],0,1)=="/")
$url_array[] = $site.$regArr[$i][1];
else
$url_array[] = $base.$regArr[$i][1];
else
$url_array[] = $regArr[$i][1];
}
$url_array就是链接的数组,然后通过foreach历遍数组存入数据库里面,每次调用一条数据来爬取数据,又存新的链接进去,就可以做到无限循环抓取下去了。
有什么疑问和不懂的地方,欢迎在评论区留意交流!