定时抓取网页连接,提取网页内容,存入数据库

来源:互联网 发布:返利源码 编辑:程序博客网 时间:2024/06/03 20:57
流程
  1. 提供要抓取的网页地址(列表)
  2. 提取网页列表中目标所有LINK
  3. 抓取LINK中的所有网页(爬虫)
  4. 解析正文内容
  5. 存入数据库

一、抓取任务(主程序)
  1. package com.test;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Date;
  4. import java.util.List;
  5. public class CatchJob {
  6.     
  7.     public String catchJob(String url){
  8.         
  9.         String document= null;
  10.         List allLinks = null;
  11.         try {
  12.             
  13. //          获取网页内容 
  14.             document = ExtractPage.getContentByUrl(url);
  15. //          获取页面指定内容的Link
  16.             allLinks = ExtractPage.getLinksByConditions(document, "http://www.free9.net/others/gift/");
  17.             if(allLinks!=null&&!allLinks.isEmpty()){
  18.                 for(int i=0;i<allLinks.size();i++){
  19.                     String link = (String)allLinks.get(i);
  20.                     String content = ExtractPage.getContentByUrl(link);
  21.                     ExtractPage.readByHtml(content);
  22.                 }           
  23.             }
  24.             
  25.         } catch (Exception e) {
  26.             // TODO Auto-generated catch block
  27.             e.printStackTrace();
  28.         }
  29.         
  30.         
  31.         return "success";
  32.         
  33.         
  34.     }
  35.     
  36.     
  37.     
  38.     
  39.     
  40.        
  41.      
  42.         public static void main(String[] args){
  43.             Long startTime = System.currentTimeMillis();
  44.             System.out.println(">>start.......");
  45.             String   httpProxyHost   =   "211.167.0.131";//default   http   proxy   
  46.             String   httpProxyPort   =   "80"//default   http   port   
  47.             System.getProperties().setProperty( "http.proxyHost", httpProxyHost);
  48.             System.getProperties().setProperty( "http.proxyPort", httpProxyPort);
  49.             CatchJob job = new CatchJob();
  50.             //System.out.println(job.catchJob("http://www.free9.net/others/gift/2008-12-09/12288046534312.htm"));
  51.             System.out.println(job.catchJob("http://www.free9.net/others/gift/"));
  52.             Date   date   =   new   Date(System.currentTimeMillis()-startTime);
  53.             SimpleDateFormat   sdf   =   new   SimpleDateFormat("HH:mm:ss "); 
  54.             String   s   =   sdf.format(date); 
  55.             System.out.println(">>end.......USE"+s+"秒");
  56.         }
  57. }

二、抓取网页内容,并解析

  1. package com.test;
  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.net.HttpURLConnection;
  6. import java.net.MalformedURLException;
  7. import java.net.URL;
  8. import java.util.ArrayList;
  9. import java.util.List;
  10. import org.htmlparser.Node;
  11. import org.htmlparser.NodeFilter;
  12. import org.htmlparser.Parser;
  13. import org.htmlparser.filters.NodeClassFilter;
  14. import org.htmlparser.filters.OrFilter;
  15. import org.htmlparser.tags.Div;
  16. import org.htmlparser.tags.LinkTag;
  17. import org.htmlparser.tags.TitleTag;
  18. import org.htmlparser.util.NodeList;
  19. import org.htmlparser.util.ParserException;
  20. public class ExtractPage {
  21.     
  22.     //抓取页面内容
  23.     public static String getContentByUrl(String url){
  24.         System.out.println("**********抓取页面内容***********");
  25.         StringBuffer document= null;
  26.         URL targetUrl;
  27.         try {
  28.             targetUrl = new URL(url);
  29.             HttpURLConnection con = (HttpURLConnection) targetUrl.openConnection();
  30.             con.setFollowRedirects(true);
  31.             con.setInstanceFollowRedirects(false);
  32.             con.connect();
  33.             
  34.             BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(),"gb2312"));
  35.             String s = "";
  36.             document= new StringBuffer();
  37.             while ((s = br.readLine()) != null) {
  38.                 document.append(s+"/r/n");
  39.             }
  40.             s=null;
  41.             br.close();
  42.             return document.toString();
  43.             
  44.         } catch (MalformedURLException e) {
  45.             // TODO Auto-generated catch block
  46.             e.printStackTrace();
  47.         } catch (IOException e) {
  48.             // TODO Auto-generated catch block
  49.             e.printStackTrace();
  50.         }
  51.         return null;
  52.         
  53.     }
  54.     
  55.     
  56. //  按页面方式处理.解析标准的html页面
  57.      public static void readByHtml(String result) throws Exception
  58.         {
  59.          System.out.println("**********按页面方式处理.解析标准的html页面***********");
  60.             Parser parser;
  61.             NodeList nodelist;
  62.             parser = Parser.createParser(result, "utf8");
  63.             NodeFilter textFilter = new NodeClassFilter(Div.class);
  64.             //NodeFilter linkFilter = new NodeClassFilter(LinkTag.class);
  65.             NodeFilter titleFilter = new NodeClassFilter(TitleTag.class);
  66.             OrFilter lastFilter = new OrFilter();
  67.             lastFilter.setPredicates(new NodeFilter[] { textFilter,titleFilter});
  68.             nodelist = parser.parse(lastFilter);
  69.             Node[] nodes = nodelist.toNodeArray();
  70.             StringBuffer page = new StringBuffer();
  71.             String id = "";
  72.             for (int i = 0; i < nodes.length; i++) {
  73.                 Node node = nodes[i];
  74.                 if (node instanceof Div) {
  75.                     Div textnode = (Div) node;
  76.                     id = textnode.getAttribute("id");
  77.                    if ("Zoom".equals(id)) {
  78.                     //System.out.println(textnode.getChild(5).toHtml());
  79.                     page.append(textnode.getChild(5).toHtml().toString());
  80.                     page.append(textnode.getChild(6).toHtml().toString());
  81.                    }
  82.                 }else if (node instanceof TitleTag) {
  83.                     TitleTag titlenode = (TitleTag) node;
  84.                     page.append(titlenode.getTitle().substring(0, titlenode.getTitle().indexOf("|")));
  85.                 }
  86.                 /*
  87.                 else if (node instanceof LinkTag) {
  88.                     LinkTag link = (LinkTag) node;
  89.                     line = link.getLink();
  90.                 } else if (node instanceof TitleTag) {
  91.                     TitleTag titlenode = (TitleTag) node;
  92.                     line = titlenode.getTitle();
  93.                 }
  94.                 */
  95.                 //if (isTrimEmpty(line))
  96.                     //continue;
  97.                 
  98.             }
  99.             System.out.println(page.toString());
  100.       
  101.         }
  102.      
  103.      //获取页面指定内容的Link
  104.      public static List getLinksByConditions(String result,String coditions){
  105.          System.out.println("**********//获取页面指定内容的Link***********");
  106.          List links = null;
  107.          Parser parser;
  108.          NodeList nodelist;
  109.          parser = Parser.createParser(result, "utf8");
  110.          NodeFilter linkFilter = new NodeClassFilter(LinkTag.class);
  111.          try {
  112.             links =  new ArrayList();
  113.             nodelist = parser.parse(linkFilter);
  114.             Node[] nodes = nodelist.toNodeArray();
  115.              for (int i = 0; i < nodes.length; i++) {
  116.                     Node node = nodes[i];
  117.                     if (node instanceof LinkTag) {
  118.                         LinkTag link = (LinkTag) node;
  119.                         if(link.toHtml().indexOf(coditions)!=-1&&link.toHtml().indexOf("index")==-1&&link.toHtml().indexOf(".htm")!=-1){
  120.                             System.out.println(link.toHtml());
  121.                             links.add(link.getLink());
  122.                         }
  123.                        
  124.                     }
  125.                     
  126.                     //if (isTrimEmpty(line))
  127.                         //continue;
  128.                     
  129.              }
  130.             
  131.             
  132.         } catch (ParserException e) {
  133.             // TODO Auto-generated catch block
  134.             e.printStackTrace();
  135.         }
  136.          
  137.          
  138.         return links;
  139.          
  140.      }
  141. }

原创粉丝点击