import java.io.*;
import java.net.*;
class csdn
{
public static void main(String[] args) throws Exception
{
String strUrl;
String ss;
int icount=0;
//处理月份开始,连接首页,分析月份
StringBuffer sbMonth=new StringBuffer("");
strUrl="#";
URL url = new URL(strUrl);
URLConnection conn = url.openConnection();
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF8"));
System.out.println("连接成功。");
int i=0;
int j=0;
while ((ss=rd.readLine())!=null)
{
if(ss.indexOf("年")>0&&ss.indexOf("id")>0&&ss.indexOf("SingleColumn")>0)
{
i=ss.indexOf("archive");
if(i>0)
{
j=ss.indexOf(".aspx",i);
if(j>0)
{
sbMonth.append(strUrl+"/"+ss.substring(i,j)+".aspx");
sbMonth.append(",");
}
}
}
}
rd.close();
System.out.println("分析月份列表成功");
//处理月份结束,得到一个包含每月URL地址的sbMonth字符串
//处理每月,分析每月文章列表
StringBuffer sbArticle=new StringBuffer("");
String[] str=sbMonth.toString().split(",");
for(int i_m=0;i_m<str.length;i_m++)
{
strUrl=str[i_m];
url = new URL(strUrl);
conn = url.openConnection();
rd = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF8"));
boolean bPrint=false;
while ((ss=rd.readLine())!=null)
{
if(ss.indexOf("postTitle")>0)
{
bPrint=true;
}
if(ss.indexOf("postText")>0)
{
bPrint=false;
}
if(bPrint)
{
i=ss.indexOf("http");
if(i>0)
{
j=ss.indexOf(".aspx",i);
if(j>0)
{
sbArticle.append(ss.substring(i,j)+".aspx");
sbArticle.append(",");
}
}
}
}
}
System.out.println("获取所有文章的URL地址列表成功");
//获取每月文章列表结束,得到所有文章的URL地址
//获取每篇文章内容开始
System.out.println("\r\n保存文章开始...");
String[] str1=sbArticle.toString().split(",");
for(int i_n=0;i_n<str1.length;i_n++)
{
icount++;
strUrl=str1[i_n];
StringBuffer sb=new StringBuffer("");
System.out.println(strUrl);
url = new URL(strUrl);
conn = url.openConnection();
rd = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF8"));
boolean bPrint1=false;
boolean bPrint2=false;
RandomAccessFile rf=new RandomAccessFile("csdn_cqq_"+icount+".htm","rw");
boolean bb=true;
while ((ss=rd.readLine())!=null&&bb)
{
if(ss.indexOf("postTitle")>0)
{
bPrint1=true;
}
if(ss.indexOf("postfoot")>0)
{
bPrint1=false;
}
if(bPrint1)
{
sb.append(ss);
}
}
byte [] b;
b=sb.toString().getBytes();
rf.write(b);
rf.close();
}
System.out.println("完成,总共保存 "+icount+" 篇文章");
}
}
分享到:
相关推荐
这篇文章主要介绍了一个使用Java和SpringBoot框架开发的程序,该程序能够帮助用户批量将CSDN上的个人文章保存到本地。下面将详细讲解这个程序的工作原理、涉及的技术点以及使用方法。 1. **SpringBoot框架**:...
总结一下,这个Java程序是一个用于从CSDN平台下载个人文章的实用工具,它需要用户具有Java环境,并且包含可直接运行的代码和使用说明。在技术实现上,它可能涉及网络请求、JSON解析和文件操作等Java核心技能。对于想...
总的来说,这个Java程序利用了网络爬虫技术、HTTP请求处理和HTML解析,提供了一个实用的工具,帮助CSDN用户备份和管理自己的文章。通过阅读和理解源代码,开发者可以学习到关于网络爬虫、HTTP通信以及Java软件打包和...
标题 "CSDN一键保存自己的文章到本地Java实现" 提供了一个编程项目,它使用Java语言来实现一个功能,即从CSDN(中国最大的开发者社区)下载并保存用户自己的文章到本地计算机。这个功能对于那些希望备份或离线阅读...
在本教程中,我们将深入探讨如何使用Java编程语言来实现一个简单的网络爬虫,以便从CSDN(China Software Developer Network)网站上抓取并保存文章。CSDN是一个知名的中文IT技术社区,包含了大量的技术文章和资源。...
程序通过分析CSDN博客源码来生成一些必要的数据,可能在以后使用当中出现爬取不了的情况,可能是CSDN的源码结构修改了。程序只是用于学习之用,严禁用于非法目的而照成CSDN服务器过载。 由于生成PDF的时候需要依赖...
标题中的“Java实现CSDN文章自动化爬取与解析”是指使用Java编程语言编写的一套程序,该程序能够自动地从CSDN(China Software Developer Network)网站上抓取并解析文章内容。CSDN是一个知名的中文IT技术交流平台,...
Java爬虫实战:轻松爬取CSDN个人博客文章是一个基于Java编程语言的项目,旨在帮助用户自动化地从CSDN(China Software Developer Network)网站抓取个人博客文章并保存到本地。这个项目对于那些想要备份自己或者他人...
运行代码后,程序会自动开始抓取并保存CSDN文章,你可以在本地看到抓取结果。 值得注意的是,网络爬虫需遵循网站的Robots协议和相关法律法规,尊重网站版权,合理合法地使用爬虫技术。在批量抓取时,也要注意控制...
【Java笔记桌面程序】 在IT领域,开发个人定制的桌面应用程序是解决特定需求的有效方法。本项目名为"Java笔记桌面程序",它是由一个热衷于编程的开发者为解决其所在公司无法使用网络笔记客户端的问题而自创的。这个...
使用者可能需要了解如何运行Java程序,以及如何配置和定制工具以适应自己的需求。 【博客迁移流程】 1. 首先,确定要迁移的CSDN用户名。 2. 使用`csdn2md`工具,输入用户名并运行程序,工具将自动爬取所有文章。 3...
要实现CSDN文章的爬取,我们需要做以下几步: 1. **分析目标网站结构**:首先,我们需要打开CSDN网站,观察文章页面的HTML结构,找出文章标题、作者、内容等信息所在的HTML标签。通常,文章标题在`<h1>`或`<h2>`...
该软件是专为Android平台设计的CSDN博客文章阅读应用,允许用户随时随地访问并阅读CSDN博客上的内容,同时支持离线阅读功能,使用户在没有网络连接的情况下也能浏览保存的文章。这款应用的核心价值在于其便捷性和可...
它负责与CSDN的API进行交互,获取博客数据,如文章列表、文章详情等。通常,这样的客户端会实现网络请求(如使用HttpURLConnection或OkHttp)、JSON解析(如Gson或Jackson)以及UI展示(如使用RecyclerView显示博客...
本项目名为"QSpider",是一个用JAVA编写的轻量级爬虫程序,主要功能是抓取OSCHINA和CSDN两大知名IT社区的资讯与博客内容。本文将深入探讨QSpider的设计理念、实现方式以及其提供的可扩展性接口。 首先,我们要理解...
2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入HTML 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档标记 2.8.8 文档示例 2.9 编码样式 2.10 ...
本篇文章将探讨如何使用Java在Excel文件中添加筛选器并执行筛选操作,这可以帮助用户更方便地管理和分析数据。我们将使用一个名为Free Spire.XLS for Java的第三方库,它提供了一系列API来操作Excel文件。 首先,...
本篇文章将详细介绍如何使用Aspose.Words在Java中实现Word到PDF的转换。 首先,你需要在项目中引入Aspose.Words的Java库。你可以通过Maven或Gradle来管理依赖。如果是Maven,添加以下依赖到你的pom.xml文件: ```...
本篇文章将深入探讨Java IDE开发环境,尤其是Eclipse在Java工程中的应用,以及如何利用它进行编程和调试。 首先,Java IDE为开发者提供了统一的界面,集成了代码编辑器、构建工具、版本控制系统、调试器等多种功能...
2、编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad。 62 3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证...