>  기사  >  백엔드 개발  >  PHP와 Selenium: 다른 웹페이지에서 데이터를 긁어내는 방법은 무엇입니까?

PHP와 Selenium: 다른 웹페이지에서 데이터를 긁어내는 방법은 무엇입니까?

PHPz
PHPz원래의
2023-06-16 10:01:40949검색

인터넷이 발전하면서 웹 크롤러는 의심의 여지 없이 정보를 얻는 중요한 수단이 되었습니다. 여러 다른 웹사이트를 접하고 일부 정보를 수집해야 할 때 각 웹사이트의 페이지 구조를 연구하는 데 집중해야 합니다. 그렇다면 다양한 웹사이트의 데이터를 크롤링하는 일반적인 방법이 있습니까? 대답은 '예'입니다. 이 기사에서는 PHP와 Selenium을 사용하여 다양한 웹 페이지에서 데이터를 크롤링하는 방법을 소개합니다.

셀레늄이란 무엇인가요?

Selenium은 웹 자동화 테스트 커뮤니티의 표준 중 하나라고 할 수 있습니다. 브라우저에서 입력, 클릭, 드롭다운 상자 선택, 파일 업로드 등을 포함한 사용자 작업을 시뮬레이션할 수 있습니다. Selenium을 사용하여 웹 페이지의 자동화된 테스트를 구현할 수 있지만 여기서는 Selenium을 사용하여 데이터를 크롤링합니다.

셀레늄을 사용하는 이유는 무엇인가요?

데이터를 스크랩할 때 간단한 컬이나 file_get_contents 요청을 통해 액세스할 수 있는 일부 페이지를 자주 접하게 됩니다. 그러나 웹 기술의 발전으로 많은 웹사이트가 Ajax, Vue, React 등의 프런트엔드 프레임워크를 채택하고 있으며, 페이지의 데이터는 JavaScript를 통해 비동기적으로 얻어집니다. 이 경우 페이지의 전체 렌더링 결과를 얻으려면 브라우저 작동을 시뮬레이션해야 합니다. 또한 크롤러를 방지하기 위해 일부 웹사이트에서는 확인 코드 및 기타 확인 수단을 사용합니다. 이때 데이터 캡처를 계속하기 전에 Selenium을 사용하여 수동 작업을 시뮬레이션해야 합니다.

PHP와 Selenium을 사용하여 데이터를 캡처하는 기본 프로세스

첫 번째 단계는 Selenium을 설치하는 것입니다

Selenium 설치는 매우 간단합니다. 터미널에서 Composer를 사용하여 다음 명령을 실행하면 됩니다.

composer require php-webdriver/webdriver

설치가 완료된 후, 해당 브라우저에 맞는 드라이버를 다운로드해야 합니다. Chrome을 예로 들면, chromedriver를 다운로드하고 PATH 변수가 가리키는 위치에 다운로드한 드라이버를 넣어야 합니다.

두 번째 단계, Selenium 시작

Selenium 시작은 매우 간단합니다. 터미널에 다음 명령을 입력하면 됩니다.

java -jar path/to/selenium-server-standalone-3.141.59.jar

그 중 path/to/가 Selenium의 설치 경로입니다.

세 번째 단계는 Selenium을 사용하여 데이터 캡처를 구현하는 것입니다.

Selenium과 브라우저 드라이버를 사용하면 PHP를 직접 사용하여 Selenium의 API를 호출하여 자동화된 웹 사이트 테스트 및 데이터 캡처를 구현할 수 있습니다. 예를 들어 Douban Movies에서 TOP250 영화 정보를 크롤링해 보겠습니다.

  1. 브라우저를 열고 URL을 입력하세요
use FacebookWebDriverRemoteDesiredCapabilities;
use FacebookWebDriverRemoteRemoteWebDriver;

$host = 'http://localhost:4444/wd/hub'; // Selenium本地服务地址
$capabilities = DesiredCapabilities::chrome();
$webDriver = RemoteWebDriver::create($host, $capabilities);

$url = 'https://movie.douban.com/top250';
$webDriver->get($url);
  1. 영화 정보를 계속 얻으려면 다음 페이지를 클릭하세요
do {
    // 获取电影列表并输出
    $list = $webDriver->findElements(WebDriverBy::cssSelector('.grid_view .item'));
    foreach ($list as $item) {
        $name = $item->findElement(WebDriverBy::cssSelector('.title'))->getText();
        $directors = $item->findElement(WebDriverBy::cssSelector('.bd p:first-child'))->getText();
        $rate = $item->findElement(WebDriverBy::cssSelector('.rating_num'))->getText();
        echo "$name $directors $rate
";
    }

    // 点击下一页
    $nextPageBtn = $webDriver->findElement(WebDriverBy::cssSelector('.paginator .next a'));
    $nextPageBtnClassName = $nextPageBtn->getAttribute('class');
    if (strpos($nextPageBtnClassName, 'disabled') === false) {
        $nextPageBtn->click();
    } else {
        break;
    }

    // 等待新页面加载完成
    $webDriver->wait()->until(WebDriverExpectedCondition::urlContains(intval($page + 1)));
} while (true);
  1. 브라우저를 닫으세요
$webDriver->quit();

위 코드를 사용하면 TOP250 Douban 영화에 대한 관련 정보를 쉽게 얻을 수 있습니다.

요약

이 글에서는 PHP와 Selenium을 사용하여 다양한 웹사이트에서 데이터를 크롤링하는 방법을 소개하고 구체적인 구현 단계를 예제와 함께 자세히 설명합니다. Selenium을 사용하면 데이터를 더 쉽게 얻고 필요한 정보를 더 빨리 얻을 수 있습니다. 이는 고도의 사용자 정의가 필요한 일부 크롤링 작업에 매우 유용합니다.

위 내용은 PHP와 Selenium: 다른 웹페이지에서 데이터를 긁어내는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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