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
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!