CSDN爬虫(四)——博客专家(所有)爬取+数据分析

本文介绍了使用webMagic爬虫框架,从CSDN博客专家页面获取所有专家信息并进行数据分析的过程。通过分析网页源码找到专家接口,爬取1255位专家及298057篇博客,根据浏览量、创作量和评论量进行排名,展示了排名前十的博客及其详细信息。

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
                           
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值