«

采集PHP中文网的技术文章方法与实践

时间:2024-3-3 10:46     作者:韩俊     分类: PHP


每天写技术文章很累也很烦,如果能采集数据就简单多了,今天实践一下如何采集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;
?>


标签: php php教程

热门推荐