提取博文

1、首先,制作list文件

import java.util.*;
import java.io.*;
import java.net.*;
public class ReadFileList{
        public static void main(String[] args){
                try{
                        String str="http://blog.csdn.net/havedream_one/article/category/2795941";
                        int count = 1;
                        while(count < 6){
                                System.out.println("正在提取第"+count+"个文件...");
                                URLConnection conn = new URL(str+"/"+count).openConnection();
                                conn.setRequestProperty("User-Agent","Mozilla/4.0 (compatible;MSIE 5.0;Windows XP ;DigExt)");
                                InputStream in = conn.getInputStream();
                                FileOutputStream out = new FileOutputStream("list.txt",true);
                                int a = 0;
                                while((a=in.read()) != -1){
                                        out.write(a);
                                }
                                in.close();
                                out.close();
                                count++;
                        }
                        System.out.println("提取结束。");
                }catch(IOException e){

                }
        }
}
这相当于将所有的博客网页文件保存起来了。

2、研究文件格式,发现

        <span class="link_title"><a href="/havedream_one/article/details/42144657">
        166 Fraction to Recurring Decimal
        </a></span>

       这样的格式包含了文章名和文章所在的地址。

      用sed命令提取出来

          sed -ne '/<span class="link_title">/p;/<span class="link_title">/{n;p}' list.txt

      提取结果:

    提取博文_第1张图片

     继续使用sed命令:

    sed -ne '/<span class="link_title">/p;/<span class="link_title">/{n;p}' list.txt |sed -e 's/.*="\(.*[0-9]\).*/\1/;s/\s*//'  > list2.txt

   生成地址和名字的文件list2.txt

  提取博文_第2张图片

   3、得到上述文件后,就可以何并文件了;

        

import java.io.*;
import java.util.*;
import java.net.*;
public class MergeFile{
        public static void main(String[] args){
                //获取参数
                //0:list文件
                if(args.length == 0){
                        System.out.println("请指定博文地址清单!!!");
                }
                File list = new File(args[0]);
                if(!list.exists()){
                        System.out.println("文件不存在!");
                }
                int count = 0;
                try{
                        Scanner scan = new Scanner(list);
                        FileOutputStream out = new FileOutputStream("MergeBlogSource.txt",true);
                        System.out.println("正在抽取...");
                        while(scan.hasNext()){
                                String path = "http://blog.csdn.net" + scan.nextLine();
                                System.out.println(path);
                                scan.nextLine();
                                URLConnection conn = new URL(path).openConnection();
                                conn.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 5.0; Windows XP; DigExt)");
                                InputStream is = conn.getInputStream();
                                int b = 0;
                                while((b=is.read()) != -1){
                                        out.write(b);
                                }
                                is.close();
                                System.out.println("第"+ (++count) + "个抽取完成!");
                        }
                        scan.close();
                        out.close();
                        System.out.println("全部博文抽取完成!");
                }catch(Exception e){
                        System.out.println(e);
                }

        }
}
~ 
将第三部得到的list加到命令行,java MergeFile list.txt;

其实就是将文章所在的网页都合并到一个大文件里

4、提取网页里有关文章主体

     

import java.io.*;
import java.util.*;
import java.net.*;
public class MergeFile{
        public static void main(String[] args) throws IOException{
                //获取参数
                //0:list文件
                if(args.length == 0){
                        System.out.println("请指定博文地址清单!!!");
                }
                File list = new File(args[0]);
                if(!list.exists()){
                        System.out.println("文件不存在!");
                }
                long start = System.currentTimeMillis();
                merge(list);
                drawBody(list);
                long end = System.currentTimeMillis();
                System.out.println(end - start);
        }

OK,搞定!!!

不能提取图片,等以后需要里再改进,至少现在自己的博客文章可以弄成pdf了,

你可能感兴趣的:(提取博文)