php抓取网页指定位置内容 并替换部分内容
php抓取网页指定位置内容的案例代码
<?php //https-cur function curl($url){ $ch=curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是 curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); $data=curl_exec($ch); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,5); curl_setopt($ch,CURLOPT_REFERER,$url); curl_close($ch); return $data; } $url = '这里是要抓取的页面网址'; $info= curl($url); preg_match('/url=\'(.*?)\';//想抓的位置 var/iUs',$info,$m); $url1 = $m[1];//抓到的内容还想继续处理不要打印出来 $url2 = "https://网址$url1";//这里多种用法不添加符号可以直接使用$url1,加符号必须是双引号 $info= curl($url2); preg_match('/"url": "(.*?)"[^>]*视频链接/iUs',$info,$p);//处理内容的位置 print_r($p[1]);//打印出来 ?>
不知道是否能够返回值,可以使用print_r(要打印的内容)进行查询是否有数据值,以上内容可以无限循环处理。
还有就是有时候php网页抓取乱码问题,下面这一行代码可以解决。
<?php header("Content-type: text/html; charset=gbk");//第一个办法,添加这行代码,可以解决乱码这个问题,抓取的网页编码是什么就填写什么,有时候会失败 function curl($url){ $ch=curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是 curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); $data=curl_exec($ch); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,5); curl_setopt($ch,CURLOPT_REFERER,$url); curl_close($ch); return $data; } error_reporting(0); $url = empty($_GET['url']) ? $_GET['vid'] : $_GET['url'];//这里是获取内容的网址 $info= curl($url); $info = mb_convert_encoding($info, 'utf-8','GBK');//这里是对网页进行转码,推荐使用这个,意思是GBK转utf-8 preg_match('/开始位置(.*?)结束位置/iUs',$info,$m);//这里是获取内容的位置 print_r($m[1]);?>
最简单的抓取代码
<?php function curl($url){ $ch=curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是 curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); $data=curl_exec($ch); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,5); curl_setopt($ch,CURLOPT_REFERER,$url); curl_close($ch); return $data; } error_reporting(0); $url = empty($_GET['url']) ? $_GET['vid'] : $_GET['url'];//这里是获取内容的网址 $info= curl($url); preg_match('/开始的位置(.*?)结束/iUs',$info,$m);//这里是获取内容的位置 print_r($m[1]); ?>
上面的(.*?)是你要获取的内容。
如果想替换抓取到的内容某个关键词,可以直接添加如下代码;
str_replace("你想要替换掉的关键词比如 资源库","替换成功的关键词",$output);
可以灵活使用,下面列出完整代码;
<?php /** * 用cURL抓取网页信息并替换部分内容 * User: Ollydebug * Date: 2015/11/11 * Time: 19:13 */ $curlobj = curl_init(); //初始化 curl_setopt($curlobj,CURLOPT_URL,"http://www.baidu.com"); //设置访问网页的URL curl_setopt($curlobj,CURLOPT_RETURNTRANSFER,true); //执行之后不直接打印出来 $output = curl_exec($curlobj); curl_close($curlobj); echo str_replace("要替换的关键词","你要代替的关键词",$output); ?>