PHP und phpSpider: Wie gehe ich mit der JS-Herausforderung des Website-Anti-Crawlings um?
Mit der Entwicklung der Internettechnologie wird die Abwehr von Websites gegen Crawler-Skripte immer leistungsfähiger. Websites verwenden häufig Javascript-Technologie zum Anti-Crawling, da Javascript Seiteninhalte dynamisch generieren kann, was es für einfache Crawler-Skripte schwierig macht, vollständige Daten zu erhalten. In diesem Artikel wird erläutert, wie Sie PHP und phpSpider verwenden, um die JS-Herausforderung des Website-Anti-Crawlings zu bewältigen.
phpSpider ist ein leichtes Crawler-Framework, das auf PHP basiert. Es bietet eine einfache und benutzerfreundliche API und umfangreiche Funktionen, die für die Abwicklung verschiedener Webseiten-Crawling-Aufgaben geeignet sind. Sein Vorteil besteht darin, dass es das Browserverhalten simulieren kann, einschließlich der Ausführung von Javascript-Code, wodurch wir den JS-Anti-Crawler-Mechanismus der Website umgehen können.
Zuerst müssen wir phpSpider installieren. Es kann über Composer installiert werden und den folgenden Befehl im Projektverzeichnis ausführen:
composer require dungsit/php-spider
Nach Abschluss der Installation können wir mit phpSpider Crawler-Skripte im Projekt schreiben.
Zuerst müssen wir eine neue phpSpider-Instanz erstellen und die gecrawlte Ziel-URL, HTTP-Header-Informationen usw. festlegen. Das Folgende ist ein Beispiel:
<?php require 'vendor/autoload.php'; use phpspidercorephpspider; $configs = array( 'name' => 'example', 'log_show' => true, 'domains' => array( 'example.com', ), 'scan_urls' => array( 'http://www.example.com' ), 'list_url_regexes' => array( "http://www.example.com/w+", ), 'content_url_regexes' => array( "http://www.example.com/[a-z]+/d+", ), 'fields' => array( array( 'name' => 'title', 'selector' => '//h1', 'required' => true, ), array( 'name' => 'content', 'selector' => '//div[@class="content"]', 'required' => true, ), ), ); $spider = new phpspider($configs); $spider->start();
Im obigen Beispiel geben wir die zu crawlende Startseiten-URL an, indem wir das Feld scan_urls
festlegen, und geben die Liste an, indem wir den list_url_regexes</code festlegen >-Feld Der reguläre URL-Ausdruck der Seite. Das Feld <code>content_url_regexes
gibt den regulären URL-Ausdruck der Inhaltsseite an. Im nächsten Feld fields
können wir den zu erfassenden Feldnamen, die Feldauswahl und festlegen, ob es sich um ein Pflichtfeld handelt. scan_urls
字段来指定需要抓取的起始页面URL,通过list_url_regexes
字段来指定列表页的URL正则表达式,content_url_regexes
字段来指定内容页的URL正则表达式。接下来的fields
字段中,我们可以设置需要抓取的字段名、字段的选择器以及是否为必须字段。
由于我们的目标是绕过网站的JS反爬虫机制,我们需要在phpSpider中使用一个插件来执行Javascript代码。可以使用ExecuteJsPlugin
插件来实现这个功能,它基于浏览器封装库Goutte
来执行Javascript代码。以下是如何在phpSpider中使用ExecuteJsPlugin
插件的示例:
<?php require 'vendor/autoload.php'; use phpspidercorephpspider; use phpspidercoreequests; use phpspidercoreselector; use phpspiderpluginsexecute_jsExecuteJsPlugin; // 设置目标网站的域名和UA requests::set_global('domain', 'example.com'); requests::set_global('user_agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'); $configs = array( 'name' => 'example', 'log_show' => true, 'domains' => array( 'example.com', ), 'scan_urls' => array( 'http://www.example.com' ), 'list_url_regexes' => array( "http://www.example.com/w+", ), 'content_url_regexes' => array( "http://www.example.com/[a-z]+/d+", ), 'fields' => array( array( 'name' => 'title', 'selector' => '//h1', 'required' => true, ), array( 'name' => 'content', 'selector' => '//div[@class="content"]', 'required' => true, ), ), 'plugins' => array( new ExecuteJsPlugin(), ), ); $spider = new phpspider($configs); $spider->start();
在上述示例中,我们首先引入了execute_jsExecuteJsPlugin
插件。然后,我们设置了目标网站的域名和用户代理(UA),这是为了让phpSpider在访问目标网站时,模拟浏览器的请求。接下来,我们在plugins
字段中添加了ExecuteJsPlugin
实例。
使用这个插件后,我们可以在字段的选择器中使用Javascript表达式来定位元素。例如,我们将选择器设置为'//div[@class="content"]/q'
,表示我们将选择div元素的class属性为"content"的子元素q。这样,phpSpider就可以执行这段Javascript代码来获取数据了。
综上所述,我们可以使用phpSpider框架和ExecuteJsPlugin
ExecuteJsPlugin
verwenden, um diese Funktion zu erreichen, die auf der Browser-Paketbibliothek Goutte
zum Ausführen von Javascript-Code basiert. Hier ist ein Beispiel für die Verwendung des Plugins ExecuteJsPlugin
in phpSpider: rrreee
Im obigen Beispiel haben wir zuerst das Pluginexecute_jsExecuteJsPlugin
eingeführt. Anschließend legen wir den Domänennamen und den Benutzeragenten (UA) der Zielwebsite fest, der es phpSpider ermöglichen soll, Browseranfragen beim Besuch der Zielwebsite zu simulieren. Als Nächstes haben wir die Instanz ExecuteJsPlugin
im Feld plugins
hinzugefügt. 🎜🎜Nach der Verwendung dieses Plugins können wir Javascript-Ausdrücke im Feldselektor verwenden, um Elemente zu finden. Zum Beispiel setzen wir den Selektor auf '//div[@class="content"]/q'
, was bedeutet, dass wir das untergeordnete Element q auswählen, dessen Klassenattribut des div-Elements „ Inhalt". Auf diese Weise kann phpSpider diesen Javascript-Code ausführen, um die Daten zu erhalten. 🎜🎜Zusammenfassend lässt sich sagen, dass wir das phpSpider-Framework und das Plug-in ExecuteJsPlugin
verwenden können, um die JS-Herausforderung des Anti-Crawlings auf der Website zu bewältigen. Durch die Simulation des Browserverhaltens können wir den JS-Anti-Crawler-Mechanismus der Website umgehen und problemlos die erforderlichen Daten erhalten. Ich hoffe, dass dieser Artikel für Ihre Crawler-Entwicklung hilfreich sein kann. 🎜🎜Codebeispielquelle: https://github.com/nmred/phpspider🎜Das obige ist der detaillierte Inhalt vonPHP und phpSpider: Wie gehe ich mit der JS-Herausforderung des Website-Anti-Crawlings um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!