La collecte de contenu Web est un besoin très courant Pour les pages statiques plus traditionnelles, curl peut le gérer. Mais s'il y a du contenu chargé dynamiquement dans la page, comme le contenu textuel des articles chargés via ajax dans certaines pages, et si certaines pages subissent un traitement supplémentaire après le chargement (remplacement de l'adresse de l'image, etc....) et que vous souhaitez collecter ces contenus traités. Alors la superbe boucle est impuissante.
Les personnes qui ont eu des besoins similaires diront peut-être, mon vieux, utilise PhantomJS !
Oui, c'est une solution, et PhantomJS est depuis longtemps l'un des rares outils capables de résoudre de tels besoins.
Mais ce que je souhaite vous présenter aujourd'hui, c'est un outil venu de derrière - le marionnettiste, qui s'est développé rapidement avec l'essor de la technologie Chrome Headless. Et très important, Puppeteer est développé et maintenu par l’équipe officielle de Chrome, qui peut être considérée comme assez fiable !
puppeteer est un package js Si vous souhaitez l'utiliser dans Laravel, vous devez utiliser un autre artefact, spatie/browsershot.
Installer
Installer spatie/browsershot
browsershot est un package de composition de l'équipe principale spatie
$ composer require spatie/browsershot
Install puppeteer
$ npm i puppeteer --save
Vous pouvez également sécuriser le marionnettiste globalement. Mais par expérience personnelle, il est plus recommandé de l'installer dans le projet, car de cette manière, différents projets ne seront pas affectés par le marionnettiste installé globalement en même temps. dans le projet, il est également pratique d'utiliser phpdeployer Upgrade (la mise à niveau de phpdeploy n'affectera pas le fonctionnement des projets en ligne. Vous devez savoir que la mise à niveau/installation de Puppeteer prend beaucoup de temps et que parfois le succès n'est pas garanti).
Lors de l'installation de Puppeteer, Chromium-Browser sera téléchargé. Compte tenu de nos conditions nationales particulières, il est très probable qu'il ne puisse pas être téléchargé. À cet égard, veuillez montrer vos compétences...
<. 🎜>Utilisez
pour collecter le contenu des articles de la page mobile de Toutiao à titre d'exemple.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); }
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')); }
Problèmes possibles
Le système doit prendre en charge le navigateur Chromium. Bien sûr, la plupart des navigateurs le prennent désormais en charge. Sinon, vous ne pouvez rien faire. . Une fois Puppeteer installé dans le projet, il peut y avoir des problèmes d'autorisation lors de l'appel. Cela nécessite d'accorder les autorisations appropriées au répertoire /node_modules/puppeteer sous le projet.Résumé
puppeteer est utilisé dans les tests, la collecte et d'autres scénarios, et est un outil très puissant. C'est suffisant pour des tâches de collecte légères, comme cet article, qui sert à collecter quelques petites pages dans Laravel (php), mais si vous avez besoin de collecter rapidement une grande quantité de contenu, Python ou quelque chose du genreCe qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!