>백엔드 개발 >PHP 튜토리얼 >PHP 기반 크롤러 프레임워크 소개 및 응용 사례에 대한 자세한 설명

PHP 기반 크롤러 프레임워크 소개 및 응용 사례에 대한 자세한 설명

王林
王林원래의
2023-06-14 15:58:191645검색

인터넷 정보가 폭발적으로 증가함에 따라 웹사이트에는 많은 양의 데이터가 저장되며 이는 많은 사용자에게 중요한 가치를 갖습니다. 따라서 크롤러 기술은 점차 인터넷 데이터를 활용하는 강력한 수단이 되었습니다.

이 글에서는 PHP 언어 기반의 크롤러 프레임워크인 Guzzle과 Goutte를 소개합니다. Guzzle은 HTTP 요청을 보내고 REST 리소스와 상호 작용하는 데 사용할 수 있는 PHP용으로 개발된 HTTP 클라이언트입니다. Goutte는 이를 보완하는 Guzzle 기반의 웹 크롤러 프레임워크로 웹 콘텐츠를 쉽게 확보하고 데이터 추출 및 분석을 수행할 수 있습니다.

먼저 PHP에 Guzzle과 Goutte를 설치해야 합니다. Composer를 통해 설치할 수 있습니다.

composer require guzzlehttp/guzzle
composer require fabpot/goutte

설치가 완료되면 먼저 Guzzle 사용법을 배워보겠습니다. 다음 코드를 사용하여 HTTP GET 요청을 보내고 응답 콘텐츠를 얻을 수 있습니다.

<?php
use GuzzleHttpClient;

$client = new Client();
$response = $client->get('https://www.example.com');
echo $response->getBody();

이 코드는 먼저 GuzzleClient 객체를 생성한 다음 get() 메서드를 사용하여 지정된 URL로 GET 요청을 보내고 응답을 얻습니다. 콘텐츠. . 응답 본문의 내용을 얻으려면 getBody() 메서드를 호출합니다.

Goutte는 Guzzle을 기반으로 개발된 웹 크롤러 프레임워크이며 사용법도 매우 간단합니다. 다음은 Goutte를 사용하는 간단한 예입니다.

<?php
use GoutteClient;

$client = new Client();
$crawler = $client->request('GET', 'https://www.example.com');
$crawler->filter('h1')->each(function ($node) {
    echo $node->text() . "
";
});

이 코드는 Goutte를 사용하여 Client 개체를 생성하고 지정된 URL에 GET 요청을 보낸 다음 응답 본문을 가져와 DOM 개체로 구문 분석합니다. $crawler->filter('h1')는 페이지의 모든 h1 태그 노드를 지정하는 필터이며 각 h1 태그 노드에 대해 지정된 익명 함수가 실행됩니다. $node는 현재 노드 객체이고, 해당 text() 메서드는 노드의 텍스트 내용을 얻을 수 있습니다.

Goutte를 사용하여 Zhihu에서 질문과 답변을 크롤링하고 사용자 이름, 답변 콘텐츠, 좋아요 수 및 답변 시간을 CSV 파일에 저장하는 방법을 보여주는 아래의 보다 완전한 예를 살펴보겠습니다.

<?php
use GoutteClient;

$client = new Client();
$crawler = $client->request('GET', 'https://www.zhihu.com/question/21774949');
$fp = fopen('output.csv', 'w');
fputcsv($fp, ['User', 'Content', 'Votes', 'Time']);
$crawler->filter('.List-item')->each(function ($node) use ($fp) {
    $user = $node->filter('.AuthorInfo .Popover')->text();
    $content = $node->filter('.RichText')->text();
    $votes = $node->filter('.Voters')->text();
    $time = $node->filter('.ContentItem-time')->text();
    fputcsv($fp, [$user, $content, $votes, $time]);
});
fclose($fp);

이 코드는 먼저 Zhihu에서 질문 ID 21774949가 있는 페이지를 크롤링한 다음 파일 핸들을 사용하여 CSV 헤더 행을 output.csv 파일에 씁니다. 다음으로, filter() 메서드를 사용하여 페이지의 모든 질문 및 답변 노드를 찾은 다음 각 노드에서 익명 함수를 실행합니다. 익명 함수에서는 filter() 메서드를 사용하여 각 사용자의 이름, 답변 내용, 좋아요 수, 응답 시간을 찾고, fputcsv() 메서드를 사용하여 이 네 가지 필드를 파일에 씁니다. 마지막으로 파일 핸들을 닫습니다.

요약하자면 Guzzle과 Goutte를 사용하여 크롤러 프레임워크를 구축하는 것은 매우 간단하며 유연성과 확장성이 뛰어나고 데이터 마이닝, SEO 최적화 및 기타 분야를 포함하되 이에 국한되지 않는 다양한 시나리오에 적용할 수 있습니다. 그러나 대상 웹사이트에 과도한 부담을 주고 사용자 개인정보를 침해하지 않도록 모든 크롤러는 해당 웹사이트의 robots.txt 파일을 준수해야 합니다.

위 내용은 PHP 기반 크롤러 프레임워크 소개 및 응용 사례에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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