java提取(获取)博客信息(内容)
java提取(获取)博客信息(内容)
package com.wbg.my.service; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern;/*** @author Jack Chen* */ public class BlogUtil {/*** URL_PAGE:cnblogs url* URL_PAGE_DETAIL:详情页url* PAGE_COUNT:页数* urlLists:所有详情页url Set集合(防止重复)* p:匹配模式* */public final static String URL_PAGE = "https://www.cnblogs.com/weibanggang/default.html?page=";public final static String URL_PAGE_DETAIL = "https://www.cnblogs.com/weibanggang/p/([0-9]+.html)";public final static int PAGE_COUNT = 20;public static Set<String> urlLists = new TreeSet<String>();public final static Pattern p = Pattern.compile(URL_PAGE_DETAIL);//文件路径public static String file="d:index.html";static String [] arr=null;static int sun=0;public static void main(String[] args) throws Exception {for(int i = 1;i<=PAGE_COUNT;i++) {getUrls(i);}System.out.println("开始获取内容!");arr=new String[urlLists.size()];for(Iterator<String> i = urlLists.iterator();i.hasNext();) {createFile(i.next());sun++;}System.out.println("获取内容完毕!");System.out.println("开始写入文件!");StringBuffer stringBuffer=new StringBuffer(kais());for (int i = 0; i < arr.length; i++) {stringBuffer.append(arr[i]);}stringBuffer.append(jiehun());System.out.println("写入文件完毕!");System.out.println("开始导出文件!");createFile(file,stringBuffer);System.out.println("导出文件完毕!");System.out.println("输出文件地址为:"+file);}/** 将结果写入文件*/private static void createFile(String file, StringBuffer buffer) {try {File newFile = new File(file);if (newFile.exists())// 存在,则删除if (!newFile.delete())// 删除成功则创建 {System.err.println("删除文件" + newFile + "失败");}if (newFile.createNewFile()) {// 创建成功,则写入文件内容PrintWriter p = new PrintWriter(new FileOutputStream(newFile.getAbsolutePath()));p.write(buffer.toString());p.close();} else {System.err.println("创建文件:" + newFile + "失败");}} catch (Exception e) {e.printStackTrace();}}//开始头部public static String kais(){return "<!DOCTYPE html>\n" +"<html>\n" +"<head>\n" +" <meta charset=\"utf-8\">\n" +" <title>weibanggang.github.io</title>\n" +" <meta name=\"renderer\" content=\"webkit\">\n" +" <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n" +" <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n" +" <style>\n" +" html,body{width:100%;height: 100%}\n" +" table{width: 1150px;height:500px;margin: auto}\n" +" table,td,th{border: 1px solid #e6e6e6;border-collapse:collapse; }\n" +" body{-moz-background-size:100% 100%; background-size:100% 100%;background-image:url(\"link.jpg\");background-repeat: no-repeat} body{-moz-background-size:100% 100%; background-size:100% 100%;background-image:url(\"link.jpg\");background-repeat: no-repeat}\n" +" * { margin: 0; padding: 0; }\n" +" table { border-collapse: collapse; text-align: center; }\n" +" /*关键设置 tbody出现滚动条*/\n" +" table tbody {\n" +" display: block;\n" +" height: 500px;\n" +" overflow-y: scroll;overflow-x:hidden;\n" +" }\n" +" table thead, tbody tr { display: table;width: 100%; table-layout: fixed; }\n" +" table thead th { height: 40px }\n" +" table tbody td {height: 30px }\n" +" </style>\n" +"</head>\n" +"\n" +"<body>\n" +"<marquee><h1 style=\"color:white;\">本网页仅作为参考博客、github等地址</h1></marquee>\n" +"<table width=\"80%\" border=\"1\">\n" +" <thead>\n" +" <tr>\n" +" <th style=\"width:230px\">序号</th>\n" +" <th style=\"width:231px\">标题链接</th>\n" +" <th style=\"width:231px\">时间</th>\n" +" <th style=\"width:231px\">来源</th>\n" +" <th style=\"width:249px\">备注</th>\n" +" </tr>\n" +" </thead>\n" +" <tbody>\n" +"\n" +" </tbody>\n" +"</table>\n" +"</body>\n" +"<script src=\"js/jquery.js\"></script>\n" +"<script>\n" +" var sum=[";}//结尾public static String jiehun(){return " ];\n" +" \n" +" for(var i=0;i<sum.length;i++){\n" +" var tr=$(\"<tr/>\");\n" +" //序号\n" +" $(\"<td/>\").html(i+1).appendTo(tr);\n" +" //标题链接\n" +" var a=\"<a href='\"+sum[i][0]+\"' target='_blank'>\"+sum[i][1]+\"</a>\"\n" +" $(\"<td/>\").html(a).appendTo(tr);\n" +" //时间\n" +" $(\"<td/>\").html(sum[i][2]).appendTo(tr);\n" +" //来源\n" +" $(\"<td/>\").html(sum[i][3]).appendTo(tr);\n" +" //备注\n" +" $(\"<td/>\").html(sum[i][4]).appendTo(tr);\n" +" $(\"table tbody\").append(tr);\n" +" }\n" +"</script>\n" +"</html>";}static String fh="";/*** @param url* 获取所有内容* @throws*/private static void createFile(String url) throws Exception {Matcher m = p.matcher(url);m.find();String fileName = m.group(1);URL u = new URL(url);HttpURLConnection conn = (HttpURLConnection) u.openConnection();conn.connect();BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));String str;StringBuffer s=new StringBuffer();while((str = br.readLine()) != null){s.append(str);}String href="https://www.cnblogs.com/weibanggang/p/"+fileName;String title=getTitle(s);String data=getDate(s);arr[sun]=fh+"[\""+href+"\",\""+title+"\",\""+data+"\",\"博客\",\"正常\"]";fh=",";br.close();conn.disconnect();}//获取时间public static String getDate(StringBuffer sb){int first=sb.indexOf("<span id=\"post-date\">")+"<span id=\"post-date\">".length();String aa=sb.substring(first);int last=aa.indexOf("</span>");String sa=aa.substring(0,last);return sa;}//获取标题public static String getTitle(StringBuffer sb){int first=sb.indexOf("<title>");int last=sb.indexOf("</title>");String sa=sb.substring(first+7,last);int errorindex=sa.lastIndexOf("- 韦邦杠 - 博客园");return sa.substring(0,errorindex);}/*** @param idx* 获取页数* @throws*/private static void getUrls(int idx) throws Exception{URL u = new URL(URL_PAGE+""+idx);HttpURLConnection conn = (HttpURLConnection) u.openConnection();conn.connect();BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));String str;while((str = br.readLine()) != null){if(null != str && str.contains("https://www.cnblogs.com/weibanggang/p/")) {Matcher m = p.matcher(str);if(m.find()) {urlLists.add(m.group());}}}br.close();conn.disconnect();}}
java提取(获取)博客信息(内容)相关推荐
- AJAX实用教程——获取博客园博文列表
在写这个Demo时,原本是想直接访问小菜博客的rss,但这是明显的跨域访问,是不允许的. 因此,小菜把博客rss保存到了本地,就是一个xml格式文件,直接用AJAX请求本地的xml文件. ...
- 博客文章内容导航(实时更新)
博客文章内容导航(实时更新) 大家好,我是亓官劼(qí guān jié),在博客中分享数据结构与算法.Python全栈开发.Java后端开发.前端.OJ题解及各类报错信息解决方案等经验.一起加油 ...
- 毕业设计分享----基于Java的个性化博客空间的设计与实现
一.大宇想说的话 大宇大学毕业已经四个月了,这四个月有懒惰的时候,有努力的时候.回首自己走过的路,只有毕业设计最能浓缩我的所学.我早就有这个打算:把自己的毕业设计与大家分享,但一直没有用行动落实.这个 ...
- 作业二:个人博客作业内容:需求分析
作业二:个人博客作业内容:需求分析 怎样与用户有效沟通获取用户的真实需求? 访谈,正式访谈系统分析员将提出一些事先准备好的具体问题:非正式访谈中,分析人员将提出一些用户可以自由回答的开放性问题,一鼓励 ...
- python读取数据库绘图_获取博客积分排名,存入数据库,读取数据进行绘图(python,selenium,matplotlib)...
该脚本的目的:获取博客的排名和积分,将抓取时间,排名,积分存入数据库,然后把最近的积分和排名信息进行绘图,查看积分或者排名的变化情况. 整个脚本的流程:是利用python3来编写,利用selnium获 ...
- java课程设计 博客园_Java课程设计博客(团队)
Java课程设计博客(团队) 1. 团队/项目名称 使用JAVA实现简易HTTP服务器 2. 团队成员 组长:林一心 组员:张杭镖 3. 项目git地址 4. 项目git提交记录截图 5. 项目功能架 ...
- php bloginfo templatedirectory,WordPress函数:bloginfo(显示博客信息)
描述 显示你的博客信息,大部分都是显示WordPress管理界面的 用户资料 和 常规设置 中的信息.它可以在模板文件的任何地方使用.一般 bloginfo() 都是用来直接在浏览器中输出内容的.如果 ...
- java毕业设计个人博客系统mybatis+源码+调试部署+系统+数据库+lw
java毕业设计个人博客系统mybatis+源码+调试部署+系统+数据库+lw java毕业设计个人博客系统mybatis+源码+调试部署+系统+数据库+lw 本源码技术栈: 项目架构:B/S架构 开 ...
- Google 协作平台 博客和内容管理系统 跟踪代码设置 GA谷歌分析
Google 协作平台 如果您的网站是通过 Google 协作平台创建的,在使用网站网址设置 Google Analytics(分析)帐户后,请按照以下说明启用 Google Analytics(分析 ...
- 计算机毕业设计Java抑郁症患者博客交流平台(系统+源码+mysql数据库+Lw文档)
计算机毕业设计Java抑郁症患者博客交流平台(系统+源码+mysql数据库+Lw文档) 计算机毕业设计Java抑郁症患者博客交流平台(系统+源码+mysql数据库+Lw文档) 本源码技术栈: 项目架构 ...
最新文章
- *44.程序的链接方式
- es6 数组找最大值_JavaScript 查找数组中最大值与最小值
- 光耦的CTR(Current Transfer Ratio)值概念及计算方法
- [css] 举例说明你对相邻兄弟选择器的理解
- 此图片来自微信公众平台未经允许不可引用
- 常用电子元器件参考资料(参数手册大全)
- 网络安全基础——对称加密算法和非对称加密算法(+CA数字证书)
- SDEWAN CNF for OpenNESS
- python编程控制安捷伦电源_agilent_n6700_series 安捷伦电源 5,labview例程 267万源代码下载- www.pudn.com...
- wechat微信小程序 :对应的服务器证书无效
- C/C++中string和int相互转换的常用方法
- 有限Abel群的一维复表示
- (读论文)启体书法字的矢量化-曹芳
- python 数学公式_python的数学算法函数及公式用法
- 华为p20能更新鸿蒙么,华为Mate20+P20系列不再进行安全更新
- 高等数学课程介绍目录
- 腾讯云服务器带贵的原因?
- 单摆运动模拟程序C语言,单摆C语言程序代码
- 斗鱼直播弹幕python_python利用danmu实时获取斗鱼等直播网站字幕
- Improved Consistency Regularization for GANs
热门文章
- python求解给定一字符串列表判定每个字符串可以构成的所有序列中回文序列的数目
- C++构造函数详解(复制构造函数)
- php时间测试,PHP 测试程序运行时间
- 在计算机中 用于完成系统配置的文件是,历年真题:全国2015年4月自考02323操作系统概论考试试卷以及答案...
- matlab axes坐标轴长度,[转载]Matlab 坐标轴(axes),数据提示(data
- android java文件_android 项目下文件的作用
- mybatis mysql 注解_Mybatis注解的使用
- java jsonarray string_String JSONObject JSONArray 转换
- html css菜鸟,CSS菜鸟教程阅读笔记
- RedisTemplate 概述 与 操作 Redis 5 种数据类型