>  기사  >  백엔드 개발  >  Laravel에서 HTML 인스턴스를 분석하기 위해 Symfony의 Crawler 구성 요소를 사용하는 방법에 대한 자세한 설명

Laravel에서 HTML 인스턴스를 분석하기 위해 Symfony의 Crawler 구성 요소를 사용하는 방법에 대한 자세한 설명

怪我咯
怪我咯원래의
2017-07-04 13:40:561459검색

이 글은 주로 Laravel에서 HTML을 분석하기 위해 Symfony의 Crawler 컴포넌트를 사용하는 방법을 소개합니다. 도움이 필요한 친구들이 참고할 수 있습니다.

Crawler의 전체 이름은 Symfony 프레임워크의 컴포넌트인 DomCrawler입니다. 특이한 점은 DomCrawler에는 중국어 문서가 없고 Symfony에서는 이 부분을 번역하지 않았기 때문에 DomCrawler를 사용한 개발은 조금씩만 탐색할 수 있다는 것입니다. 이제 사용 과정에서의 경험을 요약하겠습니다.

먼저 css selector

composer require symfony/dom-crawler
composer require symfony/css-selector
css-seelctor를 설치합니다. css로 노드를 선택할 때 일부 기능이 사용됩니다

설명서에 사용된 예제는

use Symfony\Component\DomCrawler\Crawler;
$html = <<<‘HTML‘
Hello World!
Hello Crawler!
HTML;
$crawler = new Crawler($html);
foreach ($crawler as $domElement)
{
var_dump($domElement->nodeName);
}

인쇄된 결과는

입니다.
string ‘html‘ (length=4)

이 때문에 html 코드의 nodeName이 html입니다. 제가 사용하기 시작했을 때 프로그램이 잘못된 줄 알았어요. . .

실제 사용 과정에서 새로운 크롤러($html)에 코드 깨짐 문제가 발생한다면 이는 페이지 인코딩과 관련이 있어야 하므로 다음 방법을 사용하여 먼저 크롤러를 초기화한 후 node

$crawler = new Crawler();
$crawler->addHtmlContent($html);

addHtmlContent의 두 번째 매개변수는 charset이고 기본값은 utf-8입니다.

다른 예시는 공식 문서인 http://symfony.com/doc/current/comComponents/dom_crawler.html

직장에서 조금 시도해 본 사용법을 기록해 주세요

filterXPath( string $xpath) 메소드, 매뉴얼에 따르면 이 메소드의 매개변수는 $xpath이며, p, p 등의 블록이 자주 사용된다고 합니다.

echo $crawler->filterXPath(‘//body/p‘)->text();
echo $crawler->filterXPath(‘//body/p‘)->last()->text();

출력은 첫 번째와 다음 p 태그 블록의 텍스트입니다.

var_dump($crawler->filterXPath(‘//body‘)->html());

출력은 본문의 HTML입니다.

foreach ($crawler->filterXPath(‘//body/p‘) as $i => $node) {
$c = new Crawler($node);
echo $c->filter(‘p‘)->text();
}

filterXPath는 DOMElement 블록의 배열을 가져오고 각 DOMElement 블록은 새로운 크롤러 개체를 사용하여 계속할 수 있습니다. parsing

$nodeValues =
$crawler->filterXPath(‘//body/p‘)->each(function (Crawler $node, $i) {
return $node->text();
});

crawler는 각 루프를 제공하고 클로저 함수를 사용하여 코드를 단순화합니다. 그러나 $nodeValues를 이렇게 작성하면 추가 처리가 필요한 배열이 생성된다는 점에 유의하세요.

기타 용도

echo $crawler->filterXPath(‘//body/p‘)->attr(‘class‘);

첫 번째 p 태그에 해당하는 클래스 속성의 "message" 값을 얻을 수 있습니다

$crawler->filterXPath(‘//p[@class="样式"]‘)->filter(‘a‘)->attr(‘href‘);
$crawler->filterXPath(‘//p[@class="样式"]‘)->filter(‘a>img‘)->extract(array(‘alt‘, ‘href‘))

위는 태그 속성을 얻는 몇 가지 방법입니다

filter는 filterXPath와 다릅니다. 매뉴얼에는 CSS가 선택기를 잘 이해하지 못한다고 되어 있습니다. p와 같은 XPath 노드에 포함된 요소라는 것을 알고 있습니다. 특정 상황은 실제 개발에서 시도해야 합니다.

일반적으로 DomCrawler는 단순한 HTML DOM보다 사용하기 쉽다고 생각합니다. 아마도 더 쉽게 사용하기 때문일 것입니다.

위 내용은 Crawler의 기본 기능일 뿐입니다. 자세한 사용법은 Symfony 매뉴얼의 Crawler 부분에 있는 기능을 참조하세요

http://api.symfony.com/3.2/Symfony/Component/DomCrawler/Crawler .html

Crawler의 가장 큰 문제는 여전히 예제가 너무 적고, 기능 매뉴얼에 사용법 예제가 없어 실제 사용에서만 살펴볼 수 있다는 것입니다. . . .

위 내용은 Laravel에서 HTML 인스턴스를 분석하기 위해 Symfony의 Crawler 구성 요소를 사용하는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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