Guest User

Untitled

a guest
Sep 11th, 2013
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.78 KB | None | 0 0
  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template bf the editor.
  4.  */
  5. package crawler;
  6.  
  7. import crawler.Main;
  8. import java.io.BufferedReader;
  9. import java.io.IOException;
  10. import java.io.InputStreamReader;
  11. import java.net.URL;
  12. import java.util.ArrayList;
  13. import java.util.List;
  14. import java.util.logging.Level;
  15. import java.util.logging.Logger;
  16. import java.util.regex.Matcher;
  17. import java.util.regex.Pattern;
  18. import org.jsoup.Jsoup;
  19. import org.jsoup.nodes.Document;
  20. import org.jsoup.nodes.Element;
  21. import org.jsoup.select.Elements;
  22.  
  23.  
  24. /**
  25.  *
  26.  * @author syncsys
  27.  */
  28. public class Crawler implements Runnable {
  29. private static final String patternString = "[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})";
  30. private volatile String url;
  31. private volatile String nonProcessedLinkFromDB = null;
  32.  
  33.    
  34.    
  35.     private void crawl(String url) {
  36.        
  37.         //get url from db or use supplied url
  38.         //use boolean "first time" to check if its first time or sufficient urls are in db.
  39.         BufferedReader bf = null;
  40.         try {
  41.            
  42.              
  43.             URL target = new URL(url);
  44.             bf = new BufferedReader(
  45.                     new InputStreamReader(target.openStream())
  46.                  );
  47. // System.out.println("debug ========= 1");
  48.             StringBuilder html = new StringBuilder();
  49.             String inputLine;
  50.             while ((inputLine = bf.readLine()) != null) {
  51.                
  52.                 html.append(inputLine);
  53.                
  54.             }
  55.             List emailList = new ArrayList( getEmailList(html.toString()) );
  56.             List linkList = new ArrayList( getLinkList(html.toString(), url) );
  57.             System.out.println("Just worked on --------- "+ url);
  58. //             boolean markedLinkAsProcessedBoolean = new BasicDAO().markLinkAsProcesed(url);
  59. //            if(markedLinkAsProcessedBoolean){
  60. ////                System.out.println("Link marked processed in db "+url);
  61. //            }
  62.             Main.processedLinksCount++;
  63.             putEmailsInDB(emailList);
  64.             putLinksInDB(linkList);
  65. // System.out.println("debug ========= 2");      
  66.            
  67.            
  68.                
  69.         } catch (IOException ex) {
  70.             new Logging().logError(ex.toString());
  71.             new BasicDAO().deleteLink(url);
  72.         } catch (Exception ex) {
  73.             new Logging().logError(ex.toString());
  74.             new BasicDAO().deleteLink(url);
  75.         }finally{
  76.             if(bf !=null){
  77.                 try {
  78.                 bf.close();
  79.  // System.out.println("debug ========= 3");
  80.                 } catch (IOException ex) {
  81.                     new Logging().logError(ex.toString());
  82.                 }
  83.            
  84.             }
  85.  //  System.out.println("debug ========= 4");
  86.            
  87.  
  88.             synchronized(Crawler.class){
  89.                 nonProcessedLinkFromDB = getNonProcessedLinkFromDB();
  90.                 boolean markedLinkAsProcessedBoolean = new BasicDAO().markLinkAsProcesed(url);
  91.                 if(markedLinkAsProcessedBoolean){
  92. //                System.out.println("Link marked processed in db "+url);
  93.                 }
  94.             }
  95. //            System.out.println("fetched non-processed link from db: ++++++++++++++++ "+ nonProcessedLinkFromDB);
  96.             crawl(nonProcessedLinkFromDB);
  97.            
  98.  //           System.out.println("nonePlinkfromDB is ++++++++++++++++++++++++++" + nonProcessedLinkFromDB);
  99.            
  100.            
  101.   // System.out.println("debug ========= 5");        
  102.            
  103.             nonProcessedLinkFromDB= null;
  104.         }
  105.  ///       String line = "kj asdkfj a;sdlfkj <p>[email protected]</p> asdkfja sdlfkj [email protected] ads";
  106.     }
  107.    
  108.     private  List getLinkList(String html, String url) {
  109.         Document doc = Jsoup.parse(html);
  110.         Elements bodies = doc.select("body");
  111.         List linkList =  new ArrayList();
  112.         for(Element body : bodies ){
  113.             Elements aTags = body.getElementsByTag("a");
  114.             for (Element a: aTags){
  115.                String link =  a.attr("href");
  116.                if ( !(link.startsWith("#"))
  117.                      &&
  118.                     !(link.contains("()"))
  119.                      &&
  120.                     !(link.endsWith(".jpg"))
  121.                      &&
  122.                     !(link.endsWith(".jpeg"))  
  123.                      &&
  124.                     !(link.endsWith(".png"))  
  125.                      &&
  126.                     !(link.endsWith(".gif"))     ){
  127.                    
  128.                     if( link.startsWith("/") ){
  129.                         link = url+link;
  130.                     }
  131.                  linkList.add(link);
  132.                  //put link in db
  133.                }    
  134.             }
  135.         }
  136.        
  137.         return linkList;
  138.     }
  139.  
  140.     private  List getEmailList(String html) {
  141.         Pattern p = Pattern.compile(patternString);
  142.         Matcher m = p.matcher(html);
  143.         List emailList = new ArrayList();
  144.         while(m.find()){
  145.             emailList.add(m.group());
  146.             Main.nonUniqueEmailsCount++;
  147.         }
  148.        
  149.         return emailList;    
  150.     }
  151.    
  152.    
  153.  
  154.     private  String getNonProcessedLinkFromDB() {
  155.         return ( new BasicDAO().getNonProcessedLink() );
  156.     }
  157.  
  158.     private  void putEmailsInDB(List emailList) {
  159.         new BasicDAO().insertEmail(emailList);
  160.     }
  161.  
  162.     private  void putLinksInDB(List linkList) {
  163.        new BasicDAO().insertLinks(linkList);
  164.     }
  165.  
  166.     @Override
  167.     public void run() {
  168.         if(url != null){
  169.             crawl(url);
  170.         }else{
  171.  //           crawl();
  172.         }
  173.        
  174.     }
  175.     public Crawler(String url){
  176.         this.url = url;
  177.     }
  178.    
  179.     public Crawler(){
  180.         this.url =  null;
  181.     }
  182. }
Advertisement
Add Comment
Please, Sign In to add comment