每天写技术文章很累也很烦,如果能采集数据就简单多了,今天实践一下如何采集PHP中文网的数据,只是用于测试最好还是以自己的原创文章为主哦。我只是提供PHP采集编程代码的思路和方法,不推荐用这种方法充实自己内容。
自己首先想到的是用正则表达式提取title和内容,但今天换一个方法,采用截取指定字符串出现的位置标记进行截取。
PHP采集指定网址数据的具体代码:
<? function get_between($input, $start, $end) {//提取内容 $substr = substr($input, strlen($start)+strpos($input, $start),(strlen($input) - strpos($input, $end))*(-1)); return $substr; } function get_between_replace($input, $start, $end, $fangshi) {//提取范围内的内容替换 fangshi=1,替换本身,0,不替换本身 $conne_str = substr($input, strlen($start)+strpos($input, $start),(strlen($input) - strpos($input, $end))*(-1)); if ($fangshi==1){ $conne_str = str_replace($start,'',$conne_str); $conne_str = str_replace($end,'',$conne_str); } return $conne_str; } function getSslPage($url) { $ch = curl_init(); $header = array ( 'User-Agent: Mozilla/5.0 (Windows NT 5.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36','X-FORWARDED-FOR:154.125.25.15', 'CLIENT-IP:154.125.25.15' ); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);// 跳过证书检查 curl_setopt($ch, CURLOPT_HTTPHEADER, $header); //构造用户IP curl_setopt($ch, CURLOPT_REFERER, "https://www.baidu.com/");//构造来路 curl_setopt($ch, CURLOPT_HEADER, false);//获取Header curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); $result = curl_exec($ch); curl_close($ch); return $result; } //读取HTML内容 $get_url = " //被采集文章的指定链接地址 $get_htm = getSslPage($get_url); $v_title = get_between($get_htm, "<h1>", "</h1>");//截取标记,开始和结尾 echo "文章标题:".$v_title; echo "<br />"; $v_content = get_between($get_htm, "<div class='content'>", "<p>本篇文章就是");//截取标记,开始和结尾 $v_content = str_replace('<div class="contentsignin">登录后复制</div>','',$v_content); //替换删除 $v_content = get_between_replace($v_content,'<blockquote>','</blockquote>',1); $v_content = str_replace('<span class="content_article_viewer_show">','<p>',$v_content); //调整PHP100中的BUG,span与P不对应 $v_content = str_replace('<code style="position:relative; padding:0px; margin:0px;">','<code>',$v_content); //清除格式 $v_content = str_replace('<p>','<p style="text-indent: 2em; text-align: left;">',$v_content); //增加缩进格式 $pattern_img='/<\s*img\s+[^>]*?src\s*=\s*(\'|\")(.*?)\\1[^>]*?\/?\s*>/i';//正则过滤图片 $v_content = preg_replace($pattern_img, '', $v_content); $v_content = str_replace('<p style="text-align: center;"></p>','',$v_content); //替换删除 echo "文章内容:".$v_content; ?>