Ergebnis 1 bis 10 von 10

Thema: PHP Crawler - Sitemap

  1. #1
    Teeny
    Registriert seit
    15.04.2009
    Beiträge
    20
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard PHP Crawler - Sitemap

    Hallo,

    ich möchte meine gesamte Webseite nach Links durchsuchen, diese in einer DB abspeichern und später als Sitemap ausgeben. Da es sich aktuell um ca. 1500. Seiten handelt und jederzeit welche dazukommen, sollte das automatisch funktionieren.

    Ich habe bereits ein Skript soweit geschrieben, dass die Links ausliest und in die DB speichert. Dabei gibts aber 2 probleme a) die Zeit, die beansprucht wird und b) es werden auch ausgehende Links mit aufgelistet.

    Die Klasse schaut so aus (etwas gekürzt):

    PHP-Code:
    public function __construct($url) {
         global 
    $db;  
         
         
    $this->mark$this->getContent($url); 

      }

    public function 
    getContent($url) {
        return 
    file_get_contents($url);  
      }

    protected function 
    GetLinks() {
        if (!empty(
    $this->mark)){
          
    preg_match_all('/\s+href\s*=\s*[\"\']?([^\s\"\']+)[\"\'\s]+/ims'$this->markup$linksPREG_PATTERN_ORDER);
          foreach(
    $links as $key => $val) {
          return !empty(
    $links[1]) ? $links[1] : FALSE;
        }
      } 
    Ich möchte bei der Funktion GetLinks etwas verändern, sodass in das Array keine fremden URLS geschrieben werden, sondern nur meine. Kann ich die regulären Ausdruck so anpassen, dass direkt fremde URLS ausgeschlossen werden? Wenn ja hat jemand eine Lösung oder Tip?

    Wenn erstmal die fremden URLS entfernt wurden aus dem Array, wird die Schleife die durchlaufen werden muss auch kürzer und damit sollte die Geschwindigkeit sich besssern.

    Ich steht ein bisschen aufm Schlauch^^
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!

  2. #2
    Pion
    Gast

    Standard AW: PHP Crawler - Sitemap

    Nunja im Grunde muss das Script ja nur einmal langsam ablaufen und dann musst du ja nach Sachen die in der DB stehen nicht mehr abfragen

    Zum Script selber prüf doch einfach per str_pos ob zb dein Domainname in der Url enthalten ist, die Frage ist natürlich welche Urls du benutzt


    Bitte kein GLobal bei OOP
    Geändert von Pion (04.08.2010 um 19:24 Uhr)

  3. #3
    Prinz(essin) Avatar von -Bambino-
    Registriert seit
    21.12.2007
    Ort
    Berlin
    Beiträge
    865
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings
    Blog-Einträge
    4

    Standard AW: PHP Crawler - Sitemap

    Durchgehen und per Regular Expressions nach Links suchen, da bietet sich das ja super an.


    Du kannst die einzelnen Elemente doch noch auf zugehörigkeit zur Webseite testen:

    musst halt nur die aktuelle website, oder die kurzform davon, dh. statt http://forum-hilfe.de nur forum-hilfe und nimmst dass dann in die RegEx rein als festen bestandteil.. =)
    Geändert von -Bambino- (05.08.2010 um 00:35 Uhr)
    wert.TeeeX.de
    Wie gut ist die technische Umsetztung deiner Website wirklich?
    Teste es!

  4. #4
    Teeny
    Themenstarter

    Registriert seit
    15.04.2009
    Beiträge
    20
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: PHP Crawler - Sitemap

    ja, ich habe nun ein paar Abfragen hinzugefügt, welche Sicherstellen das es auch um echte Links von einer Webseite handelt und nicht um irgendwelche css-Dateien usw.

    Funktioniert alles wunderbar. Nur das die Geschwindigkeit bei großen Webseites nicht unbedingt die schnellste ist. Lässt sich vermutlich auch nicht schneller umsetzten in PHP?!

  5. #5
    Prinz(essin) Avatar von -Bambino-
    Registriert seit
    21.12.2007
    Ort
    Berlin
    Beiträge
    865
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings
    Blog-Einträge
    4

    Standard AW: PHP Crawler - Sitemap

    http://www.forum-hilfe.de/showthread.php?t=48528

    Vielleicht hilft dir das.. aber ich denke bei 1500 Seite ist nunmal mit etwas Zeit zu rechnen... =)
    wert.TeeeX.de
    Wie gut ist die technische Umsetztung deiner Website wirklich?
    Teste es!

  6. #6
    Teeny
    Themenstarter

    Registriert seit
    15.04.2009
    Beiträge
    20
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: PHP Crawler - Sitemap

    Danke für eure Hilfe. Ein sehr interessanter Beitrag von Dodo.

    Man muss auch überlegen was das Skript wirklich macht. Jede URL wird geöffnet und nach Links durchsucht. Die gefunden Links speichere ich in ein Array und jage diese durch eine foreach Schleife in die Datenbank (vorher werden noch ein paar abfragen gemacht).

    Ich habe verschiedene Varriationen getestet und meist wird es nur langsamer.

    Achja, was ich noch wissen wollte, warum kein global in OOP (Pion hatte das erwähnt)?

  7. #7
    König(in) Avatar von crAzywuLf
    Registriert seit
    03.02.2009
    Beiträge
    1.175
    Danke
    1
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: PHP Crawler - Sitemap

    Zitat Zitat von jumpthis Beitrag anzeigen
    Danke für eure Hilfe. Ein sehr interessanter Beitrag von Dodo.

    Man muss auch überlegen was das Skript wirklich macht. Jede URL wird geöffnet und nach Links durchsucht. Die gefunden Links speichere ich in ein Array und jage diese durch eine foreach Schleife in die Datenbank (vorher werden noch ein paar abfragen gemacht).

    Ich habe verschiedene Varriationen getestet und meist wird es nur langsamer.

    Achja, was ich noch wissen wollte, warum kein global in OOP (Pion hatte das erwähnt)?
    pack das komplette Script doch mal hier rein, dann findet sich sicher noch die eine oder andere Zeile, die sich verbessern lässt
    Gruß crAzywuLf

  8. #8
    Pion
    Gast

    Standard AW: PHP Crawler - Sitemap

    Im Grunde ist es egal ob OOP oder nicht man sollte nie GLOBALS verwenden und vorallem in OOP nicht dafür gibts Pattern/(Registry) und selbst die nur verwenden wenn es wirklich notwendig ist


    Zu deinem Script kann man es bestimmt um das 2 fache beschleunigen und mit paar Tools um das 10 fache

  9. #9
    Teeny
    Themenstarter

    Registriert seit
    15.04.2009
    Beiträge
    20
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: PHP Crawler - Sitemap

    Zu deinem Script kann man es bestimmt um das 2 fache beschleunigen und mit paar Tools um das 10 fache
    Was wären das denn für ein paar Tools?

    Habe das Script soweit mal komplett in diesem Post eingebunden. Bin für Vorschläge gerne offen

    global.php
    PHP-Code:
    <?
     
    // Php.ini Set
     
    error_reporting(E_ALL);
     
    ini_set('display_errors'1); 
     
     
    // Include
     
    require("../../include/config.php"); 
     require(
    "../../include/db.class");
     
    $db = new db($sqlhost,$sqldb,$sqluser,$sqlpassword);

     require(
    "class.php");

     
    // Config für Crawler
     
    $MAX_DEPP 6;
     
    $ALLOW_EXT = array('html''htm''xhtml''php''jpg');
    ?>
    class.php
    PHP-Code:
    <?
     
     
    /* Enthält die Funktionen fürs crawlen */

      // SET URL die 30 Tage alt sind auf 0
      
    function UpdateUrls() {
          global 
    $db;
          
    $db->actionQuery("UPDATE crawler SET crawled='0' WHERE date<".time()."-2592000");
       }
      
      
    // Holt eine URL aus der DB
      
    function getURLToCrawl($pageid) {
          global 
    $db;
          
    $url $db->singleQuery("SELECT id FROM crawler WHERE crawled = '0' AND page_id='".$pageid."'");
          
    $id $url['id'];
          return 
    $id;
       }
      
      
    // Prüft ob URL erreichbar
      
    function doUrl($URL) {
          global 
    $ALLOW_EXT$fullurl;
          
    $handle = @fopen ($URL"r");
          if (
    $handle === false) return false;
          
          
    $fnpath substr($URLstrlen($fullurl));
          if (
    $fnpath !== false) {
             
    $fnsplit explode("."$fnpath);
             
    $fnext $fnsplit[count($fnsplit)-1];
             if (!
    in_array($fnext$ALLOW_EXT) && strlen($fnext) <= && strpos($fnext'/') === false) return false;
          }
          
          
    $buffer "";
          while (!
    feof ($handle)) {
             
    $buffer .= fgets($handle4096);
          }
          
    fclose ($handle);
          
          return 
    $buffer;
       }
      
      
    // Holt alle URLS von der Seite
      
    function getUrls($crowl_page$deep 0) {
          global 
    $MAX_DEPP;
          if (
    $deep >= $MAX_DEPP) return array();
          
    $match_url = array();
          
    $re_expresion "/\s+href\s*=\s*[\"\']?([^\s\"\']+)[\"\'\s]+/ims";
          
    preg_match_all ($re_expresion$crowl_page$match_urlPREG_PATTERN_ORDER);
          return 
    $match_url[1];
       }
      
      
    // Parsed eine URL richtig
      
    function parseURL($URL_to_parse$fullurl$aktive_URL) {
          if (
    strpos ($URL_to_parse"://") != && substr($URL_to_parse07) != "http://") return false;
          if (
    substr($URL_to_parse01) != "/" && substr($URL_to_parse07) != "http://"$URL_to_parse $aktive_URL "/" $URL_to_parse;
          if (
    substr($URL_to_parse07) != "http://"$URL_to_parse $fullurl "/" $URL_to_parse;
          if(
    strpos($URL_to_parse,"#")!==false){$URL_to_parse "";}
          if(
    strpos($URL_to_parse,"javascript")!==false){$URL_to_parse "";}
          
          
    $URL_to_parse str_replace("/./""/"$URL_to_parse);
          
    $URL_to_parse preg_replace("/\/[\/]+/i""/"$URL_to_parse);
          
    $URL_to_parse str_replace("http:/""http://"$URL_to_parse);
          
    $URL_to_parse str_replace("&amp;""&"$URL_to_parse);
          
    $URL_to_parse preg_replace("/sid=[\w\d]+/i"""$URL_to_parse);
          
          return 
    $URL_to_parse;
       }
       
       
    // Durchgeht alle URLS
       
    function cleanURLs($get_URLs$fullurl$aktive_URL) {
          
    $URLs_cleaned = array();
          
    $counter 0;
          foreach(
    $get_URLs as $id => $URL) {
             
    $URL parseURL($URL$fullurl$aktive_URL);
             if (
    $URL === false || strpos ($URL$fullurl) !== 0) continue;
             
    $URLs_cleaned[$counter++] = $URL;
          }
          return 
    $URLs_cleaned;
       }


        
    // Fügt eine gefunde URL zu DB hinzu
        
    function add($pageid$new_urls$deep) {
          foreach(
    $new_urls as $id => $URL)    {
             
    toDB($pageid$URL$deep);
          }
          
          return 
    0;
       }
       
       
    // DB Funtkion
       
    function toDB($pageid$URL$deep) {
         global 
    $db;
          
    $registrierte_site $db->singleQuery("SELECT COUNT(id) FROM crawler WHERE site='".$URL."' AND page_id='".$pageid."'");
           
    $registrierte_site $registrierte_site['COUNT(id)'];
          if (
    $registrierte_site == && $URL != "") {
             
    $pr "";
             
    $db->actionQuery("INSERT INTO crawler (site, deep, date,pr, page_id) VALUES('".$URL."','".$deep."','".time()."','".$pr."','".$pageid."')");
             return 
    1;
          } 
          return 
    0;
       }
     
    ?>
    crawler.php
    PHP-Code:
    <?php 

    set_time_limit
    (0);
    require(
    "global.php"); 
     
     
    // Seite und ID
     
    $fullurl "http://www.forum-hilfe.de";
     
    $pageid 2;
     
     
    // Prüfen ob diese Seite bereits in der DB
     
    $registrierte_site $db->singleQuery("SELECT COUNT(id) FROM crawler WHERE site='".$fullurl."'  AND page_id='".$pageid."'");
     
    $registrierte_site $registrierte_site['COUNT(id)'];
     
     
    // Soll mal eine Pagerank abfrage rein
     
    $pr "";
     
     
    // Wenn nicht vorhanden einfügen
     
    if($registrierte_site == 0) {
     
    $db->actionQuery("INSERT INTO crawler 
                (site, deep, date,pr, page_id) VALUES('"
    .$fullurl."','0','".time()."','".$pr."','".$pageid."')");
     }
     
     
    // Alle URLS die 30 Tage alt sind auf "none gecrawlt" setzen
     
    UpdateUrls();
     
     
    // ALLE URLS der Domain durchgehen, den Inhalt dursuchen und ggf. neue Links seztzen
     
    while($URL_ID getURLToCrawl($pageid)) {
         
         
    // Setzt aktuelle URL auf gecrawlt
         
    $db->actionQuery("UPDATE crawler SET crawled='1' WHERE id='".$URL_ID."'");
         
         
    // Holt die Infos von der URL aus der DB
         
    $SQL $db->singleQuery("SELECT site, deep FROM crawler WHERE id='".$URL_ID."'");
         
    $NEW_URL $SQL['site']; $NEW_DEEP $SQL['deep'];
         
         
    // Parse 
         
    $aktive_URL preg_replace("/([^\/])\/[^\/]+$/i""\\1"$NEW_URL);
         
         
    // Prüefe ob URL vorhanden
         
    $crawl doUrl($NEW_URL);
         
         
    // Siete nicht vorhanden, dann löschen
         
    if ($crawl === false) {
           
    $db->actionQuery("DELETE FROM crawler WHERE id='".$URL_ID."'");
           continue;
         }
         
         
    // Inhalt laden und URL durchsuchen 
         
    $get_URLs getUrls($crawl$NEW_DEEP 1);
         
         
    // Urls parsen
         
    $clean_URLs cleanURLs($get_URLs$fullurl$aktive_URL);
         
         
    // Neue URLS in die DB
         
    $URLs_to_crawl add($pageid$clean_URLs$NEW_DEEP 1);
     }


    ?>

  10. #10
    Pion
    Gast

    Standard AW: PHP Crawler - Sitemap

    Okay also folgendes, nicht pro Link einen extra Query verwenden

    Am besten mal Zeiten messen und schauen woran es am meisten liegt

    doUrl am besten mal anders schreiben andere Funktion zum überprüfen , breaks verwenden ogott da ist so viel machbar^^

    Wenn nix mehr geht dann Complimire deinen PHP Code, aber das ist nicht nötig

    mfg

Ähnliche Themen

  1. sitemap.xml
    Von rammstein im Forum HTML & CSS Forum
    Antworten: 9
    Letzter Beitrag: 31.10.2009, 23:41
  2. xml sitemap
    Von Unregistriert im Forum HTML & CSS Forum
    Antworten: 2
    Letzter Beitrag: 18.10.2009, 23:00
  3. Sitemap probleme - php
    Von SeekeR im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 3
    Letzter Beitrag: 10.01.2008, 21:12
  4. Sitemap: client.php & sitemap.php! Was nun?
    Von Mütze im Forum Promotion - SEO - Suchmaschine (Google & Co) – Mitarbeiter & Linkpartnersuche
    Antworten: 11
    Letzter Beitrag: 26.02.2007, 00:22
  5. verzeichnis+suchmaschine+crawler
    Von tayyfan im Forum Eure Homepages und Foren - Vorstellung und Bewertungen
    Antworten: 0
    Letzter Beitrag: 28.03.2006, 19:06

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •