PHP 및 phpSpider: 웹사이트 크롤링 방지라는 JS 문제를 어떻게 처리합니까?

WBOY
풀어 주다: 2023-07-21 14:14:01
원래의
1519명이 탐색했습니다.

PHP 및 phpSpider: 웹사이트 크롤링 방지라는 JS 문제를 어떻게 처리하나요?

인터넷 기술이 발전함에 따라 크롤러 스크립트에 대한 웹사이트의 방어력이 점점 더 강력해지고 있습니다. 웹사이트에서는 크롤링 방지를 위해 Javascript 기술을 사용하는 경우가 많습니다. Javascript는 페이지 콘텐츠를 동적으로 생성할 수 있어 간단한 크롤러 스크립트로는 완전한 데이터를 얻기 어렵기 때문입니다. 이 기사에서는 웹 사이트 크롤링 방지라는 JS 문제를 처리하기 위해 PHP와 phpSpider를 사용하는 방법을 소개합니다.

phpSpider는 PHP를 기반으로 한 경량 크롤러 프레임워크로 다양한 웹 페이지 크롤링 작업을 처리하는 데 적합한 간단하고 사용하기 쉬운 API와 풍부한 기능을 제공합니다. 장점은 Javascript 코드 실행을 포함하여 브라우저 동작을 시뮬레이션할 수 있다는 것입니다. 이를 통해 웹 사이트의 JS 크롤러 방지 메커니즘을 우회할 수 있습니다.

먼저 phpSpider를 설치해야 합니다. Composer를 통해 설치하고 프로젝트 디렉터리에서 다음 명령을 실행할 수 있습니다.

composer require dungsit/php-spider
로그인 후 복사

설치가 완료된 후 phpSpider를 사용하여 프로젝트에 크롤러 스크립트를 작성할 수 있습니다.

먼저 새로운 phpSpider 인스턴스를 생성하고 크롤링 대상 URL, HTTP 헤더 정보 등을 설정해야 합니다. 다음은 그 예입니다.

<?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();
로그인 후 복사

위 예에서는 scan_urls 필드를 설정하여 크롤링할 시작 페이지 URL을 지정하고, list_url_regexes를 설정하여 목록을 지정합니다. > 필드 페이지의 URL 정규식, content_url_regexes 필드는 콘텐츠 페이지의 URL 정규식을 지정합니다. 다음 필드 필드에서는 캡처할 필드 이름, 필드 선택기 및 필수 필드인지 여부를 설정할 수 있습니다. 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

우리의 목표는 웹사이트의 JS 크롤러 방지 메커니즘을 우회하는 것이므로 Javascript 코드를 실행하려면 phpSpider의 플러그인을 사용해야 합니다. ExecuteJsPlugin 플러그인을 사용하면 브라우저 패키징 라이브러리 Goutte를 기반으로 하는 이 기능을 구현하여 Javascript 코드를 실행할 수 있습니다. 다음은 phpSpider에서 ExecuteJsPlugin 플러그인을 사용하는 방법에 대한 예입니다.

rrreee

위 예에서는 먼저 execute_jsExecuteJsPlugin 플러그인을 소개했습니다. 그런 다음 대상 웹 사이트를 방문할 때 phpSpider가 브라우저 요청을 시뮬레이션할 수 있도록 대상 웹 사이트의 도메인 이름과 사용자 에이전트(UA)를 설정했습니다. 다음으로 plugins 필드에 ExecuteJsPlugin 인스턴스를 추가했습니다. 🎜🎜이 플러그인을 사용한 후 필드 선택기에서 Javascript 표현식을 사용하여 요소를 찾을 수 있습니다. 예를 들어, 선택기를 '//div[@class="content"]/q'로 설정합니다. 이는 div 요소의 클래스 속성이 "인 하위 요소 q를 선택한다는 의미입니다. 콘텐츠". 이러한 방식으로 phpSpider는 이 Javascript 코드를 실행하여 데이터를 얻을 수 있습니다. 🎜🎜요약하자면, 우리는 phpSpider 프레임워크와 ExecuteJsPlugin 플러그인을 사용하여 웹사이트의 크롤링 방지에 대한 JS 문제를 처리할 수 있습니다. 브라우저 동작을 시뮬레이션함으로써 웹사이트의 JS 크롤러 방지 메커니즘을 우회하고 필요한 데이터를 쉽게 얻을 수 있습니다. 이 기사가 귀하의 크롤러 개발에 도움이 되기를 바랍니다. 🎜🎜코드 샘플 소스: https://github.com/nmred/phpspider🎜

위 내용은 PHP 및 phpSpider: 웹사이트 크롤링 방지라는 JS 문제를 어떻게 처리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!