Heim >PHP-Framework >Laravel >Verwendung von Puppeteer in Laravel zum Sammeln asynchron geladener Webseiteninhalte

Verwendung von Puppeteer in Laravel zum Sammeln asynchron geladener Webseiteninhalte

藏色散人
藏色散人nach vorne
2019-10-16 14:24:233563Durchsuche

Verwendung von Puppeteer in Laravel zum Sammeln asynchron geladener Webseiteninhalte

Das Sammeln von Webinhalten ist ein sehr häufiger Bedarf. Bei traditionelleren statischen Seiten kann Curl damit umgehen. Wenn die Seite jedoch dynamisch geladene Inhalte enthält, z. B. den Textinhalt von Artikeln, die auf einigen Seiten über Ajax geladen werden, und wenn einige Seiten nach dem Laden einer zusätzlichen Verarbeitung unterzogen werden (Bildadressenersetzung usw.) und Sie dies möchten Sammeln Sie diese verarbeiteten Inhalte. Dann ist die tolle Locke hilflos.

Leute, die ähnliche Anforderungen erfüllt haben, sagen vielleicht: „Alter Mann, benutze PhantomJS!“

Ja, das ist ein Weg, und PhantomJS ist seit langem eines der wenigen Tools, das solche Anforderungen lösen kann.

Aber was ich heute vorstellen möchte, ist ein Werkzeug, das von hinten kam – Puppenspieler, das sich mit dem Aufkommen der Chrome Headless-Technologie schnell weiterentwickelte. Und ganz wichtig: Puppeteer wird vom offiziellen Chrome-Team entwickelt und gewartet, was als recht zuverlässig gilt!

puppeteer ist ein js-Paket. Wenn Sie es in Laravel verwenden möchten, müssen Sie ein anderes Artefakt verwenden, Spatie/Browsershot.

Installieren

Spatie/Browsershot installieren

Browsershot ist ein Composer-Paket vom Master-Team Spatie

$ composer require spatie/browsershot

Puppenspieler installieren

$ npm i puppeteer --save

Sie können Puppeteer auch global sichern, aber aus persönlicher Erfahrung ist es empfehlenswerter, es im Projekt zu installieren, da auf diese Weise nicht verschiedene Projekte gleichzeitig von der global installierten Installation betroffen sind Im Projekt ist es auch praktisch, das Upgrade von phpdeployer zu verwenden (das Upgrade von phpdeploy hat keinen Einfluss auf den Betrieb von Online-Projekten. Sie müssen wissen, dass das Upgrade/Installieren von Puppeteer sehr zeitaufwändig ist und der Erfolg manchmal nicht garantiert ist).

Bei der Installation von Puppeteer wird der Chromium-Browser wahrscheinlich nicht heruntergeladen. Bitte zeigen Sie diesbezüglich Ihre Fähigkeiten...

Verwenden Sie

, um den Inhalt von Artikeln auf der mobilen Seite von Toutiao heute als Beispiel zu sammeln.

use Spatie\Browsershot\Browsershot;
public function getBodyHtml()
{
    $newsUrl = 'https://m.toutiao.com/i6546884151050502660/';
    
    $html = Browsershot::url($newsUrl)
        ->windowSize(480, 800)
        ->userAgent('Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Mobile Safari/537.36')
        ->mobile()
        ->touch()
        ->bodyHtml();
    \Log::info($html);
}

Nach dem Ausführen können Sie den folgenden Inhalt im Protokoll sehen (der Screenshot ist nur ein Teil davon)

Verwendung von Puppeteer in Laravel zum Sammeln asynchron geladener Webseiteninhalte

Darüber hinaus können Sie auch speichern die Seite als Bild oder PDF-Dokument.

use Spatie\Browsershot\Browsershot;
public function getBodyHtml()
{
    $newsUrl = 'https://m.toutiao.com/i6546884151050502660/';
    
    Browsershot::url($newsUrl)
        ->windowSize(480, 800)
        ->userAgent('Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Mobile Safari/537.36')
        ->mobile()
        ->touch()
        ->setDelay(1000)
        ->save(public_path('images/toutiao.jpg'));
}

Verwendung von Puppeteer in Laravel zum Sammeln asynchron geladener Webseiteninhalte

Die Kästchen im Bild beziehen sich auf die Systemschriftarten. Im Code wird eine setDelay()-Methode verwendet, um nach dem Laden des Inhalts einen Screenshot zu erstellen. Dies ist einfach und grob und möglicherweise nicht die beste Lösung.

Mögliche Probleme

Das System muss den Chromium-Browser unterstützen. Ansonsten können Sie nichts tun. .

Nachdem Puppeteer im Projekt installiert wurde, kann es beim Aufruf zu Berechtigungsproblemen kommen. Dazu müssen dem Verzeichnis /node_modules/puppeteer unter dem Projekt entsprechende Berechtigungen erteilt werden.

Zusammenfassung

puppeteer wird in Test-, Sammlungs- und anderen Szenarien verwendet und ist ein sehr leistungsfähiges Werkzeug. Es reicht für leichte Sammlungsaufgaben wie diesen Artikel, der zum Sammeln einiger kleiner Seiten in Laravel (PHP) verwendet wird. Wenn Sie jedoch schnell eine große Menge an Inhalten sammeln müssen, ist Python oder etwas anderes besser

Das obige ist der detaillierte Inhalt vonVerwendung von Puppeteer in Laravel zum Sammeln asynchron geladener Webseiteninhalte. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen