일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 자료구조
- 보안
- Yes
- 데이터구조
- 네트워크보안
- 클라우드컴퓨팅
- 2
- 프로그래밍언어
- 컴퓨터비전
- 네트워크
- 데이터분석
- 컴퓨터공학
- 데이터베이스
- 딥러닝
- 사이버보안
- 소프트웨어
- 파이썬
- 프로그래밍
- 버전관리
- 소프트웨어공학
- 코딩
- 머신러닝
- 웹개발
- I'm Sorry
- 인공지능
- 빅데이터
- 컴퓨터과학
- 데이터과학
- 알고리즘
- 자바스크립트
- Today
- Total
스택큐힙리스트
PHP에서 HTML/XML을 구문 분석하고 처리하는 방법은 무엇인가요? 본문
HTML/XML을 파싱하고 정보를 추출하는 방법은 무엇인가요?
답변 1
네이티브 XML 확장 기능
제가 선호하는 것은 PHP와 함께 번들에 포함된 native XML extensions 중 하나를 사용하는 것입니다. 이들은 대개 3rd party 라이브러리보다 빠르며, 마크업에 대한 모든 제어 권한을 제공하기 때문입니다.
DOM
DOM 확장은 PHP 5를 통해 DOM API를 통해 XML 문서를 조작할 수 있습니다. 이것은 W3C의 문서 객체 모델 코어 레벨 3의 구현으로, 프로그램과 스크립트가 문서의 내용, 구조 및 스타일을 동적으로 액세스하고 업데이트할 수있는 플랫폼 및 언어 중립적 인터페이스입니다.
DOM은 현실 세계의 (잘못된) HTML을 분석하고 수정할 수 있으며 libxml에 기반을 둔 XPath queries을 수행할 수 있습니다.
DOM을 제대로 활용하기 위해서는 시간이 걸립니다. 그러나 그 시간은 저에게 봤을 때 충분히 가치가 있습니다. DOM은 언어에 구애받지 않는 인터페이스이므로, 많은 언어에서 구현된 것을 찾을 수 있습니다. 따라서 프로그래밍 언어를 변경해야 하는 경우, 해당 언어의 DOM API를 이미 알고 있을 확률이 높습니다.
DOM 확장 사용 방법은 Stack Overflow에서 covered extensively이 되었으므로 사용하려면 대부분의 문제를 검색/브라우징하여 해결할 수 있습니다.
다른 답변에서 basic usage example과 general conceptual overview 이 사용 가능합니다.
XMLReader
XMLReader 확장 기능은 XML pull 파서입니다. 리더는 문서 스트림을 앞으로 이동하면서 각 노드에서 멈춥니다.
XMLReader는 DOM과 마찬가지로 libxml에 기반을 두고 있습니다. HTML 파서 모듈을 어떻게 트리거하는지 알지 못하기 때문에 XMLReader를 사용하여 손상된 HTML을 파싱하는 것이 DOM을 사용하는 것보다 libxml의 HTML 파서 모듈을 명시적으로 사용할 수 있는 경우보다 덜 강력할 수 있습니다.
다른 답변에서 basic usage example이(가) 사용 가능합니다.
XML Parser
이 확장 프로그램은 XML 파서를 만들고 각 XML 이벤트에 대한 핸들러를 정의할 수 있게 해줍니다. 각 XML 파서에는 조정할 수 있는 몇 가지 매개변수도 있습니다.
XML 파서 라이브러리는 libxml을 기반으로 하며, SAX 스타일의 XML 푸시 파서를 구현합니다. 이는 DOM이나 SimpleXML보다 메모리 관리에 더 나은 선택일 수 있지만, XMLReader에서 구현된 풀 파서보다 작업하기가 더 어려울 수 있습니다.
SimpleXml
SimpleXML 확장 기능은 일반적인 속성 선택자와 배열 반복자로 처리할 수 있는 객체로 XML을 변환하는 매우 간단하고 쉽게 사용할 수 있는 도구 집합을 제공합니다.
만약 HTML이 유효한 XHTML임을 알고 있다면, SimpleXML은 선택사항입니다. 만약 잘못된 HTML을 구문 분석해야한다면, SimpleXml을 고려하지 마십시오. 그러면 막힐 것입니다.
한 개의 basic usage example이 사용 가능하며, lots of additional examples in the PHP Manual이 있습니다.
3rd Party Libraries (libxml 기반)
3rd-Party 라이브러리를 사용하려면, 문자열 파싱이 아닌 DOM / libxml를 실제로 사용하는 라이브러리를 사용하는 것을 제안합니다.
FluentDom
FluentDOM는 PHP의 DOMDocument에 대한 jQuery와 유사한 플루언트 XML 인터페이스를 제공합니다. 셀렉터는 XPath 또는 CSS로 작성됩니다 (CSS를 XPath 변환기를 사용하여). 현재 버전은 표준 인터페이스를 구현하며 DOM Living Standard의 기능을 추가합니다. FluentDOM은 JSON, CSV, JsonML, RabbitFish 등과 같은 형식을 로드할 수 있습니다. Composer를 통해 설치할 수 있습니다.
HtmlPageDom
Wa72\HtmlPageDom는 DOM을 사용하여 HTML 문서를 쉽게 조작하기 위한 PHP 라이브러리입니다. DOM 트리를 탐색하기 위해 Symfony2 components의 DomCrawler가 필요하며, HTML 문서의 DOM 트리를 조작하기 위한 메서드를 추가하여 확장합니다.
phpQuery
phpQuery는 jQuery JavaScript 라이브러리에 기반한 서버 측 체인 가능한 CSS3 선택기 드라이븐 문서 개체 모델 (DOM) API입니다. 이 라이브러리는 PHP5로 작성되었으며 추가적인 Command Line Interface (CLI)를 제공합니다.
이것은 버그가 많이 있어 사용에 주의해야 함으로 묘사되지만 최소한으로 유지보수되는 것으로 보입니다.
laminas-dom
Laminas\Dom 구성 요소 (이전에는 Zend_DOM이었습니다)는 DOM 문서 및 구조를 처리하는 데 필요한 도구를 제공합니다. 현재, 우리는 XPath와 CSS 선택기 모두를 사용하여 DOM 문서를 쿼리하는 통합 인터페이스를 제공하는 Laminas\Dom\Query를 제공합니다.
이 패키지는 기능이 완전하게 갖춰진 것으로 간주되며, 이제 보안 유지보수 모드에 들어갔습니다.
fDOMDocument
fDOMDocument는 PHP 경고 또는 알림 대신 모든 오류 상황에서 예외를 사용하기 위해 표준 DOM을 확장합니다. 또한 다양한 사용 편의성 및 DOM 사용의 단순화를 위한 사용자 정의 메서드 및 단축키도 추가됩니다.
sabre/xml
sabre/xml는 XMLReader와 XMLWriter 클래스를 래핑하고 확장하여 간단한 xml to object/array 매핑 시스템과 디자인 패턴을 만드는 라이브러리입니다. XML 쓰기 및 읽기는 단일 패스로 이루어지므로 대형 xml 파일에서 빠르고 낮은 메모리를 필요로합니다.
FluidXML
FluidXML는 간결하고 유창한 API로 XML을 조작하기 위한 PHP 라이브러리입니다. XPath와 유창한 프로그래밍 패턴을 활용하여 재미있고 효과적입니다.
3rd-Party (libxml 기반 아님)
DOM/libxml을 기반으로 구축하는 이점은 네이티브 확장에 기반하고 있기 때문에 즉시 좋은 성능을 얻을 수 있다는 것입니다. 하지만 3rd-party 라이브러리가 이 방법을 따르지 않는 경우도 있습니다. 아래 목록 중 일부는 다음과 같습니다.
PHP Simple HTML DOM Parser
PHP5+로 작성된 HTML DOM 파서를 사용하면 HTML을 매우 쉽게 조작할 수 있습니다!
PHP 5+가 필요합니다.
잘못된 HTML을 지원합니다.
제이쿼리와 같은 선택자로 HTML 페이지에서 태그를 찾으세요.
한 줄의 HTML에서 내용을 추출하십시오.
보통 이 파서를 추천하지 않습니다. 코드 기반이 끔찍하며 파서 자체가 상당히 느리고 메모리를 많이 차지합니다. 모든 jQuery 선택기 (예: # $$ & *! *! $ &)가 가능한 것은 아닙니다. libxml 기반 라이브러리 중 어떤 것이든 이 것보다 쉽게 성능을 능가할 수 있습니다.
PHP Html Parser
PHPHtmlParser는 jQuery와 같은 어떤 css 선택기도 사용하여 태그를 선택할 수 있는 간단하고 유연한 html 파서입니다. 목표는 유효하거나 그렇지 않은 HTML을 스크래핑하기 위한 빠르고 쉬운 방법이 필요한 도구 개발을 지원하는 것입니다! 이 프로젝트는 sunra/php-simple-html-dom-parser에서 원래 지원되었지만 지원이 중단된 것 같아 프로젝트는 그 이전 작업을 적용한 것입니다.
다시 말하지만, 이 파서를 추천하지 않습니다. CPU 사용량이 높아 처리 속도가 느리기 때문입니다. 또한 생성된 DOM 객체의 메모리를 지우는 기능이 없습니다. 이러한 문제들은 특히 중첩된 루프에서 발생합니다. 문서 자체도 부정확하고 맞춤법이 틀렸습니다. 2016년 4월 14일 이후 수정에 대한 응답이 없습니다.
HTML 5
위 코드는 HTML5 파싱에 사용할 수 있지만, HTML5가 허용하는 마크업 때문에 성능이 저하될 수 있습니다. 따라서 HTML5를 파싱할 때는 전용 파서를 고려해보는 것이 좋습니다. 이러한 파서들은 PHP로 작성되어 있기 때문에, 하위 언어로 컴파일된 익스텐션에 비해 성능이 느리고 메모리 사용량이 증가할 수 있다는 점을 유의해야합니다.
HTML5DomDocument
HTML5DOMDocument는 기본 DOMDocument 라이브러리를 확장한 것입니다. 일부 버그를 수정하고 일부 새로운 기능을 추가합니다.
HTML 엔티티를 보존합니다 (DOMDocument는 보존하지 않음)
비어 있는 태그를 보존합니다 (DOMDocument는 그렇지 않습니다).
올바른 위치로 올바른 부분을 이동시키는 HTML 코드 삽입이 가능합니다 (head 요소는 head에 삽입되고, body 요소는 body에 삽입됩니다)
CSS 선택자를 사용하여 DOM을 쿼리할 수 있습니다 (현재 사용 가능한 선택자: * , tagname , tagname#id , #id , tagname.classname , .classname , tagname.classname.classname2 , .classname.classname2 , tagname[attribute-selector] , [attribute-selector] , div, p , div p , div > p , div + p , 그리고 p ~ ul .)
element->classList를 지원하도록 추가합니다.
element->innerHTML를 지원합니다.
element->outerHTML를 지원합니다.
HTML5
HTML5는 PHP로 완전히 작성된 표준 호환 HTML5 파서 및 라이터입니다. 안정적이며 많은 프로덕션 웹 사이트에서 사용되며, 500만 이상의 다운로드를 보유하고 있습니다.
HTML5는 다음과 같은 기능을 제공합니다.
HTML5 직렬화 도구
PHP 네임스페이스 지원
작곡가 지원
이벤트 기반 (SAX와 비슷한) 파서
DOM 트리 빌더
QueryPath와의 상호 운용성
PHP 5.3.0 이상에서 실행됩니다.
정규 표현식
마지막으로 추천하지 않는 방법으로는 regular expressions 을(를) 사용하여 HTML에서 데이터를 추출할 수 있습니다. 일반적으로 HTML에서 정규식을 사용하는 것은 권장되지 않습니다.
대부분의 웹에서 찾을 수 있는 일부 코드 단편들은 마크업을 매칭시키기에 약합니다. 대부분의 경우에 특정 HTML 조각에만 작동합니다. 공백을 추가하거나 태그의 속성을 추가하거나 변경하는 것과 같은 작은 마크업 변경은 정규 표현식이 올바르게 작성되지 않으면 실패할 수 있습니다. HTML에 대해 RegEx를 사용하기 전에 무엇을하고있는지 알아야합니다.
HTML 구문 규칙은 이미 HTML 구문 분석기에서 알려져 있습니다. 정규 표현식은 각 새로운 정규 표현식마다 가르쳐져야 합니다. 어떤 경우에는 정규 표현식이 적합하지만, 사용 사례에 따라 다릅니다.
당신 can write more reliable parsers , 하지만 정규식을 사용하여 완전하고 신뢰성있는 사용자 정의 파서를 작성하는 것은 이미 존재하는 라이브러리가 이 작업을 더 잘 수행하기 때문에 시간 낭비입니다.
이것도 보세요 Parsing Html The Cthulhu Way
책
돈을 쓰고 싶다면, 한번 보세요.
PHP Architect's Guide to Webscraping with PHP
나는 PHP Architect나 저자들과 연관되어 있지 않습니다.
답변 2
PHP에서 HTML/XML 파싱 및 처리하는 방법
PHP는 웹 개발에서 널리 사용되며, HTML 및 XML 문서의 파싱과 처리가 필요한 경우가 많이 있습니다. 이러한 문서를 처리하려면 PHP에서 제공하는 DOM(Document Object Model)과 SimpleXML 등의 라이브러리를 사용할 수 있습니다.
DOM 라이브러리를 사용하는 경우, 먼저 파싱할 문서를 로드하여 DOM 객체로 변환합니다. 이후 DOM 객체의 메소드를 사용하여 문서를 검색하고 조작할 수 있습니다. 예를 들어, getElementById() 메소드를 사용하여 HTML 문서에서 특정 ID 값을 가진 요소를 찾을 수 있습니다.
SimpleXML 라이브러리는 DOM 보다 더 간단한 구문을 가지고 있으며, XML 문서를 파싱하는 경우에 특히 유용합니다. SimpleXML을 사용하면 각 XML 요소를 객체로 다룰 수 있으므로, 중첩된 구조를 가진 XML 문서를 쉽게 탐색할 수 있습니다.
이 외에도 PHP에서는 정규 표현식을 사용하여 HTML/XML 문서를 파싱하는 방법이 있습니다. 정규 표현식은 문자열을 검색하고 매칭하는 패턴을 정의하여 사용합니다. 이 방법은 비교적 복잡하지만, 작은 데이터를 파싱하는 데 유용할 수 있습니다.
PHP에서 HTML/XML 문서를 파싱하는 방법은 다양하지만, 도구를 선택할 때는 데이터의 크기와 구조, 작업의 복잡도 등을 고려해야 합니다. 적합한 도구를 선택하면 HTML/XML 문서를 효율적으로 처리할 수 있으며, 웹 개발에서 필수적인 기능을 구현할 수 있게 됩니다.
번역해주셔서 감사합니다.