>  기사  >  백엔드 개발  >  크롤러 개발 및 구현: PHP 및 Selenium 실무 전략

크롤러 개발 및 구현: PHP 및 Selenium 실무 전략

PHPz
PHPz원래의
2023-06-16 08:41:281497검색

인터넷의 지속적인 발전으로 인해 웹 페이지에서 점점 더 많은 데이터를 얻어야 합니다. 정보를 읽기 위해 웹 페이지를 수동으로 검색하는 것과 달리 크롤러 기술은 자동으로 데이터를 얻을 수 있습니다. 크롤러 기술에서 Selenium은 웹 페이지에서 작업하는 사용자를 시뮬레이션하고 웹 페이지에서 데이터를 얻을 수 있는 자동화된 테스트 도구입니다. 이 기사에서는 PHP와 Selenium을 사용하여 크롤러 기능을 구현하는 방법을 소개합니다.

셀레늄이란 무엇인가요?

Selenium은 웹 페이지에서 입력, 클릭, 스크롤 등 모든 사용자 작업을 시뮬레이션하고 웹 페이지에서 데이터를 얻을 수도 있는 자동화된 테스트 도구입니다. Selenium은 Chrome, Firefox, Edge 등과 같은 여러 브라우저를 지원할 수 있으며 다양한 언어를 사용하여 테스트 스크립트를 작성할 수 있습니다. 크롤러 기술에서 Selenium은 웹 페이지를 운영하는 사용자를 시뮬레이션하고 웹 페이지에서 데이터를 크롤링할 수 있습니다.

크롤러 개발 전 준비

Selenium을 크롤러 개발에 사용하기 전에 Chrome의 브라우저 드라이버와 같이 Selenium을 지원하는 브라우저 드라이버를 설치해야 합니다. Selenium 공식 홈페이지에서 최신 버전의 Chrome 드라이버를 다운로드하여 설치할 수 있습니다.

다음으로 php-webdriver와 같은 PHP 및 관련 확장을 로컬에 설치해야 합니다. 아래와 같이 Composer를 사용하여 설치할 수 있습니다.

composer require php-webdriver/webdriver

간단한 예: 웹페이지 제목 가져오기

크롤러 개발을 위해 Selenium을 사용하는 첫 번째 단계는 데이터를 크롤링해야 하는 웹페이지를 여는 것입니다. 웹 페이지의 제목을 가져와야 한다고 가정하면 다음 단계를 수행할 수 있습니다.

<?php
require_once 'vendor/autoload.php';

use FacebookWebDriverRemoteDesiredCapabilities;
use FacebookWebDriverRemoteRemoteWebDriver;

// 启动Chrome浏览器
$capabilities = DesiredCapabilities::chrome();
$driver = RemoteWebDriver::create('http://localhost:9515', $capabilities);

// 打开需要抓取数据的网页
$driver->get('https://www.example.com');

// 获取网页标题
$title = $driver->getTitle();
echo $title;

// 关闭浏览器
$driver->quit();

코드 분석:

  1. 먼저 require_once를 사용하여 필요한 클래스 라이브러리 파일을 도입합니다. require_once引入需要的类库文件。
  2. 使用DesiredCapabilities创建浏览器驱动程序,指定使用Chrome浏览器。
  3. 使用RemoteWebDriver::create启动一个Chrome浏览器并连接到Selenium服务器。
  4. 使用get方法打开需要抓取数据的网页。
  5. 使用getTitle方法获取网页标题。
  6. 输出网页标题。
  7. 最后使用quit方法关闭Chrome浏览器。

简单示例:登录网页并抓取数据

在实际爬虫开发中,我们可能需要在网页中进行登录,才能获取到需要的数据。以下为登录某网站并抓取数据的示例代码:

<?php
require_once 'vendor/autoload.php';

use FacebookWebDriverRemoteDesiredCapabilities;
use FacebookWebDriverRemoteRemoteWebDriver;
use FacebookWebDriverWebDriverBy;

// 启动Chrome浏览器
$capabilities = DesiredCapabilities::chrome();
$driver = RemoteWebDriver::create('http://localhost:9515', $capabilities);

// 打开登录页面
$driver->get('https://www.example.com/login');

// 输入账号密码并登录
$accountInput = $driver->findElement(WebDriverBy::id('account'));
$passwordInput = $driver->findElement(WebDriverBy::id('password'));
$submitButton = $driver->findElement(WebDriverBy::id('submit'));
$accountInput->sendKeys('your_username');
$passwordInput->sendKeys('your_password');
$submitButton->click();

// 等待登录成功并打开需要抓取数据的页面
$driver->wait(10)->until(
    WebDriverExpectedCondition::titleContains('Homepage')
);
$driver->get('https://www.example.com/data');

// 获取数据
$data = $driver->findElement(WebDriverBy::cssSelector('.data'))->getText();
echo $data;

// 关闭浏览器
$driver->quit();

代码解析:

  1. 首先,使用require_once引入需要的类库文件。
  2. 使用DesiredCapabilities创建浏览器驱动程序,指定使用Chrome浏览器。
  3. 使用RemoteWebDriver::create启动一个Chrome浏览器并连接到Selenium服务器。
  4. 使用get方法打开需要登录的页面。
  5. 使用findElement方法通过账号和密码的input元素的id获取对应的WebElement对象,并分别调用sendKeys方法传入账号密码进行输入。
  6. 使用findElement方法通过提交按钮的id获取对应的WebElement对象,并调用click方法进行点击,完成登录操作。
  7. 使用wait方法等待页面跳转后的标题包含Homepage
  8. 使用get方法打开需要抓取数据的页面。
  9. 使用findElement方法通过CSS选择器获取对应的WebElement对象,并使用getText方法获取文本内容。
  10. 输出获取的数据。
  11. 最后使用quit
  12. DesiredCapability를 사용하여 브라우저 드라이버를 생성하고 Chrome 브라우저를 지정하세요.

RemoteWebDriver::create를 사용하여 Chrome 브라우저를 실행하고 Selenium 서버에 연결하세요.

get 메소드를 사용하여 데이터를 캡처해야 하는 웹페이지를 엽니다.

웹페이지 제목을 얻으려면 getTitle 메소드를 사용하세요.

🎜웹페이지 제목을 출력합니다. 🎜🎜마지막으로 quit 메소드를 사용하여 Chrome 브라우저를 닫습니다. 🎜🎜🎜간단한 예: 웹페이지에 로그인하고 데이터를 크롤링합니다🎜🎜실제 크롤러 개발에서는 필요한 데이터를 얻기 위해 웹페이지에 로그인해야 할 수도 있습니다. 다음은 웹사이트에 로그인하고 데이터를 가져오기 위한 샘플 코드입니다. 🎜rrreee🎜코드 분석: 🎜🎜🎜먼저 require_once를 사용하여 필요한 클래스 라이브러리 파일을 도입합니다. 🎜🎜 DesiredCapability를 사용하여 브라우저 드라이버를 생성하고 Chrome 브라우저를 지정하세요. 🎜🎜RemoteWebDriver::create를 사용하여 Chrome 브라우저를 실행하고 Selenium 서버에 연결하세요. 🎜🎜로그인이 필요한 페이지를 열려면 get 메소드를 사용하세요. 🎜🎜findElement 메소드를 사용하여 계정 및 비밀번호 입력 요소의 ID를 통해 해당 WebElement 객체를 얻고, sendKeys 메소드를 호출하여 계정 비밀번호를 전달합니다. 입력용. 🎜🎜제출 버튼의 ID를 통해 해당 WebElement 객체를 얻으려면 findElement 메소드를 사용하고, click 메소드를 호출하여 클릭하면 로그인 작업이 완료됩니다. 🎜🎜페이지 이동 후 제목에 홈페이지가 포함될 때까지 기다리려면 wait 메서드를 사용하세요. 🎜🎜 get 메소드를 사용하여 데이터를 캡처해야 하는 페이지를 엽니다. 🎜🎜CSS 선택기를 통해 해당 WebElement 개체를 얻으려면 findElement 메서드를 사용하고, 텍스트 콘텐츠를 얻으려면 getText 메서드를 사용하세요. 🎜🎜획득한 데이터를 출력합니다. 🎜🎜마지막으로 quit 메소드를 사용하여 Chrome 브라우저를 닫습니다. 🎜🎜🎜위는 샘플 코드입니다. 실제 개발 시 특정 웹사이트의 페이지 구조와 요소 ID에 따라 수정이 필요합니다. 🎜🎜요약🎜🎜이 문서에서는 크롤러 개발을 위해 PHP와 Selenium을 사용하는 방법을 소개하고 웹 페이지 제목 가져오기 및 크롤링 데이터 로그인이라는 두 가지 측면의 예제 데모를 제공합니다. 자동화된 테스트 도구인 Selenium은 웹 페이지에서 사용자 작업을 시뮬레이션하고, 웹 페이지에서 데이터 캡처를 용이하게 하며, 다른 자동화된 테스트 시나리오에서도 사용할 수 있습니다. Selenium 사용법을 익히면 기술 수준과 작업 효율성을 향상시킬 수 있습니다. 🎜

위 내용은 크롤러 개발 및 구현: PHP 및 Selenium 실무 전략의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.