Coding: Lass uns eine Website crawlen

php crawler code

Ich bin fasziniert von Crawlern und bestrebt, selbst einen in php zu schreiben. Das folgende Script stellt den ersten Lösungsweg dar und erhebt keinesfalls den Anspruch perfekt, ohne Fehler oder ideal zu sein. Dennoch funktioniert es bisher gut.

Table of Contents

    Die Startseite

    Um den Crawler losschicken zu können, müssen wir ihm zuerst sagen, wohin er gehen soll. Um nicht immer im Code herumzuwurschteln, basteln wir uns eine kleine, aber feine Landingpage mit einer Inputform.

    Index:

    <html>
    <head>
    <link rel="stylesheet" type="text/css" href="style.css">
    <title>SearchX</title>
    </head>
    <body>
    <div id="head">
    CrawlX <span style="font-size:12px;">- a coding project from Johannes</span>
    </div>
    <div id="navi">
    <ul>
    <li><a class="active" href="#home">Start</a></li>
    </ul>
    </div>
    <div id="form">
    <form action="crawl_test.php" method="get">
    <h2>URL EINGEBEN:</h2><br>
    <input type="text" name="name" value="http://">
    <input type="submit" value="Los!">
    </form>
    </div>
    </body>
    </html>

     

    Um das Theme nicht sich selbst zu überlassen, gibt es eine kleine Verschönerungskur durch CSS

    body {
    background-color: #4CAF50;
    margin: 0px;
    }
    #head {
    background-color: #ffffff;
    font-size:25px;
    }
    #navi {
    text-align: center;
    background-color: #000000;
    height: 44px;
    overflow: hidden;
    }
    #form {
    padding: 15px;
    margin: 0 auto;
    background-color: #ccffcc;
    text-align: center;
    }
    input {
    width: 200px;
    padding: 12px 20px;
    margin: 8px 0;
    box-sizing: border-box;
    }
    input[type=text]:focus {
    background-color: lightblue;
    }
    input[type=button], input[type=submit], input[type=reset] {
    background-color: #4CAF50;
    border: none;
    color: white;
    padding: 16px 32px;
    text-decoration: none;
    margin: 4px 2px;
    cursor: pointer;
    }
    ul {
    list-style-type: none;
    margin: 0;
    padding: 0;
    overflow: hidden;
    background-color: #333;
    }
    li {
    float: left;
    }
    li a {
    display: block;
    color: white;
    text-align: center;
    padding: 14px 16px;
    text-decoration: none;
    }
    /* Change the link color to #111 (black) on hover */
    li a:hover {
    background-color: #111;
    }
    h2 {
    font-family: Courier;
    }

     

    Da wir nun die Startseite fertig haben, machen wir uns an den eigentlichen PHP Code.

    Der PHP Crawler

    Um uns das Leben zu vereinfachen, binden wir den Simple HTML Dom Parser ein. Zuvor prüfen wir allerdings noch die Eingaben des Users. Sollte nichts in das Feld eingegeben werden, wird der Benutzer aufgefordert dies zu tun. Bei einem vergessenem „http://“ ebenso.

    <?php
    if (strlen($_GET["name"]) == 0) {
    echo "Bitte eine URL eingeben!";
    }
    else if (strpos($_GET["name"], 'http') === false) {
    echo "Bitte mit http:// eingeben";
    }
    /*else if (strpos($_GET["name"], 'https://') === false) {
    echo "Bitte mit http:// eingeben";
    }*/
    else {
    ?>

     

    Jetzt binden wir den eigentlichen „Crawling-Code“ ein.

    <html
    <head>
    <link rel="stylesheet" type="text/css" href="style_check.css"> 
    <title>CrawlX SEO-Check</title>
    </head>
    <?php
    require_once ("simplehtmldom_1_5/simple_html_dom.php");
    ?>
    <body>
    <div id="überschrift">
    <h1 class="1">CrawlX SEO-Check</h1>
    </div>
    <div id="roundabout">
    <div id="header">
    <?php
    $url = $_GET["name"];
    $i = get_headers($url);
    echo '<h2>Header Check</h2>';
    echo $i[0].'<br>';
    echo $i[1];
    /*
    foreach($i AS $name) {
    echo $name;
    echo '<br>';
    }
    */
    ?>
    </div>
    <div id="description">
    <?php
    echo '<h2>Description Check</h2>';
    $tags = get_meta_tags($_GET["name"]);
    echo '<br>';
    if (@strlen($tags['description']) == 0) {
    echo "Du hast keine Description!";
    }
    else if (strlen($tags['description']) < 120) {
    echo "Deine Description ist zu  kurz!";
    echo '<br>';
    echo "Sie besteht nur aus ".strlen($tags['description'])." Zeichen.";
    }
    else if (strlen($tags['description']) > 120 AND strlen($tags['description']) < 175) {
    echo "Deine Description passt!";
    echo '<br>';
    echo "Sie besteht aus ".strlen($tags['description'])." Zeichen.";
    }
    else if (strlen($tags['description']) == 175) {
    echo "Mehr nicht in die Description packen!";
    echo '<br>';
    echo "Sie besteht aus ".strlen($tags['description'])." Zeichen.";
    }
    else {
    echo "Zu viel!";
    echo '<br>';
    echo "Die Description ist länger als 175 Zeichen; Sie enthält ".strlen($tags['description'])." Zeichen.";
    }
    echo '<br><br>';
    if (@strlen($tags['description']) == 0) {
    echo "";
    }
    else {
    echo "Description:";
    echo '<br>';
    echo $tags['description'];  // a php manual
    }
    ?>
    </div>
    <div id="canonical">
    <?php
    //canonical Tag
    $html = file_get_html($_GET["name"]);
    echo '<h2>Canonical Tag gesetzt?</h2>';
    $canon = $html->find('head link[rel=canonical]');
    if (count($canon) == 1) {
    echo 'Canonical Tag gefunden!<br><br>';
    echo $canon[0]->href;
    }
    else {
    echo "Du hast kein Canonical Tag gesetzt.";
    }
    ?>
    </div>
    <div id="h1Check">
    <?php
    /*'url' in file_get*/
    /* $html = file_get_html($_GET["name"]); */ 
    /*
    foreach($html->find('h1') as $element) {
    if (strpos($element, 'h1') == false) {
    echo "Keine H1 Überschrift gefunden!";
    }
    else {
    echo '<h2>h1 gesetzt?</h2>';
    echo 'Deine h1 Überschrift ist gesetzt und lautet:<br><br>';
    echo strip_tags($element);
    }
    }
    */
    echo '<h2>H1 Überschrift gesetzt?</h1>';
    $good = $html->find('h1');
    if (count($good) == 1) {
    echo strip_tags($good[0]);
    }
    else {
    echo "Du hast ".count($good)." h1 Überschriften gesetzt.";
    echo '<br><br>';
    for($i=0; $i < count($good); $i++) {
    echo strip_tags($good[$i])."<br>";
    }
    echo '<br>';
    echo "Dein Content sollte wenn möglich nur eine h1 haben, um den Themenfokus beizubehalten";
    }
    ?>
    </div>
    </div>
    </body>
    </html>
    <?php
    } 
    ?>

     

    Es wird folgendes überprüft:

    1. Responding Code der Seite (Statuscode 200, 301, 400 usw.)
    2. Ob eine Description vorhanden ist und ob die Länge passt
    3. Ob ein Canonical Tag gesetzt wurde
    4. Ob eine H1 vorhanden ist
    5. Ob eine H2 gesetzt wurde

    Das Ergebnis?

    Das Ergebnis ist ein funktionierender Crawler, der momentan sechs verschiedene SEO-Faktoren prüft. Codingtechnisch kann das Script sicher wesentlich verbessert werden – Ich arbeite daran!

     

    Digital Dude out.

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.