JAVA爬虫挖取CSDN博客文章(续)

前言

之前写过一篇用jsoup爬取csdn博客的文章JAVA爬虫挖取CSDN博客文章 ,当时博主还在上一家公司实习,由于公司办公网络需要代理才能访问外网,那一篇的代码逻辑与代理密切相关,可能有些不熟悉jsoup怎么使用的朋友看了会感觉越看越糊涂,且当时以为爬取所有文章需要用到分页,可能会误导读者。所以今天再次整理那个篇博客的思路,在没有代理的网络的环境下实现代码功能,如果你的也是处在代理才能访问外网的网络,那么参考本文最后一段的解决方案。

思路和步骤

还是以《第一行代码–安卓》的作者为例,将他在csdn发表的博客信息都挖取出来,因为郭神是我在大学期间比较崇拜的对象之一。郭神的博客地址为郭霖博客
这里写图片描述

在动手实验之前,假设你已经基本掌握了如下的技能:JAVA基础编程,简单的正则表达式,JS或者jQuery的编程能力,此外还学过http协议的一些知识。如果你还未掌握正则表达式,可以去我的JAVA正则表达式详解 博客看看,如果你还没有掌握jQuery的基础知识,可以去我的jQuery实战专栏动手实验一番。如果上诉技能你都掌握了,那么就只差一个jsoup了,这个哥们是干嘛使的呢?用一句话来描述:这哥们能使Java程序像jQuery那样的语法来操作html的Dom节点元素,jsoup也有像jQuery一样的选择器功能,比如getElementById,getElemementsByClass等语法与JavaScript像极了,此外jsoup还有select选择器功能。所以,这里只要稍微掌握jsoup语法就可以像JS操作Dom一样的用Java来处理请求到的html网页。jsoup的中文官方教程地址http://www.open-open.com/jsoup/

工欲善其事必先利其器。开始之前,你应该有一定的工具,比如一款熟悉的ide,用来调试和查看变量。一个web调试工具,如火狐的firebug之类的。总之,就是有一个java web程序员日常开发和调试使用的工具就差不多了。

第一步:新建一个Java Se项目。这个项目如果是一个Maven项目,那么需要添加如下的依赖配置:

<dependency>
  <groupId>org.jsoup</groupId>
  <artifactId>jsoup</artifactId>
  <version>1.10.2</version>
</dependency>

如果这个项目不是Maven项目,那么你需要下载jsoup-1.10.2.jar包,然后在你的项目右键新建一个lib目录,把下载的jar包放进去,并把jar包添加到classpath。
这里写图片描述

第二步:分析代码编写思路:先创建一个Conection链接,这个链接包含向CSDN服务器发起请求的url地址,userAgent参数,timeOut参数已经Http请求类型等。接着向服务器发送get请求Document doc = conn.get();注意:很多网络原因导致这一步出现异常,比如timeOut时间设置太短也会报错,这里我设置为5000毫秒。如果这一步你的程序没有报错,说明已经获取了请求的html文档。然后我们可以将html的body标签里面的内容赋值给遍历Element数据类型的实例body。处理body标签的内容jsoup正式出场,除了jsoup还会夹杂简单的正则内容。

用firebug可以看到。首页与博客文章相关的内容在这个div class=”list_item_new”标签下面,而这个div下面包含3个div,分别是:div id=”article_toplist” class=”list”表示置顶的文章,div id=”article_list” class=”list”博文列表所在的div,div id=”papelist” class=”pagelist”底下分页信息所在的div。抛开置顶这个div,我们只关注文章列表的div和分页信息div。如果你仔细的分析,那么会发现我们关心的每篇文章而每篇文章的标签如下div:`

这里写图片描述
每篇文章占据的div,完整的html元素如下:

<div class="list_item article_item">
        <div class="article_title">   
         <span class="ico ico_type_Original"></span>


    <h1>
        <span class="link_title"><a href="/guolin_blog/article/details/51336415">
        Android提醒微技巧,你真的了解Dialog、Toast和Snackbar吗?            
        </a></span>
    </h1>
</div>

        <div class="article_description">
Dialog和Toast所有人肯定都不会陌生的,这个我们平时用的实在是太多了。而Snackbar是Design Support库中提供的新控件,有些朋友可能已经用过了,有些朋友可能还没去了解。但是你真的知道什么时候应该使用Dialog,什么时候应该使用Toast,什么时候应该使用Snackbar吗?本篇文章中我们就来学习一下这三者使用的时机,另外还会介绍一些额外的技巧...        </div>
            <div class="article_manage">
             <span class="link_postdate">2016-07-26 07:55</span>


        <span class="link_view" title="阅读次数"><a href="/guolin_blog/article/details/51336415" title="阅读次数">阅读</a>(7458)</span>
        <span class="link_comments" title="评论次数"><a href="/guolin_blog/article/details/51336415#comments" title="评论次数" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_pinglun'])">评论</a>(45)</span>

    </div>

        <div class="clear"></div>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值