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();
    }

}

原文地址:https://www.cnblogs.com/weibanggang/p/10019453.html

时间: 2024-10-07 12:43:44

java提取(获取)博客信息(内容)的相关文章

在Web微信应用中使用博客园RSS以及Quartz.NET实现博客文章内容的定期推送功能

本篇随笔介绍在Web微信应用中使用博客园RSS以及Quartz.NET实现博客文章内容的定期推送功能,首先对Quartz.NET进行一个简单的介绍和代码分析,掌握对作业调度的处理,然后对博客园RSS内容的处理如何获取,并结合微信消息的群发接口进行内容的发送,从而构建了一个在Web应用中利用作业调度来进行消息发送的业务模型. Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等. Quartz.NET允许开发人员根据时间间隔(或天)

新手写作博客文章内容技巧分享

现在是一个凡是讲究快的时代,一般用户在网上浏览文文章时,基本不会在网页上停留很长时间,很多都是只会浮光掠影的扫视内容,都是通过在页面上扫视来获取信息,找寻关键字.短语和视觉线索,所以新手在博客文章内容在写作时就要注意一些细节. 新手写作博客文章内容技巧分享 自媒体 思考 经验心得 第1张 总结了一下几个方面: 一.文章排版 列表-文章在排版时使用列表,可以给人简洁有序的感觉,带有符合和编号的给人的感觉更清晰 加粗-文章段落中可以使用粗体和其他格式来强调重点,不过要注意次数,不要走极端,全部加 粗

你自己喜欢那个博客的风格了,我更喜欢CSDN的,因为我博客的内容很多关

关于博客园和CSDN对于博者哪个更好_百度知道 1个回答 - 提问时间: 2014年12月01日 最佳答案: 那要看你自己喜欢那个博客的风格了,我更喜欢CSDN的,因为我博客的内容很多关于技术的,发布在CSDN上又能让其他人看到 http://www.djob.com/job_8EED14ACE3DE31D0.htmlhttp://www.djob.com/job_59C4A0258B1285F2.htmlhttp://www.djob.com/job_D7B9D0CE534D5FB9.html

java jsp多用户博客系统源代码下载

原文:java jsp多用户博客系统源代码下载 源代码下载地址:http://www.zuidaima.com/share/1550463407606784.htm java多用户博客系统(MVC),是采用javabean+servlet+jsp技术,同时运用了javascript,css+div,ajax技术.以Mysql数据库,tomcat6为服务器. 官方验证: 项目截图 首页http://localhost:端口/项目/ 注册http://localhost:端口/项目/register

[Demo]提取个人博客园闪存+评论

还在折腾中,这里是我抓取第一页的结果,发现还是有细节要处理,等完善后再发代码 脚本:Perl OK<img src=" <a href="http://static.cnblogs.com/images/ing_lucky.png"" target="_blank" class="gray">static.cnblogs.com...</a>  class="ing_icon_lucky

通过java来获取系统的信息

通过java来获取系统以下的信息: 主机名: OS 名称:         OS 版本: OS 制造商: OS 配置: 独立工作站OS 构件类型: 注册的所有人: 注册的组织: 产品 ID:       初始安装日期: 系统启动时间: 系统制造商:      系统型号: 系统类型: 处理器:           BIOS 版本: Windows 目录: 系统目录: 启动设备: 系统区域设置: 输入法区域设置:   时区: 物理内存总量: 可用的物理内存:  虚拟内存: 最大值: 虚拟内存: 可用

Java爬取博客文章

前言 近期本人在某云上购买了个人域名,本想着以后购买与服务器搭建自己的个人网站,由于需要筹备的太多,暂时先搁置了,想着先借用GitHub Pages搭建一个静态的站,搭建的过程其实也曲折,主要是域名地址配置把人搞废了,不过总的来说还算顺利,网站地址  https://chenchangyuan.cn(空博客,样式还挺漂亮的,后期会添砖加瓦) 利用git+npm+hexo,再在github中进行相应配置,网上教程很多,如果有疑问欢迎评论告知. 本人以前也是搞过几年java,由于公司的岗位职责,后面

UWP 获取博客园积分,并以图标形式呈现变化趋势

先看一下效果吧 1. 分析 说实话,之前还真没在乎过博客园的排名和积分,博客园默认也不给显示.需要自己到选项里面勾选才可以. 之前也有几个大佬写过类似的文章,不过是很早了.博客园关于获取积分的api已经变了. 也不算是api吧,毕竟不是官方公开的.不过自己可以通过查看页面元素,找到博客园的积分url. 在你勾选?了上面的选项之后,打开你的博客主页,比如我的就是https://www.cnblogs.com/hupo376787/ 按F12,调出开发者工具,进入Network选项卡. 如果在下面的

个人博客作业内容:需求分析

1.怎样与用户有效沟通获取用户的真实需求? 初步需求获取,通过访谈与会议.问卷调查.观察用户工作流程等方法: 面向数据流,自顶向下求精 : 简易的应用规格说明 : 快速建立软件原型. 2.详细描述小组项目的需求是如何获得的. 首先与用户沟通问他们需要什么,根据我们要找的需求的类型事先计划好.然后通过小组讨论来获得项目需求. 3.详细列出小组项目的NABCD模型,列出详细条目,把这些要点都组合成为一段话  --  当你要向别人兜售你的项目的时候, 你通常只有很短的时间 (电梯演说),能否自然而有条