Heim php教程 PHP开发 Entwicklung eines einfachen Crawlers

Entwicklung eines einfachen Crawlers

Nov 22, 2016 pm 05:28 PM

Um einen Crawler zu entwickeln, müssen Sie zunächst wissen, wofür Ihr Crawler verwendet werden soll. Ich möchte damit Artikel mit bestimmten Schlüsselwörtern auf verschiedenen Websites finden und deren Links erhalten, damit ich sie schnell lesen kann.

Je nach persönlichen Gewohnheiten muss ich zunächst eine Schnittstelle schreiben und meine Ideen klären.

1. Besuchen Sie verschiedene Websites. Dann brauchen wir ein URL-Eingabefeld.

2. Finden Sie Artikel mit bestimmten Schlüsselwörtern. Dann benötigen wir ein Eingabefeld für den Artikeltitel.

3. Holen Sie sich den Artikellink. Dann benötigen wir einen Anzeigecontainer für Suchergebnisse.

<div class="jumbotron" id="mainJumbotron">
    <div class="panel panel-default">

        <div class="panel-heading">文章URL抓取</div>

        <div class="panel-body">
            <div class="form-group">
                <label for="article_title">文章标题</label>
                <input type="text" class="form-control" id="article_title" placeholder="文章标题">
            </div>
            <div class="form-group">
                <label for="website_url">网站URL</label>
                <input type="text" class="form-control" id="website_url" placeholder="网站URL">
            </div>

            <button type="submit" class="btn btn-default">抓取</button>
        </div>
    </div>
    <div class="panel panel-default">

        <div class="panel-heading">文章URL</div>

        <div class="panel-body">
            <h3></h3>
        </div>
    </div>
</div>
Nach dem Login kopieren

Fügen Sie den Code direkt hinzu und fügen Sie dann einige eigene Stilanpassungen hinzu, und die Schnittstelle ist fertig:

Entwicklung eines einfachen Crawlers

Dann ist der nächste Schritt Bei der Implementierung der Funktion verwende ich PHP. Der erste Schritt besteht darin, den HTML-Code der Website abzurufen. Ich werde sie daher nicht einzeln vorstellen Geben Sie die URL der Website ein und Sie können den HTML-Code erhalten:

private function get_html($url){

    $ch = curl_init();

    $timeout = 10;

    curl_setopt($ch, CURLOPT_URL, $url);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    curl_setopt($ch, CURLOPT_ENCODING, &#39;gzip&#39;);

    curl_setopt($ch, CURLOPT_USERAGENT, &#39;Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36&#39;);

    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);

    $html = curl_exec($ch);

    return $html;

}
Nach dem Login kopieren

Obwohl Sie den HTML-Code erhalten haben, werden Sie bald auf ein Problem stoßen, nämlich auf das Codierungsproblem , was Ihren nächsten Schritt des Abgleichs möglicherweise umsonst macht. Wir werden den HTML-Inhalt hier umwandeln:

$coding = mb_detect_encoding($html);

if ($coding != "UTF-8" || !mb_check_encoding($html, "UTF-8"))

    $html = mb_convert_encoding($html, &#39;utf-8&#39;, &#39;GBK,UTF-8,ASCII&#39;);
Nach dem Login kopieren

Um die URL des Artikels zu erhalten. Der nächste Schritt besteht darin, alle a-Tags unter der Webseite abzugleichen. Nach vielen Tests habe ich endlich einen relativ zuverlässigen regulären Ausdruck erhalten, egal wie komplex die Struktur unter dem a-Tag ist ein Tag, es wird nicht übersehen: (der kritischste Schritt)

$pattern = &#39;|<a[^>]*>(.*)</a>|isU&#39;;

preg_match_all($pattern, $html, $matches);
Nach dem Login kopieren

Matching Das Ergebnis in $matches ist wahrscheinlich eine mehrdimensionale Gruppe wie diese:

array(2) {  
    [0]=>  
    array(*) {    
        [0]=>
        string(*) "完整的a标签"        .
        .
        .
    }
    [1]=>
    array(*) {
        [0]=>
        string(*) "与上面下标相对应的a标签中的内容"    }
}
Nach dem Login kopieren

As Solange Sie diese Daten erhalten, ist alles andere vollständig bedienbar. Sie können diese Gruppe durchsuchen und die entsprechenden Attribute des Tags abrufen Empfohlene Klasse, um Ihnen die Bedienung des a-Tags zu erleichtern:

$dom = new DOMDocument();

@$dom->loadHTML($a);//$a是上面得到的一些a标签

$url = new DOMXPath($dom);

$hrefs = $url->evaluate(&#39;//a&#39;);

for ($i = 0; $i < $hrefs->length; $i++) {

    $href = $hrefs->item($i);

    $url = $href->getAttribute(&#39;href&#39;); //这里获取a标签的href属性

}
Nach dem Login kopieren

Natürlich ist dies nur eine Möglichkeit, Sie können auch reguläre Ausdrücke verwenden, um die gewünschten Informationen abzugleichen und neue Tricks zu spielen mit den Daten.

Erhalten Sie die gewünschten Ergebnisse und passen Sie sie an. Der nächste Schritt besteht natürlich darin, sie an das Frontend zurückzusenden, um sie anzuzeigen. Verwenden Sie dann js, um die Daten im Frontend abzurufen jquery, um den anzuzeigenden Inhalt dynamisch hinzuzufügen:

var website_url = &#39;你的接口地址&#39;;
$.getJSON(website_url,function(data){
    if(data){
        if(data.text == &#39;&#39;){
            $(&#39;#article_url&#39;).html(&#39;<div><p>暂无该文章链接</p></div>&#39;);
            return;
        }
        var string = &#39;&#39;;
        var list = data.text;
        for (var j in list) {
                var content = list[j].url_content;
                for (var i in content) {
                    if (content[i].title != &#39;&#39;) {
                        string += &#39;<div class="item">&#39; +
                            &#39;<em>[<a href="http://&#39; + list[j].website.web_url + &#39;" target="_blank">&#39; + list[j].website.web_name + &#39;</a>]</em>&#39; +
                            &#39;<a href=" &#39; + content[i].url + &#39;" target="_blank" class="web_url">&#39; + content[i].title + &#39;</a>&#39; +
                            &#39;</div>&#39;;
                    }
                }
            }
        $(&#39;#article_url&#39;).html(string);
});
Nach dem Login kopieren

Das endgültige Rendering:

Entwicklung eines einfachen Crawlers

Entwicklung eines einfachen Crawlers

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)