主要思路:

1、找到列表页。

2、找到文章页。

3、用一个队列来保存将要爬取的网页,爬取队头的url,如果队列非空,则一直爬取。

4、如果是列表页,则抽取里面所有的文章url进队;如果是文章页,则直接爬取至本地。

一个博客是起始页url是这样的:

http://www.cnblogs.com/joyeecheung/

第n页是这样的:

http://www.cnblogs.com/joyeecheung/default.html?page=n

文章的url是这样的:

http://www.cnblogs.com/joyeecheung/p/[0-9]+.html

代码如下:

public class boke {

    private Queue<String> data = new LinkedList<String>();

    //文章页面
String PAGE = "http://www.cnblogs.com/joyeecheung/p/[0-9]+.html"; Pattern p = Pattern.compile(PAGE); public void action(String target) throws IOException{ Matcher m = p.matcher(target); //如果是文章页面则读取
if(m.find()){ URL url = new URL(target); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.connect(); InputStream in = conn.getInputStream(); byte[] buf = new byte [1024]; int len = 0; //分割url,把文章的编号作为文件的名字
String [] bufen = target.split("/"); String name = bufen[bufen.length-1]; name = name.replaceAll("html", "txt"); File file = new File(name); FileOutputStream fp = new FileOutputStream(file); while((len=in.read(buf))!=-1){ fp.write(buf, 0, len); } fp.close(); }
//如果是列表页面
//抽取里面的文章页面连接
else{ URL url = new URL(target); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.connect(); InputStream in = conn.getInputStream(); byte [] buf = new byte[1024]; //把列表页的内容放到ByteArrayOutputStream中
ByteArrayOutputStream outStream = new ByteArrayOutputStream(); int len = 0; while((len=in.read(buf))!=-1){
//System.out.println(len);
outStream.write(buf,0,len);
}
in.close();
outStream.close(); String content = new String(outStream.toByteArray()); Matcher page = p.matcher(content); //抽取文章的url
while(page.find()){ //将抽取的文章url进队
data.add(page.group()); } } } public static void main(String args[]) throws IOException{ boke test = new boke(); //起始页面
String start = "http://www.cnblogs.com/joyeecheung/"; test.data.add(start); //列表页面
String page = "http://www.cnblogs.com/joyeecheung/default.html?page="; //总页数
int total =15; //将15页列表页进队
for(int i=2;i<=total;i++)
test.data.add(page+i); //队列非空则一直爬取
while(!test.data.isEmpty())
test.action(test.data.poll()); } }

提取到的文章url效果:

爬取后效果:

文章内容效果:

博客里面右边会有推荐的文章栏,还有阅读排行里面的文章,这里的文章url会对我们后面提取到的url造成重复,怎么办呢?

我直接将文章编号作为文件名,如果重复的话,后一个会覆盖前面的内容。

直接用队列存储url,用循环来爬取内容,效率一般。高效率的爬虫支持多线程爬取,在此就不展开了。

这次对我关注的Joyee的文章进行了爬取,只是用作测试程序效果,没有恶意,如有冒犯,请联系删除,谢谢。

使用JAVA爬取博客里面的所有文章的更多相关文章

  1. python爬取博客圆首页文章链接+标题

    新人一枚,初来乍到,请多关照 来到博客园,不知道写点啥,那就去瞄一瞄大家都在干什么好了. 使用python 爬取博客园首页文章链接和标题. 首先当然是环境了,爬虫在window10系统下,python ...

  2. 爬虫---lxml爬取博客文章

    上一篇大概写了下lxml的用法,今天我们通过案例来实践,爬取我的博客博客并保存在本地 爬取博客园博客 爬取思路: 1.首先找到需要爬取的博客园地址 2.解析博客园地址 # coding:utf-8 i ...

  3. Java使用Jsoup之爬取博客数据应用实例

    导入Maven依赖 <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup --> <dependency> <g ...

  4. Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过Selenium模拟浏览器抓取

    区别于上篇动态网页抓取,这里介绍另一种方法,即使用浏览器渲染引擎.直接用浏览器在显示网页时解析 HTML.应用 CSS 样式并执行 JavaScript 的语句. 这个方法在爬虫过程中会打开一个浏览器 ...

  5. python 小爬虫爬取博客文章初体验

    最近学习 python 走火入魔,趁着热情继续初级体验一下下爬虫,以前用 java也写过,这里还是最初级的爬取html,都没有用html解析器,正则等...而且一直在循环效率肯定### 很低下 imp ...

  6. Java爬取网络博客文章

    前言 近期本人在某云上购买了个人域名,本想着以后购买与服务器搭建自己的个人网站,由于需要筹备的太多,暂时先搁置了,想着先借用GitHub Pages搭建一个静态的站,搭建的过程其实也曲折,主要是域名地 ...

  7. 【Android 我的博客APP】1.抓取博客首页文章列表内容——网页数据抓取

    打算做个自己在博客园的博客APP,首先要能访问首页获取数据获取首页的文章列表,第一步抓取博客首页文章列表内容的功能已实现,在小米2S上的效果图如下: 思路是:通过编写的工具类访问网页,获取页面源代码, ...

  8. [js高手之路]Node.js实现简易的爬虫-抓取博客文章列表信息

    抓取目标:就是我自己的博客:http://www.cnblogs.com/ghostwu/ 需要实现的功能: 抓取文章标题,超链接,文章摘要,发布时间 需要用到的库: node.js自带的http库 ...

  9. Java课程设计——博客作业教学数据分析系统(201521123082 黄华林)

    Java课程设计--博客作业教学数据分析系统(201521123082 黄华林) 一.团队课程设计博客链接 博客作业教学数据分析系统(From:网络五条狗) 二.个人负责模块或任务说明 1.网络爬虫 ...

随机推荐

  1. 在启动mysql的时候出现如下问题:“ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)”

    今天在启动Mysql 的时候出现如下的问题:“ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)” 在查询 ...

  2. docker-web管理工具实验

    工具名称 共有功能 备注 UCP   官方.收费 portainer 镜像库 容器管理   rancher   shipyard   kubernetes     (上诉部署都基于linux) UCP ...

  3. react table dropdown

    <DropdownButton type="primary" trigger={['click']} onClick={() => this.detail(item)} ...

  4. 【爬虫】beautiful soup笔记(待填坑)

    Beautiful Soup是一个第三方的网页解析的模块.其遵循的接口为Document Tree,将网页解析成为一个树形结构. 其使用步骤如下: 1.创建对象:根据网页的文档字符串 2.搜索节点:名 ...

  5. linux时间管理 之 jiffies

    1.jiffies 又称时钟滴答,是一个全局变量,它的值在系统引导的时候初始化为0,在时钟中断初始化完成后,每次时钟中断发生,在时钟中断处理例程中都会将jiffies的值 +1. jiffies_64 ...

  6. Arcgis for Javascript之统计图的实现

    首先,截个图给大家看看效果: 初始化状态 放大后的状态 点击选中后的状态 如上图所示,一般的涉及到的地图的统计涉及到上述所展示的三个状态:1.初始化状态:2.缩放后的状态:3.点击选中显示详情状态.第 ...

  7. go语言通过反射获取和设置结构体字段值的方法

    本文实例讲述了go语言通过反射获取和设置结构体字段值的方法.分享给大家供大家参考.具体实现方法如下: type MyStruct struct { N int } n := MyStruct{ 1 } ...

  8. Unity3d 背景、音效 播放 简单demo

    仅实现功能,AudioListener在MainCamera中 using UnityEngine; using System.Collections; using System.Collection ...

  9. Kali Linux使用Aircrack破解wifi密码(wpa/wpa2)

    Kali Linux能做很多事,但是它主要以渗透测试及'破解wifi密码'闻名. 如果你使用Macbook 请看 使用macbook破解WPA/WPA2 wifi密码 要求: 安装有Kali Linu ...

  10. 从云主机上下载文件到本地+获取外网地址(linux & Windows)

    云主机上下载有集中方法,腾讯论坛有一遍文章:向云服务器上传下载文件方法汇总 货比三家,最终还是选择了rsync 下载代码如下 rsync ubuntu@123.207.251.217:/var/www ...