CSDN爬蟲(四)——博客專家(所有)爬取+數據分析

CSDN爬蟲(四)——博客專家(所有)爬取+數據分析

說明

  • 開發環境:jdk1.7+myeclipse10.7+win74bit+mysql5.5+webmagic0.5.2+jsoup1.7.2
  • 爬蟲框架:webMagic
  • 建議:建議首先閱讀webMagic的文檔,再查看此係列文章,便於理解,快速學習:http://webmagic.io/
  • 開發所需jar下載(不包括數據庫操作相關jar包):點我下載
  • 該系列文章會省略webMagic文檔已經講解過的相關知識。

概述

  • 我們會從博客專家首頁http://blog.csdn.net/experts.html#list分析頁面,從中到找到所有專家所在的“接口”(需要分析網頁源碼),從中爬取所用專家用戶,保存到本地數據庫。
  • 根據專家id也即用戶id去爬取他們的博客列表(第二篇文章已經講解過該部分)。
  • 因爲,博客專家是CSDN的核心用戶,文章相對而言質量也比較高,優先考慮爬取這一部分用戶即其文章。
  • 根據博客專家的文章總瀏覽量、關注數、博文單的閱讀數、評論數進行排序,找出“最有價值”的文章以及博客專家。

博客專家爬蟲代碼預覽

package com.wgyscsf.spider;

import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.processor.PageProcessor;

import com.wgyscsf.utils.MyStringUtils;

/**
 * @author wgy</n> 編寫日期 2016-9-24下午7:25:36</n> 郵箱 [email protected]</n> 博客
 *         http://blog.csdn.net/wgyscsf</n> TODO</n>
 */
public class CsdnExpertListSpider implements PageProcessor {
    // 這個是列表頁
    public static final String EXPERTS_LIST = "http://blog\\.csdn\\.net/peoplelist\\.html\\?channelid=0\\&page="
            + "\\w+";
    private static final String TAG = "CsdnExpertListSpider";
    // 博客詳情頁
    // public static final String EXPERTS_DETAILS =
    // "http://blog.csdn.net/\\w+";// \\w+是一個匹配符,可以匹配任意字段
    private Site site = Site
            .me()
            .setDomain("blog.csdn.net")
            .setSleepTime(300)
            .setUserAgent(
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31");

    @Override
    public void process(Page page) {
        // 列表頁: 這裏進行匹配,匹配出列表頁進行相關處理。
        if ((page.getUrl()).regex(EXPERTS_LIST).match()) {
            // 遍歷出div[@class=\"page_nav\"]節點下的所有超鏈接,這裏的超鏈接是分頁的超鏈接,可以進行分頁。
            page.addTargetRequests(page.getHtml()
                    .xpath("//div[@class=\"page_nav\"]").links()
                    .regex(EXPERTS_LIST).all());// 是一個正則規則,校驗使用,可以省略。

            // 獲取專家列表元素
            Elements expertList_elements = page.getHtml().getDocument()
                    .getElementsByClass("experts_list");

            for (Element element : expertList_elements) {
                // 兩個根節點
                Element tag_dt = element.getElementsByTag("dt").get(0);
                Element tag_dd = element.getElementsByTag("dd").get(0);
                // 獲取用戶id
                String id_expert = MyStringUtils.getLastSlantContent(tag_dt
                        .getElementsByTag("a").get(0).attributes().get("href"));
                // 獲取用戶頭像
                String headImg = tag_dt.getElementsByTag("a").get(0)
                        .getElementsByClass("expert_head").get(0).attributes()
                        .get("src");
                // 獲取用戶名
                String name = tag_dd.getElementsByTag("a").get(0).text();
                String address_job = tag_dd.getElementsByTag("div").get(0)
                        .text();
                // 獲取地址
                String localtion = MyStringUtils
                        .getBeforeVercitalLine(address_job);
                // 獲取職位
                String job = MyStringUtils.getAfterVercitalLine(address_job);
                // 獲取文章數
                String articleNums = tag_dd.getElementsByTag("div").get(1)
                        .getElementsByTag("div").get(1).getElementsByTag("b")
                        .get(0).text();
                // 獲取閱讀數
                // TODO:這裏邏輯不太對呀,但是結果正確
                String readNums = tag_dd.getElementsByTag("div").get(1)
                        .getElementsByTag("div").get(2).getElementsByTag("b")
                        .get(0).text();

                // 開始組裝數據
                System.out.println(TAG + ":" + "專家id:" + id_expert + ",專家名字:"
                        + name + ",地區:" + localtion + ",職業:" + job + ",文章總閱讀數:"
                        + readNums + ",文章數:" + articleNums);

            }

        }
    }
    @Override
    public Site getSite() {
        return site;
    }

    public static void main(String[] args) {
        Spider.create(new CsdnExpertListSpider())
                .addUrl("http://blog.csdn.net/peoplelist.html?channelid=0&page=1")
                .addPipeline(null).thread(5).run();
    }

}

關鍵代碼解釋

  • 以上代碼涉及分頁爬蟲、jsoup方式解析爬蟲、正則匹配,具體請參考前三篇文章。
  • 涉及到一個“接口”"http://blog.csdn.net/peoplelist.html?channelid=0&page=1",這個接口是分析博客專家首頁http://blog.csdn.net/experts.html#list網頁源碼後得到的,極大的方便了博客專家的爬取過程。正是由於有了這個“接口”,才使得爬取博客專家特別方便。

爬取結果預覽

這裏寫圖片描述

數據分析

注: 博客專家(全部專家):1255人,博客總量(部分數據): 298057,統計時間:10/7/2016 6:28:34 PM

  • 博客專家按博文瀏覽量排名前十名
總瀏覽量排名 專家Id 專家名稱 地址 職位 文章量 總閱讀量 博客地址 個人中心
1 v_JULY_v 周磊 158 11651669 http://blog.csdn.net/v_JULY_v http://my.csdn.net/v_JULY_v
2 luopingfeng 羅平峯 廣東省深圳市 驅動工程師 48 11335406 http://blog.csdn.net/luopingfeng http://my.csdn.net/luopingfeng
3 tianlesoftware 戴明明 杭州 DBA 1092 10306025 http://blog.csdn.net/tianlesoftware http://my.csdn.net/tianlesoftware
4 lmj623565791 張鴻洋 陝西西安 研究生 195 10204783 http://blog.csdn.net/lmj623565791 http://my.csdn.net/lmj623565791
5 sunboy_2050 楊剛 北京 高級工程師 864 9437469 http://blog.csdn.net/sunboy_2050 http://my.csdn.net/sunboy_2050
6 21aspnet 黃鳴 1680 8816125 http://blog.csdn.net/21aspnet http://my.csdn.net/21aspnet
7 Luoshengyang 羅昇陽 上海 客戶端開發 177 8643601 http://blog.csdn.net/Luoshengyang http://my.csdn.net/Luoshengyang
8 luozhuang 羅莊 1091 7857322 http://blog.csdn.net/luozhuang http://my.csdn.net/luozhuang
9 david_lv 呂建偉 北京 北京 514 7665707 http://blog.csdn.net/david_lv http://my.csdn.net/david_lv
10 Augusdi 高慶地 南京 研發工程師 4082 7327363 http://blog.csdn.net/Augusdi http://my.csdn.net/Augusdi

這裏寫圖片描述
* 博客專家按博文創作量排名前十名

總博文量排名 專家Id 專家名稱 地址 職位 文章量 總閱讀量 博客地址 個人中心
1 yuanmeng001 袁萌 4095 7117504 http://blog.csdn.net/yuanmeng001 http://my.csdn.net/yuanmeng001
2 Augusdi 高慶地 南京 研發工程師 4082 7327363 http://blog.csdn.net/Augusdi http://my.csdn.net/Augusdi
3 SmartTony 鄧斌 中國上海市 執行董事 2792 3619000 http://blog.csdn.net/SmartTony http://my.csdn.net/SmartTony
4 jdsjlzx 李治現 北京 Android開發工程師 2314 6496619 http://blog.csdn.net/jdsjlzx http://my.csdn.net/jdsjlzx
5 jackyrongvip 廖煜嶸 廣州 IT開發工程師 2254 1287146 http://blog.csdn.net/jackyrongvip http://my.csdn.net/jackyrongvip
6 shanyou 張善友 2172 1324942 http://blog.csdn.net/shanyou http://my.csdn.net/shanyou
7 metababy 花純春 成都 成都 2058 4456469 http://blog.csdn.net/metababy http://my.csdn.net/metababy
8 hu_zhenghui 胡爭輝 2024 2492625 http://blog.csdn.net/hu_zhenghui http://my.csdn.net/hu_zhenghui
9 sxhelijian 賀利堅 煙臺 教師 1978 4459980 http://blog.csdn.net/sxhelijian http://my.csdn.net/sxhelijian
10 matrix67 顧森 1899 814777 http://blog.csdn.net/matrix67 http://my.csdn.net/matrix67

這裏寫圖片描述
* 博文評論量最多前十名

評論數排名 博主id 評論數 瀏覽量 博文標題 博客詳情地址 發表日期 置頂與否
1 xiaominghimi 984 107300 Himi淺談遊戲開發de自學歷程!(僅供參考) http://blog.csdn.net/xiaominghimi/article/details/6249005 2011/3/14 10:18 1
2 zhmxy555 974 180921 【Visual C++】遊戲開發筆記之一——API函數、DirectX的關鍵系統 http://blog.csdn.net/poem_qianmo/article/details/7318264 2012/3/4 8:59 1
3 yincheng01 810 19303 年少癡狂,懷戀曾經的創業歲月,語音識別的應用遠遠未到高潮,本人的軟件源碼開源,需要的留下Email,我給大家發 http://blog.csdn.net/itcastcpp/article/details/4146494 2009/5/3 21:57 0
4 chgaowei 785 62174 給部分培訓學生的建議 http://blog.csdn.net/chgaowei/article/details/6013554 2010/11/16 22:49 0
5 wdaming1986 784 91414 Android鬧鐘最終版【android源碼鬧鐘解析】 http://blog.csdn.net/wdaming1986/article/details/7461043 2012/4/14 18:14 0
6 jirigala 780 43372 技術水平的確很高,正規公司爲什麼還是不錄用這些人(技術水平不高的更不可能) http://blog.csdn.net/jirigala/article/details/5565158 2010/5/6 11:02 0
7 21aspnet 749 510256 C#精髓 第四講 GridView 72般絕技 http://blog.csdn.net/21aspnet/article/details/1540301 2007/3/25 4:36 1
8 shimiso 745 39352 Android精品開源項目整理_V20140221(持續更新中..) http://blog.csdn.net/shimiso/article/details/19771915 2014/2/23 22:06 0
9 sinyu890807 676 94932 歷時一年,我的著作《第一行代碼——Android》已出版! http://blog.csdn.net/sinyu890807/article/details/26365913 2014/7/17 9:13 1
10 sxhelijian 635 8933 寫給菜鳥:發CSDN博文常見問題處理 http://blog.csdn.net/sxhelijian/article/details/8042507 2012/10/6 8:08 0

這裏寫圖片描述
* 博文瀏覽量最多前十名

瀏覽數排名 博主id 評論數 瀏覽量 博文標題 博客詳情地址 發表日期 置頂與否
1 lmj623565791 161 1528773 Android Https相關完全解析 當OkHttp遇到Https http://blog.csdn.net/lmj623565791/article/details/48129405 2015/9/12 11:25 0
2 tingsking18 1 1228563 簡單即時貼:python輸出A到Z http://blog.csdn.net/tingsking18/article/details/4330414 2009/7/8 10:59 0
3 sunboy_2050 504 831516 Android APK反編譯詳解(附圖) http://blog.csdn.net/sunboy_2050/article/details/6727581 2011/8/28 22:42 0
4 luopingfeng 1 777893 《Linux Device Drivers》第十五章 內存映射和DMA——note http://blog.csdn.net/luopingfeng/article/details/24173985 2014/10/9 8:41 0
5 luopingfeng 1 777855 《Linux Device Drivers》第十六章 塊設備驅動程序——note http://blog.csdn.net/luopingfeng/article/details/24174045 2014/10/11 16:53 0
6 luopingfeng 2 777674 《Linux Device Drivers》第八章 分配內存——note http://blog.csdn.net/luopingfeng/article/details/24173595 2014/9/28 9:26 0
7 luozhuang 28 656975 RapeLay(電車之狼R)的結局介紹 (隱藏結局攻略) http://blog.csdn.net/luozhuang/article/details/2595816 2008/6/29 14:48 0
8 metababy 0 630052 時更新 在線觀察紙黃金價格 24小時黃金走勢圖使用現貨買入價格 黃金價格歷史走勢圖 全天顯示黃金,銀,鈀 和 鉑以及原油期貨,美元指數的最新價格 http://blog.csdn.net/metababy/article/details/1488797 2007/1/20 21:34 0
9 alex197963 38 611795 歷年奧斯卡獲獎影片(1927—2015) http://blog.csdn.net/oracle_microsoft/article/details/4436974 2009/8/12 9:04 1
10 t12x3456 67 534164 Android 網絡通信框架Volley簡介(Google IO 2013) http://blog.csdn.net/t12x3456/article/details/9221611 2013/7/2 9:15 0

這裏寫圖片描述

操作代碼

點我下載

個人公衆號,及時更新技術文章(請移步公衆號,文章會被官方刪除)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章