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
Zuerst müssen wir diese beliebten Städte sammeln
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
Die übermittelten Parameter lauten wie folgt:
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
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:
Das gleiche wie die Stadtliste, es ist auch POST , die Parameter sind wie folgt:
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('#<span class="count">共<span>(.*?)</span>页#', $data_page, $out); for ($i = 0; $i < $out[1]; $i++) { $v = $page['request']['fields']['mddid']; $url = "http://www.mafengwo.cn/gonglve/ajax.php?act=get_travellist&mddid={$v}&page={$i}"; $options = array( 'url_type' => $url, 'method' => 'post', 'fields' => array( 'mddid'=>$v, 'pageid'=>'mdd_index', 'sort'=>1, 'cost'=>0, 'days'=>0, 'month'=>0, 'tagid'=>0, 'page'=>$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('#<a href="/i/(.*?).html" target="_blank">#', $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
'fields' => array( // 标题 array( 'name' => "name", 'selector' => "//h1[contains(@class,'headtext')]", 'required' => true, ), // 分类 array( 'name' => "city", 'selector' => "//div[contains(@class,'relation_mdd')]//a", 'required' => true, ), // 出发时间 array( 'name' => "date", 'selector' => "//li[contains(@class,'time')]", 'required' => true, ), )
Entwerfen Sie eine Datentabelle:
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.
Was können wir tun, nachdem wir diese Daten erhalten haben? !
Top10 Touristenstädte sind
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
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
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
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 ^_^