Rumah  >  Artikel  >  pembangunan bahagian belakang  >  PHP dan phpSpider: Bagaimana untuk menangani cabaran JS terhadap tapak web anti-merangkak?

PHP dan phpSpider: Bagaimana untuk menangani cabaran JS terhadap tapak web anti-merangkak?

WBOY
WBOYasal
2023-07-21 14:13:101561semak imbas

PHP dan phpSpider: Bagaimana untuk menangani cabaran JS anti-merangkak laman web?

Dengan perkembangan teknologi Internet, pertahanan tapak web terhadap skrip perangkak menjadi semakin berkuasa. Tapak web sering menggunakan teknologi Javascript untuk anti-rangkak, kerana Javascript boleh menjana kandungan halaman secara dinamik, menyukarkan skrip perangkak mudah untuk mendapatkan data yang lengkap. Artikel ini akan memperkenalkan cara menggunakan PHP dan phpSpider untuk menangani cabaran JS iaitu anti-merangkak tapak web.

phpSpider ialah rangka kerja perangkak ringan berdasarkan PHP Ia menyediakan API yang mudah dan mudah digunakan serta fungsi yang kaya, sesuai untuk mengendalikan pelbagai tugasan rangkak halaman web. Kelebihannya ialah ia boleh mensimulasikan tingkah laku penyemak imbas, termasuk melaksanakan kod Javascript, yang membolehkan kami memintas mekanisme anti-perakak JS tapak web.

Pertama, kita perlu memasang phpSpider. Ia boleh dipasang melalui Composer dan laksanakan arahan berikut dalam direktori projek:

composer require dungsit/php-spider

Selepas pemasangan selesai, kita boleh menggunakan phpSpider dalam projek untuk menulis skrip perangkak.

Pertama, kita perlu membuat contoh phpSpider baharu dan menetapkan URL sasaran yang dirangkak, maklumat pengepala HTTP, dsb. Berikut ialah contoh:

<?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();

Dalam contoh di atas, kami menentukan URL halaman permulaan untuk dirangkak dengan menetapkan medan scan_urls dan tentukan senarai dengan menetapkan list_url_regexes medan Ungkapan biasa URL halaman, medan content_url_regexes menentukan ungkapan biasa URL halaman kandungan. Dalam medan fields seterusnya, kita boleh menetapkan nama medan untuk ditangkap, pemilih medan dan sama ada ia adalah medan yang diperlukan. 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

Memandangkan matlamat kami adalah untuk memintas mekanisme anti-crawler JS tapak web, kami perlu menggunakan pemalam dalam phpSpider untuk melaksanakan kod Javascript. Anda boleh menggunakan pemalam ExecuteJsPlugin untuk mencapai fungsi ini, yang berdasarkan pustaka pembungkusan penyemak imbas Goutte untuk melaksanakan kod Javascript. Berikut ialah contoh cara menggunakan pemalam ExecuteJsPlugin dalam phpSpider:

rrreee

Dalam contoh di atas, kami mula-mula memperkenalkan pemalam execute_jsExecuteJsPlugin. Kemudian, kami menetapkan nama domain dan ejen pengguna (UA) tapak web sasaran, iaitu membenarkan phpSpider mensimulasikan permintaan penyemak imbas apabila melawati tapak web sasaran. Seterusnya, kami menambah contoh ExecuteJsPlugin dalam medan plugin. 🎜🎜Selepas menggunakan pemalam ini, kami boleh menggunakan ungkapan Javascript dalam pemilih medan untuk mencari elemen. Sebagai contoh, kami menetapkan pemilih kepada '//div[@class="content"]/q', yang bermaksud bahawa kami akan memilih elemen anak q yang atribut kelasnya bagi elemen div ialah " kandungan". Dengan cara ini, phpSpider boleh melaksanakan kod Javascript ini untuk mendapatkan data. 🎜🎜Ringkasnya, kita boleh menggunakan rangka kerja phpSpider dan pemalam ExecuteJsPlugin untuk menangani cabaran JS anti-merangkak di tapak web. Dengan mensimulasikan tingkah laku penyemak imbas, kami boleh memintas mekanisme anti perangkak JS tapak web dan memperoleh data yang diperlukan dengan mudah. Saya harap artikel ini boleh membantu pembangunan perangkak anda. 🎜🎜Sumber contoh kod: https://github.com/nmred/phpspider🎜

Atas ialah kandungan terperinci PHP dan phpSpider: Bagaimana untuk menangani cabaran JS terhadap tapak web anti-merangkak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn