See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 29455|Vastuse: 11

[Java lähtekood] Java versioon veebikraapijast

[Kopeeri link]
Postitatud 30.11.2014 16:56:56 | | | |
[mw_shl_code=java, tõene]/**
* @author Jack.Wang
*
*/
importida java.io.BufferedReader;
importida java.io.InputStreamReader;
importida java.net.URL;
importida java.util.ArrayList;
importida java.util.HashMap;
importida java.util.HashSet;
importida java.util.LinkedHashSet;
importida java.util.regex.Matcher;
import java.util.regex.Pattern;

Otsi veebikraapijaid
public class SearchCrawler implements Runnable {

/*
  * disallowListCache vahemälurobot ei luba otsitud URL-e. Robot protokoll seab robots.txt faili veebilehe juurkaustas,
  * Täpsustab, millised saidi lehed on piiratud otsingu jaoks otsitavad.
  * Otsinguprogramm peaks otsingu käigus need alad vahele jätma, siin on näide robots.txt:
  * # robots.txt http://somehost.com/ Kasutaja-agendi jaoks:
  * Keela: /cgi-bin/
  * Keela: /registreerimine # Keela robotid registreerimislehel
  * Keela: /login
  */

private HashMap<String, ArrayList<String>> disallowListCache = uus HashMap<String, ArrayList<String>>();
ArrayList<String> errorList = uus ArrayList<String>(); Veateate
ArrayList<String> tulemus = uus ArrayList<String>(); Otsitud tulemused
String startUrl; Lähtepunkt otsingu alustamiseks
int maxUrl; Maksimaalne töödeldud URL-ide arv
String searchString; Stringid, mida otsida
boole'i tähteSensitive = väär; Kas olla tähetundlik või mitte
boolean limitHost = väär; Kas otsida piiratud hosti sees

public SearchCrawler(String startUrl, int maxUrl, String searchString) {
  this.startUrl = startUrl;
  this.maxUrl = maxUrl;
  this.searchString = searchString;
}

public ArrayList<String> getResult() {
  tagastustulemus;
}

public void run() { // Alusta otsingulõime
  crawl(startUrl, maxUrl, searchString, limitHost, caseSensitive);
}

URL-i vormindamise tuvastamine
private URL verifyUrl(String url) {
  Töödeldakse ainult HTTP URL-e.
  if (!url.toLowerCase().startsWith("http://"))
   return null;
  URL verifiedUrl = null;
  proovi {
   verifiedUrl = uus URL(url);
  } püüa (Erand e) {
   return null;
  }
  return verifiedUrl;
}

Tuvastab, kas robot lubab ligipääsu antud URL-ile.
private boolean isRobotAllowed(URL urlToCheck) {
  String host = urlToCheck.getHost().toLowerCase(); Hangi host, kes annab RUL-i
  System.out.println("host="+host);

  Hangi URL-ide vahemälu, mida host ei luba otsida
  ArrayList<String> disallowList = disallowListCache.get(host);

  Kui sul veel vahemälu pole, laadi see alla ja salvesta vahemällu salvestamine.
  if (disallowList == null) {
   disallowList = uus ArrayList<String>();
   proovi {
    URL robotsFileUrl = uus URL("http://" + host + "/robots.txt");
    BufferedReader = uus BufferedReader(
      new InputStreamReader(robotsFileUrl.openStream()));

    Loe robotifaili, et luua nimekiri teedest, millele ei ole lubatud ligi pääseda.
    Keelpilliliin;
    while ((line = reader.readLine()) != null) {
     if (line.indexOf("Disallow:") == 0) {// Kas see sisaldab "Disallow:"
      String disallowPath = line.substring("Disallow:"
        .length()); Hangi tee keelatud ligipääsu juurde

      Kontrolli annotatsioone.
      int commentIndex = disallowPath.indexOf("#");
      if (commentIndex != -1) {
       disallowPath = disallowPath.substring(0,
         commentIndex); Eemalda kommentaar
      }

      disallowPath = disallowPath.trim();
      disallowList.add(disallowPath);
     }
    }

    Vahemäluteed, millele see host ei tohi ligi pääseda.
    disallowListCache.put(host, disallowList);
   } püüa (Erand e) {
    return true; Veebilehe juurkataloogis pole robots.txt faili ja see tagastab tõe
   }
  }

  Stringifail = urlToCheck.getFile();
  System.out.println("fail getFile()="+file);
  for (int i = 0; i < disallowList.size(); i++) {
   String disallow = disallowList.get(i);
   if (file.startsWith(disallow)) {
    tagasta vale;
   }
  }

  return true;
}

private String downloadPage(URL pageUrl) {
  proovi {
   Ava link URL-iga lugemiseks.
   BufferedReader = uus BufferedReader(uus InputStreamReader(
     pageUrl.openStream())));

   Loe lehekülg puhvrisse.
   Keelpilliliin;
   StringBuffer pageBuffer = uus StringBuffer();
   while ((line = reader.readLine()) != null) {
    pageBuffer.append(line);
   }

   return pageBuffer.toString();
  } püüa (Erand e) {
  }

  return null;
}

Eemalda URL-ist "www"
private String removeWwwFromUrl(String url) {
  int index = url.indexOf("://www.");
  if (indeks != -1) {
   return url.substring(0, index + 3) + url.substring(index + 7);
  }

  return (URL);
}

Analüüsi lehte ja leia link
private ArrayList<String> retrieveLinks(URL pageUrl, string pageContents,
   HashSet crawledList, boolean limitHost) {
  Koosta lingi sobitusmuster regulaaravaldiste abil.
  Pattern p = Pattern.compile("<a\\s+href\\s*=\\s*\"?(. *?) [\"|>]",
    Pattern.CASE_INSENSITIVE);
  Matcher m = p.matcher(pageContents);

  ArrayList<String> linkList = uus ArrayList<String>();
  samal ajal (m.find()) {
   String link = m.group(1).trim();

   if (link.length() < 1) {
    jätka;
   }

   Jäta selle lehe link vahele.
   if (link.charAt(0) == '#') {
    jätka;
   }

   if (link.indexOf("mailto:") != -1) {
    jätka;
   }

   if (link.toLowerCase().indexOf("javascript") != -1) {
    jätka;
   }

   if (link.indexOf("://") == -1) {
    if (link.charAt(0) == '/') {// käsitleb absoluutselt
     link = "http://" + pageUrl.getHost() + ":"
       + pageUrl.getPort() + link;
    } muidu {
     String file = pageUrl.getFile();
     if (file.indexOf('/') == -1) {// käsitleb suhtelisi aadresse
      link = "http://" + pageUrl.getHost() + ":"
        + pageUrl.getPort() + "/" + link;
     } muidu {
      Stringi tee = file.substring(0,
        file.lastIndexOf('/') + 1);
      link = "http://" + pageUrl.getHost() + ":"
        + pageUrl.getPort() + tee + link;
     }
    }
   }

   int index = link.indexOf('#');
   if (indeks != -1) {
    link = link.substring(0, indeks);
   }

   link = eemalda WwwFromUrl(link);

   URL verifiedLink = verifyUrl(link);
   if (verifiedLink == null) {
    jätka;
   }

   /* Kui piirad hoste, välista need URL-id, mis ei vasta kriteeriumidele */
   kui (limitHost
     && !pageUrl.getHost().toLowerCase().equals(
       verifiedLink.getHost().toLowerCase())) {
    jätka;
   }

   Jäta vahele need lingid, mis on juba töödeldud.
   if (crawledList.contains(link)) {
    jätka;
   }

   linkList.add(link);
  }

  return (linkList);
}

Otsi allalaaditud veebilehe sisu, et teada saada, kas lehel on kindel otsingustring

private boolean searchStringMatches(String pageContents,
   String searchString, boolean caseSensitive) {
  String searchContents = pageContents;
  if (!caseSensitive) {// if inshocksensitive
   searchContents = pageContents.toLowerCase();
  }

  Muster p = Pattern.compile("[\\s]+");
  String[] terminid = p.split(searchString);
  for (int i = 0; Ma < terminid.pikkus; i++) {
   if (caseSensitive) {
    if (searchContents.indexOf(terms) == -1) {
     tagasta vale;
    }
   } muidu {
    if (searchContents.indexOf(terms.toLowerCase()) == -1) {
     tagasta vale;
    }
   }
  }

  return true;
}

Tee tegelik otsinguoperatsioon
public ArrayList<String> crawl(string startUrl, int maxUrls,
   String searchString, boolean limithost, boolean caseSensitive) {

  HashSet<String> crawledList = uus HashSet<String>();
  LinkedHashSet<String> toCrawlList = uus LinkedHashSet<String>();

  if (maxUrls < 1) {
   errorList.add("Kehtetud maksimaalse URL-i väärtus.");
   System.out.println ("Kehtetud maksimaalsete URL-ide väärtus.");
  }

  if (searchString.length() < 1) {
   errorList.add("Puuduv otsingustring.");
   System.out.println ("Puuduv otsingustring");
  }

  if (errorList.size() > 0) {
   System.out.println("err!!");
   return errorList;
  }

  Liiguta www alg-URL-ist välja
  startUrl = eemalda WwwFromUrl(startUrl);

  toCrawlList.add(startUrl);
  while (toCrawlList.size() > 0) {

   if (maxUrls != -1) {
    if (crawledList.size() == maxUrls) {
     paus;
    }
   }

   Leia URL nimekirja allosas.
   String url = toCrawlList.iterator().next();

   Eemalda URL indekseerimisnimekirjast.
   toCrawlList.remove(url);

   Teisenda stringi URL-i objektiks.
   URL verifiedUrl = verifyUrl(url);

   Jäta URL vahele, kui robotitel pole lubatud sellele ligi pääseda.
   if (!isRobotAllowed(verifiedUrl)) {
    jätka;
   }

   Lisa töödeldud URL-id CrawledListi
   crawledList.add(url);
   String pageContents = downloadPage(verifiedUrl);

   if (pageContents != null && pageContents.length() > 0) {
    Hangi lehelt kehtiv link
    ArrayList<String> lingid = retrieveLinks(verifiedUrl,
      pageContents, crawledList, limitHost);

    toCrawlList.addAll(lingid);

    kui (searchStringMatches(pageContents, searchString,
      caseSensitive)) {
     result.add(URL);
     System.out.println(url);
    }
   }

  }
  tagastustulemus;
}

Peamine funktsioon
public static void main(String[] args) {
  SearchCrawler crawler = uus SearchCrawler("http://www.itsvse.com/", 100,"Delver_Si");
  Thread search = uus Thread (roomaja);
  System.out.println ("Alusta otsingut...");
  System.out.println("tulemus:");
  search.start();
  proovi {
   search.join();
  } catch (InterruptedException e) {
   TODO Automaatselt genereeritud püügiblokk
   e.printStackTrace();
  }
}
}
[/mw_shl_code]

1.png (100.02 KB, Allalaadimiste arv: 591)

2.png (72.18 KB, Allalaadimiste arv: 596)

3.png (188.46 KB, Allalaadimiste arv: 606)





Eelmine:PHP moodustab 82,2% suurimatest 100W veebilehtedest
Järgmine:Java Edition veebilähtekoodi vaatur
Postitatud 30.11.2014 18:07:24 |
Nähes uudist, et Jack Ma on veel 300 miljoni kaugusel Li Ka-shingi järele jõudmisest, et saada Aasia rikkaimaks meheks, naersin südames ja kontrollisin kiiresti oma järjestust internetis, mis praktiliselt ei olnud mõjutatud, ning edetabelikoht jäi umbes 1,4 miljardi peale, nüüd olen kergendunud! Tegelikult olen ka mina unistuste inimene, juba lapsest saati, unistasin, et ühel päeval sõidan Lamborghini sportautoga tagasi meie kodulinna päikeseprillidega pärast peaaegu 20 aastat rasket tööd, nüüd on unistus poolenisti täitunud, mul on juba oma päikeseprillid, ainult sportauto, unistus hakkab täituma ja ma olen natuke elevil, kui sellele mõtlen!
 Üürileandja| Postitatud 30.11.2014 18:28:24 |

Veebikraapija (tuntud ka kui ämblik, veebibot, mida FOAF kogukonnas sagedamini nimetatakse veebijälitajaks) on programm või skript, mis kraabib automaatselt infot Maailmaveebi kohta vastavalt teatud reeglitele. Teised harvemini kasutatavad nimed on sipelgad, automaatindeksid, emulaatorid või ussid.
Postitatud 30.11.2014 17:40:16 |
Delver_Si Postitatud 2014-11-30 17:22
Soovin kirjutada tööriista, mis plahvatab mssql ftp ja teisi tööriistu, kuid seda pole lihtne veebis kasutada

Kirjuta see, ma olen su seljatagune!  Lammutustööriistad on üldiselt kirjutatud .net-is ja Java keeles on neid vähe, nii et saad ühe kirjutada ka Javas!
Postitatud 30.11.2014 17:19:07 |
Ma pühin, see on hea nukk häkkimistööriista tegemiseks!
Postitatud 30.11.2014 17:22:22 |
Mina kogusin selle esimesena, kuigi see on praegu kasutu, usun, et see tuleb tulevikus kasuks!
 Üürileandja| Postitatud 30.11.2014 17:22:42 |
Soovin kirjutada tööriista, mis plahvatab mssql ftp ja teisi tööriistu, kuid seda pole lihtne veebis kasutada
Postitatud 30.11.2014 18:08:16 |
Mida sa mõtled, et ma ei saa aru
 Üürileandja| Postitatud 30.11.2014 18:32:40 |
admin postitatud 2014-11-30 17:40
Kirjuta see, ma olen su seljatagune!  Lammutustööriistad on üldiselt kirjutatud .net-is ja Java keeles on neid vähe, nii et saad ühe kirjutada ka Javas!

Komplektis olev mssql blaster ei suuda isegi minu oma lasta,
 Üürileandja| Postitatud 30.11.2014 18:33:09 |
Test postitatud 2014-11-30 18:07
Nähes uudist, et Jack Ma on endiselt 300 miljonit puudu, et jõuda Li Ka-shingile järele ja saada Aasia rikkaimaks meheks, klõpsas tema süda ja ta kontrollis kiiresti internetist oma edetabelit ning see polnud tegelikult mõjutatud...

Sa oled ju veebimeistri vest, eks?"
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com