PHP – 页面抓取与分析

一般我们收集资料的时候,尤其在网站中发现比较好的内容,我们需要另存为或者复制粘贴的方式来进行。我们的效率就会变的很低下,这次我们就来自己编写爬虫和页面的抓取并慢慢的进行优化。
比如我们拿CSDN来进行测试http://blog.csdn.net/mindfloating/article/details/71076570

Curl和simple_html_dom

我们通过PHP的Curl来进行远程页面内容的抓取。

<?php
#加载页面
function curl_get($url){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    $result = curl_exec($ch);
    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    if($code != '404' && $result){
        curl_close($ch);
        return $result;
    }
}
$URL = "http://blog.csdn.net/mindfloating/article/details/71076570";
$content = curl_get($URL);

查看源码我们知道文章的HTML格式。
我们使用simple_html_dom来完成,Github下载地址

<?php
include('simple_html_dom.php');
$URL = "http://blog.csdn.net/mindfloating/article/details/71076570";
$html = file_get_html($URL);
// 我们解析出来Title和正文内容
// Title link_title
// Content article_content
$title_arr = $html->find('.link_title');
$title_dom = new simple_html_dom();
$title = "";
foreach ($title_arr as $item) {
    $title_nodes = $title_dom->load($item->innertext);
    $title_link_arr = $title_nodes->find('a');
    if (count($title_link_arr) > 0) {
        $title = $title_link_arr[0]->innertext;
    }
}
echo "<h3>$title</h3>";
$article_content = "";
$article_content_arr = $html->find("#article_content");
foreach ($article_content_arr as $item) {
    $article_content = $item->innertext;
}
echo $article_content;

显示结果内容如下:

更换一个网址再次进行访问也是OK的http://blog.csdn.net/qq_25827845/article/details/52932234

页面外链获取与分析

我们获取页面HTML之后,可以过滤取的我们所需要的内容,例如:图片、URL这两个应该是比较常用的。我们来用另外一个小说网站来进行说明。

下图是这个网站的具体内容

我们这里主要抓取一下排行榜

通过分析页面我们知道百度小说月票榜单的id为monthTicketRankList。

<?php
include('simple_html_dom.php');
$URL = "http://www.zongheng.com/";
$html = file_get_html($URL);
$articles = $html->find("#monthTicketRankList");
foreach ($articles as $item) {
    $article_dom = new simple_html_dom();
    $article_dom->load($item->innertext);
    $urls = $article_dom->find("a");
    foreach ($urls as $url) {
        // 每一篇的文章
        $truely_url = $url->href;
        $article_html = file_get_html($truely_url);
        // 获取阅读按钮
        $start_url = $article_html->find("#readRecord");
        foreach ($start_url as $start_item) {
            $every_article_url = $start_item->href;
            $every_article_html = file_get_html($every_article_url);
            // 得到标题 (.tc txt)
            $arr_title = $every_article_html->find('.tc');
            // 得到内容 (.readtext)
            $arr_content = $every_article_html->find('.readtext');
            if (count($arr_title) > 0 && count($arr_content) > 0) {
                echo $arr_title[0]->innertext;
                echo $arr_content[0]->innertext;
            }
            $every_article_html->clear();
        }
        $article_html->clear();
    }
    $article_dom->clear();
}
$html->clear();

欢迎留言

avatar
  Subscribe  
Notify of