문제

데이터를 응용 프로그램으로 가져 오려면 일련의 웹 페이지를 구문 분석해야합니다. 각 유형의 웹 페이지는 동일한 종류의 데이터를 제공합니다. 문제는 각 페이지의 HTML이 다르기 때문에 데이터의 위치가 다르다는 것입니다. 또 다른 문제는 HTML 코드가 형식이 잘못되어 XML 유사 파서를 사용하는 것이 불가능하다는 것입니다.

지금까지 내가 생각할 수있는 가장 좋은 전략은 다음과 같은 각 종류의 페이지에 대한 템플릿을 정의하는 것입니다.

템플릿 A :

<html>
...
  <tr><td>Table column that is missing a td 
      <td> Another table column</td></tr>
  <tr><td>$data_item_1$</td>
...
</html>

템플릿 B :

<html>
...
  <ul><li>Yet another poorly formatted page <li>$data_item_1$</td></tr>
...
</html>

이렇게하면 모든 페이지에 대해 하나의 단일 파서가 필요합니다. 각 페이지는 각 페이지를 템플릿과 비교하고 검색합니다. $data_item_1$, $data_item_2$, 그래도 여전히 많은 일이 될 것입니다. 더 간단한 솔루션을 생각할 수 있습니까? 도움이 될 수있는 도서관이 있습니까?

감사

도움이 되었습니까?

해결책

Tidy를 통해 페이지 소스를 전달하여 유효한 페이지를 얻을 수 있습니다. 당신은 깔끔한 것을 찾을 수 있습니다 여기. Tidy는 많은 프로그래밍 언어를 바인딩합니다. 이 작업을 마친 후에는 좋아하는 파서/콘텐츠 추출 기술을 사용할 수 있습니다.

다른 팁

추천합니다 HTML 민첩성 팩. XPATH를 사용하여 선택과 같은 XML을 제공하면서 구조화되지 않은 HTML과 함께 작업 할 수 있습니다. 여전히 다른 선택을 사용하여 항목을 템플릿하거나 다른 선택을 선택하고 분석해야하지만 불량한 구조 혹을 극복 할 수 있습니다.

말한 바와 같이 여기 그리고 이전에 다른 답변에 대해 아름다운 수프 이상한 HTML을 구문 분석 할 수 있습니다.

아름다운 수프는 화면 스크래핑과 같은 빠른 처리 프로젝트를 위해 설계된 파이썬 HTML/XML 파서입니다. 세 가지 기능은 강력합니다.

  1. 당신이 나쁜 마크 업을 주면 아름다운 수프가 질식하지 않습니다. 그것은 원본 문서만큼이나 의미가있는 구문 분석 트리를 생성합니다. 이것은 일반적으로 필요한 데이터를 수집하고 도망 갈 수있을 정도로 좋습니다.
  2. Beautiful Soup은 구문 분석 트리를 탐색, 검색 및 수정하기위한 몇 가지 간단한 방법과 Pythonic 관용구를 제공합니다. 문서를 해부하고 필요한 것을 추출하기위한 툴킷입니다. 각 애플리케이션에 대해 사용자 정의 파서를 만들 필요가 없습니다.
  3. 아름다운 수프는 들어오는 문서를 자동으로 유니 코드로 변환하고 발신 문서를 UTF-8로 전환합니다. 문서가 인코딩을 지정하지 않고 아름다운 수프가 자동으로 변환 할 수 없다면 인코딩에 대해 생각할 필요가 없습니다. 그런 다음 원래 인코딩을 지정하면됩니다.

아름다운 수프는 당신이주는 모든 것을 구문 분석하고 당신을 위해 나무를 가로 질러 일합니다. "모든 링크 찾기"또는 "클래스 externAllink의 모든 링크 찾기"또는 "URL이"foo.com "과 일치하는 모든 링크를 찾거나"대담한 텍스트가있는 테이블 제목 찾기를 찾은 다음 제공 할 수 있습니다. 나에게 그 텍스트. "

HTML5 파서처럼 사용하십시오 html5lib.

HTML Tidy와 달리 브라우저가하는 일에 매우 가까운 오류 처리가 가능합니다.

다음과 같이 몇 개의 C# 특정 스레드가 있습니다. C# HTML 파서를 찾고 있습니다.

정규 표현식을 추출하는 데 필요한 데이터에 따라 옵션 일 수 있습니다. 나는 많은 사람들이 구조화 된 데이터에서 Regexes를 사용한다는 생각에 떨릴 것이라는 것을 알고 있지만, 많은 HTML이 실제로 잘 구성되지 않고 구문 분석하기가 매우 어려울 수 있다는 명백한 사실입니다.

나는 당신과 비슷한 문제가 있었지만, 제 경우에는 HTML을 구문 분석하지 않고 쉽게 식별하기 쉬운 페이지의 특정 데이터 만 원했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top