Heim >php教程 >PHP源码 >Verwenden Sie den PHP-Crawler für die Analyse von Tourismusdaten

Verwenden Sie den PHP-Crawler für die Analyse von Tourismusdaten

大家讲道理
大家讲道理Original
2016-11-11 15:15:554450Durchsuche

Mit der Verbesserung der materiellen Ressourcen ist der Tourismus nach und nach in den Mittelpunkt der Menschen gerückt. Der heiße Nationalfeiertag ist gerade vorbei und ich glaube, viele Leute wollen wissen, wo jeder normalerweise zum Spielen hingeht 10 Minuten Ich habe ein kleines Programm geschrieben, um Mafengwo-Reisenotizen zu sammeln. Natürlich ist die Geschwindigkeit so hoch, weil es vollständig auf dem berühmten PHP-Crawler-Framework phpspider basiert.

Internationale Praxis, schauen wir uns zuerst an, wie man den Code schreibt, betrachten wir ihn als Einführung ^_^

Mafengwo unterscheidet sich von normalen Websites, weil der Grad der Parallelität hoch ist und Einige Daten müssen in Echtzeit vorliegen, z. B. die Anzahl der Personen und die Anzahl der Likes. Daher verwendet die Website an vielen Stellen Ajax, und Ajax stellt für normale Sammler ein relativ großes Problem dar.

Ich habe die Mafengwo-Website beobachtet und schließlich die Sammelroute festgelegt:

Holen Sie sich die Liste der Reisenotizen unter der Stadt-> > Extrahieren Sie die Reisenotizen mit dem Inhalt der Reisenotizen: Titel, Stadt, Abfahrtszeit usw. Als Nächstes verwenden wir drei Schritte zur Implementierung. . .

1. Holen Sie sich beliebte Städte


http://www.mafengwo.cn/mdd/citylist/21536.html

Verwenden Sie den PHP-Crawler für die Analyse von Tourismusdaten

Zuerst müssen wir diese beliebten Städte sammeln

Verwenden Sie den PHP-Crawler für die Analyse von Tourismusdaten

Wenn wir auf die Anzahl der Seiten klicken, finden wir, dass seine Daten werden von Ajax geladen, die letzte Seite ist 297 und es wird die POST-Methode verwendet

Verwenden Sie den PHP-Crawler für die Analyse von Tourismusdaten

Die übermittelten Parameter lauten wie folgt:

Verwenden Sie den PHP-Crawler für die Analyse von Tourismusdaten

Offensichtlich gibt es bei dieser Seite ein Problem mit der Anzahl der Seiten. Für POST gibt es nur eine URL, aber query_string hat keinen Einfluss auf die POST-Daten ?page=1 am Ende. |2|3..., also kann unser Code so geschrieben werden:

Legen Sie die Listenseitenregeln fest:

'list_url_regexes' => array(
    "http://www.mafengwo.cn/mdd/base/list/pagedata_citylist?page=d+",
)

Geben Sie alle Städtelisten ein in der Eintragsrückruffunktion:

$spider->on_scan_page = function($page, $content, $phpspider) 
{
    // 上面Ajax分页的末页是297页
    for ($i = 0; $i  $url,
            'method' => 'post',
            'fields' => array(
                'mddid'=>21536,
                'page'=>$i,
            )
        );
        // 热点城市列表页URL入队列
        $phpspider->add_url($url, $options);
    }
};

2. Holen Sie sich die Liste der Reisenotizen unter beliebten Städten

Nachdem Sie auf eine Stadt geklickt haben, können wir die Liste der Reisenotizen darunter sehen

Verwenden Sie den PHP-Crawler für die Analyse von Tourismusdaten

Natürlich ist es dasselbe wie oben, es wird auch von Ajax geladen. Wir können die Entwicklertools von Chrome öffnen, auf Netzwerk klicken und dann nach Belieben auf eine Seite klicken Holen Sie sich die Ajax-URL:

Verwenden Sie den PHP-Crawler für die Analyse von Tourismusdaten

Das gleiche wie die Stadtliste, es ist auch POST , die Parameter sind wie folgt:

Verwenden Sie den PHP-Crawler für die Analyse von Tourismusdaten

Offensichtlich ist Seite die Anzahl der Seiten. Natürlich greifen wir direkt über POST auf die Ajax-Adresse zu:

http://www.mafengwo .cn/gonglove/ajax.php?act=get_t…

meldet einen Fehler direkt. Basierend auf dem oben Gesagten kann unser Code wie folgt geschrieben werden:

Zuerst müssen wir mit on_start beginnen und die Quell-URL hinzufügen

$spider->on_start = function($phpspider)
{
    $phpspider->add_header('Referer','http://www.mafengwo.cn/mdd/citylist/21536.html');
};

zur Rückruffunktion. Legen Sie genau wie beim Abrufen der Städteliste die Listenabgleichsregeln fest:

'list_url_regexes' => array(
    "http://www.mafengwo.cn/gonglve/ajax.php?act=get_travellist&mddid=d+", 
)

und bestimmen Sie dann, ob es sich um die erste Seite im on_list_page-Rückruf handelt Anzahl der Seiten und dann in die Warteschlange eingeschleift:

preg_match(&#39;#<span class="count">共<span>(.*?)</span>页#&#39;, $data_page, $out);
for ($i = 0; $i < $out[1]; $i++) 
{
    $v = $page[&#39;request&#39;][&#39;fields&#39;][&#39;mddid&#39;];
    $url = "http://www.mafengwo.cn/gonglve/ajax.php?act=get_travellist&mddid={$v}&page={$i}";
    $options = array(
        &#39;url_type&#39; => $url,
        &#39;method&#39; => &#39;post&#39;,
        &#39;fields&#39; => array(
            &#39;mddid&#39;=>$v,
            &#39;pageid&#39;=>&#39;mdd_index&#39;,
            &#39;sort&#39;=>1,
            &#39;cost&#39;=>0,
            &#39;days&#39;=>0,
            &#39;month&#39;=>0,
            &#39;tagid&#39;=>0,
            &#39;page&#39;=>$i,
        )
    );
    // 游记列表页URL入队列
    $phpspider->add_url($url, $options);
}

Durch die beiden oben genannten Schritte haben wir die Reisenotizenliste aller beliebten Städte in die Warteschlange gestellt. Als nächstes fahren wir mit dem dritten Schritt fort. Von diesen Rufen Sie die URL der Inhaltsseite in der Liste ab und extrahieren Sie dann den Inhalt.

3. Holen Sie sich eine Liste mit Reisenotizen in beliebten Städten

Mit der Methode on_list_page erhalten Sie den Inhalt der Listenseite. Aus diesem Inhalt können wir die URL des Inhalts extrahieren Seite

// 获取内容页
preg_match_all(&#39;#<a href="/i/(.*?).html" target="_blank">#&#39;, $html, $out);
if (!empty($out[1])) 
{
    foreach ($out[1] as $v) 
    {
        $url = "http://www.mafengwo.cn/i/{$v}.html";
        // 内容页URL入队列
        $phpspider->add_url($url);
    }
}

Als nächstes konfigurieren wir das Seitenfeld für den Feldextraktionsinhalt

&#39;fields&#39; => array(
    // 标题
    array(
        &#39;name&#39; => "name",
        &#39;selector&#39; => "//h1[contains(@class,&#39;headtext&#39;)]",
        &#39;required&#39; => true,
    ),
    // 分类
    array(
        &#39;name&#39; => "city",
        &#39;selector&#39; => "//div[contains(@class,&#39;relation_mdd&#39;)]//a",
        &#39;required&#39; => true,
    ),
    // 出发时间
    array(
        &#39;name&#39; => "date",
        &#39;selector&#39; => "//li[contains(@class,&#39;time&#39;)]",
        &#39;required&#39; => true,
    ),
)

Entwerfen Sie eine Datentabelle:

Verwenden Sie den PHP-Crawler für die Analyse von Tourismusdaten

Von Natürlich können wir auch die Ansichten zu Reisenotizen, Sammlung, Teilen, Anheften, Spielmenge usw. abrufen, es gibt zu viele und die Methoden sind ähnlich.

Das Programm wurde zu diesem Zeitpunkt mit insgesamt weniger als 200 Codezeilen entwickelt. Dank der Multiprozess-Erfassungsfunktion von phpspider wurde die Datenerfassung mit insgesamt mehr als 200 Zeilen schnell abgeschlossen 7W.

Verwenden Sie den PHP-Crawler für die Analyse von Tourismusdaten

Verwenden Sie den PHP-Crawler für die Analyse von Tourismusdaten

Was können wir tun, nachdem wir diese Daten erhalten haben? !

Top10 Touristenstädte sind

Verwenden Sie den PHP-Crawler für die Analyse von Tourismusdaten

Man sieht, dass Yunnan ein guter Ort ist, und es ist auch ein Ort, den Blogger Tag und Nacht vermissen. . .

Anteil der Touristenstädte am 1. Mai und am Nationalfeiertag

Verwenden Sie den PHP-Crawler für die Analyse von Tourismusdaten

Verwenden Sie den PHP-Crawler für die Analyse von Tourismusdaten

Man sieht, dass die Leute am 1. Mai gerne nach Tibet reisen, aber Qingdao ist am Nationalfeiertag beliebter sind reich Der Gastgeber war noch nie dort und fühlt sich so verletzt~_~!

Als nächstes werfen wir einen Blick auf die Touristenhochsaison in Peking und Hangzhou in diesem Jahr

1Verwenden Sie den PHP-Crawler für die Analyse von Tourismusdaten

Okay. Es ist zu sehen, dass im Juli und August mehr Menschen nach Peking reisen, es ist weder heiß noch kalt. Der Blogger war einmal im August und es war so angenehm. ^

Werfen wir noch einmal einen Blick auf Hangzhou

1Verwenden Sie den PHP-Crawler für die Analyse von Tourismusdaten

Es ist ersichtlich, dass Ende März bis Mitte April eine geeignete Jahreszeit für einen Besuch in Hangzhou ist. Zu dieser Zeit blühen die Frühlingsblumen und das Wetter ist nicht schlecht. Es heißt, dass es jedes Jahr Kirschblüten und Tulpen gibt. Sie sind wieder sehr schön 🎜>

Okay, der Artikel endet hier. Tatsächlich möchte ich mehr analysieren. Beispielsweise sammeln wir beliebte Routen, beliebte Sehenswürdigkeiten, beliebte Fotoalben und die Preise von Reiserouten und bilden schließlich eine Reise-APP. Wenn Sie gute Ideen haben, können Sie sie mir auch mitteilen, und ich werde sie zum späteren Nachschlagen sammeln. Bitte beziehen Sie sich auf ^_^


Stellungnahme:
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