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> 邮箱 wgyscsf@163.com</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();
    }

}

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96

关键代码解释

  • 以上代码涉及分页爬虫、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
 

这里写图片描述

操作代码

点我下载

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值