1. 程式人生 > >利用爬蟲爬取看看豆網站站的資料資訊

利用爬蟲爬取看看豆網站站的資料資訊

其實很早我就開始關注爬蟲技術,這兩天特別學習了一下,並且做了一個簡單的demo。爬取了看看豆網站的資料資訊。總共11751本書,爬取了不到3個小時,基本每秒爬取1條。速度慢的原因主要是單執行緒,使用mysql資料庫。想要提高速度的話可以使用多執行緒和redis。但是對於初學者來說只要能爬取下來就很不錯了。在這裡我使用了一個爬蟲框架---phpspider。

爬取完成後,我把資料從資料庫中導成.csv格式。由於我的資料比較少,所以我是直接excle中做的分析。按道理來說應該使用JS的ECharts做資料分析的。但是我的Node.JS還沒有學習過。所以先簡單的進行測試。另,我已經把自己的demo上傳到了github。

https://github.com/XiaoTommy/phpspider

附:


demo原始碼如下:

<?php
ini_set("memory_limit", "1024M");
require dirname(__FILE__).'/../core/init.php';

/* Do NOT delete this comment */
/* 不要刪除這段註釋 */

$configs = array(
    'name' => '看豆豆',
//    'log_show' => false,
    'tasknum' => 1,
    //'save_running_state' => true,
    'domains' => array(
        'kankandou.com',
        'www.kankandou.com'
    ),
    'scan_urls' => array(
        'https://kankandou.com/'
    ),
    'list_url_regexes' => array(
        "https://kankandou.com/book/page/\d+"
    ),
    'content_url_regexes' => array(
        "https://kankandou.com/book/view/\d+.html",
    ),
    'max_try' => 5,
    //'export' => array(
    //'type' => 'csv',
    //'file' => PATH_DATA.'/qiushibaike.csv',
    //),
    //'export' => array(
    //'type'  => 'sql',
    //'file'  => PATH_DATA.'/qiushibaike.sql',
    //'table' => 'content',
    //),
    'export' => array(
        'type' => 'db',
        'table' => 'kankandou',
    ),
    'fields' => array(
        array(
            'name' => "book_name",
            'selector' => "//h1[contains(@class,'title')]/text()",
            'required' => true,
        ),
        array(
            'name' => "book_content",
            'selector' => "//div[contains(@class,'content')]/text()",
            'required' => true,
        ),
        array(
            'name' => "book_author",
            'selector' => "//p[contains(@class,'author')]/a",
            'required' => true,
        ),
        array(
            'name' => "book_img",
            'selector' => "//div[contains(@class,'img')]/a/img",
            'required' => true,
        ),
        array(
            'name' => "book_format",
            'selector' => "//p[contains(@class,'ext')]",
            'required' => true,
        ),
        array(
            'name' => "book_class",
            'selector' => "//p[contains(@class,'cate')]/a",
            'required' => true,
        ),
        array(
            'name' => "click_num",
            'selector' => "//i[contains(@class,'dc')]",
            'required' => true,
        ),
        array(
            'name' => "download_num",
            'selector' => "//i[contains(@class,'vc')]",
            'required' => true,
        ),
    ),
);

$spider = new phpspider($configs);

$spider->on_handle_img = function($fieldname, $img)
{
    $regex = '/src="(https?:\/\/.*?)"/i';
    preg_match($regex, $img, $rs);
    if (!$rs)
    {
        return $img;
    }

    $url = $rs[1];
    $img = $url;

    //$pathinfo = pathinfo($url);
    //$fileext = $pathinfo['extension'];
    //if (strtolower($fileext) == 'jpeg')
    //{
    //$fileext = 'jpg';
    //}
    //// 以納秒為單位生成隨機數
    //$filename = uniqid().".".$fileext;
    //// 在data目錄下生成圖片
    //$filepath = PATH_ROOT."/images/{$filename}";
    //// 用系統自帶的下載器wget下載
    //exec("wget -q {$url} -O {$filepath}");

    //// 替換成真是圖片url
    //$img = str_replace($url, $filename, $img);
    return $img;
};


$spider->start();

分析資料:我只是簡單的統計了一下,重點不是在這裡。其中點選次數和下載次數有點小錯誤,暫時還在排查錯誤中。



其中有任何不對的地方,望請指正。