sitze an einem Crawler...also er durchsucht Webseiten nach Links und speichert sie in einer txt.
Jetzt soll er die gespeicherten Links wieder aufrufen und da wieder das gleiche machen...aber nur bei Links bei denen er nochnicht war. Also müsste er bei jeden Link vorm öffen überprüfen ob der schon in der Liste steht.
Habt ihr ein paar Ideen wie ich das am besten angehe?
Bin für alles zu dankbar...Tips, Codeschnipsel und co.
MfG
hier noch mein Code bisher...
Java:
package crawler;importjava.io.BufferedReader;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStreamReader;importjava.net.URL;importjava.util.logging.Level;importjava.util.logging.Logger;importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassMaster{publicMaster(){Getsite();}publicvoidGetsite(){try{System.out.println("Website (ex. http://www.yoursite.com):");String text =null;BufferedReader reader =newBufferedReader(newInputStreamReader(System.in));
text = reader.readLine();try{URL url =newURL(text);BufferedReader br =newBufferedReader(newInputStreamReader(url.openStream()));String read ="";while(br.ready()){
read += br.readLine();}
br.close();Pattern p =Pattern.compile("<a.*?href=\"http://([^\"]+)\".*?>([\\w]+?)</a>");Matcher m = p.matcher(read);File file =newFile("ok.txt");FileOutputStream fout =newFileOutputStream(file);while(m.find()){String write ="http"+"://"+ m.group(1)+"\r\n";
fout.write(write.getBytes());}
fout.close();System.out.println("Links succesfully saved in file ok.txt");}catch(IOException e){
e.printStackTrace();}}catch(IOException ex){Logger.getLogger(Master.class.getName()).log(Level.SEVERE,null, ex);}}}
Ein wenig offtopic: Nimm dafür lieber einen StringBuilder. Ansonsten legts dir in jedem Schleifendurchlauf einen neuen String an wo immer eine Zeile angehängt ist.
aber wie schaffe ich es das er automatisch jede zeile liest und sie wieder öffnet und die Links in ok.txt speichert?
Der müsste dann ja eig. unendlich weit durchlaufen können...
Ok, ich verzweifel hier grad ein bisschen...er liest jetzt die Links aus der Datei (ok.txt)...aber wie schaffe ich es das die Links mit meinem Crawler wieder öffnet und alle neuen Links in die Datei schreibt?
Ok, ich habe es hinbekommen...jetzt liest er die erste ein und öffnet dann alles im Html-Code enthaltenen Links...und so weiter. Die besuchten Links werden dann in der ok.txt gespeichert.
aber nach ein paar Minuten kommen folgende Fehlermeldungen(habe auf News, Tests, Tipps, Cheats, Lösungen und Videos zu PC-Spielen - PC GAMES.DE gestartet):
Code:
run:
java.io.FileNotFoundException: http://extreme.pcgameshardware.de/newreply.php?do=newreply&t=102842
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1311)
at java.net.URL.openStream(URL.java:1010)
at crawler.ReadFile3.main(readfile.java:54)
java.io.FileNotFoundException: http://www.pcgames.de/Heft-Archiv/
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1311)
at java.net.URL.openStream(URL.java:1010)
at crawler.ReadFile3.main(readfile.java:54)
er macht trotzdem weiter aber was sagen mir diese Fehler und wie bekomme ich sie weg oder wie kann ich sie umgehen?
und noch eine Frage wie sieht so eine Abfrage, überprüfe ob der Link schon in der Liste ist wenn ja überspringe ihn, in meinem Beispiel aus?
mein Prog:
Java:
package crawler;importjava.io.*;importjava.net.URL;importjava.util.logging.Level;importjava.util.logging.Logger;importjava.util.regex.Matcher;importjava.util.regex.Pattern;classReadFile3{publicstaticvoidmain(String[] args)throwsIOException{/* System.out.println("Website (ex. http://www.yoursite.com):");
InputStreamReader eingabe = new InputStreamReader(System.in);
BufferedReader ein = new BufferedReader(eingabe);
File out = new File("ok.txt");
FileOutputStream ausgabe = new FileOutputStream(out);
DataOutputStream raus = new DataOutputStream(ausgabe);
String s = ein.readLine();
while (!s.equals(".")) {
raus.writeBytes(s+"\n");
s = ein.readLine();
}
*/FileReader fr =newFileReader("ok.txt");BufferedReader br2 =newBufferedReader(fr);String zeile ="";while((zeile = br2.readLine())!=null)try{URL url =newURL(zeile);BufferedReader br =newBufferedReader(newInputStreamReader(url.openStream()));String read ="";while(br.ready()){
read += br.readLine();}Pattern p =Pattern.compile("<a.*?href=\"http://([^\"]+)\".*?>([\\w]+?)</a>");Matcher m = p.matcher(read);FileOutputStream fout =newFileOutputStream("ok.txt",/*append*/true);while(m.find()){String write ="http"+"://"+ m.group(1)+"\r\n";
fout.write(write.getBytes());}}catch(IOException e){
e.printStackTrace();}}}