인터넷이 발전하면서 웹 크롤러는 의심의 여지 없이 정보를 얻는 중요한 수단이 되었습니다. 여러 다른 웹사이트를 접하고 일부 정보를 수집해야 할 때 각 웹사이트의 페이지 구조를 연구하는 데 집중해야 합니다. 그렇다면 다양한 웹사이트의 데이터를 크롤링하는 일반적인 방법이 있습니까? 대답은 '예'입니다. 이 기사에서는 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 영화 정보를 크롤링해 보겠습니다.
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);
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);
$webDriver->quit();
위 코드를 사용하면 TOP250 Douban 영화에 대한 관련 정보를 쉽게 얻을 수 있습니다.
요약
이 글에서는 PHP와 Selenium을 사용하여 다양한 웹사이트에서 데이터를 크롤링하는 방법을 소개하고 구체적인 구현 단계를 예제와 함께 자세히 설명합니다. Selenium을 사용하면 데이터를 더 쉽게 얻고 필요한 정보를 더 빨리 얻을 수 있습니다. 이는 고도의 사용자 정의가 필요한 일부 크롤링 작업에 매우 유용합니다.
위 내용은 PHP와 Selenium: 다른 웹페이지에서 데이터를 긁어내는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!