2010-03-27 7 views
5

나는 PHP를 사용하여 웹 사이트를 긁어서 일부 데이터를 수집하고 있습니다. 정규식을 사용하지 않고 모두 끝났습니다. 대신 특정 HTML 태그를 찾으려면 PHP의 explode() 메서드를 사용하고 있습니다.긁히는 웹 사이트가 변경되었는지 어떻게 알 수 있습니까?

웹 사이트의 구조가 변경되면 (CSS, HTML) 잘못된 정보가 스크레이퍼에 수집 될 수 있습니다. 질문은 - HTML 구조가 변경되었는지 어떻게 알 수 있습니까? 잘못된 데이터가 저장되는 것을 방지하기 위해 데이터베이스에 데이터를 저장하기 전에이를 식별하는 방법.

답변

7

콘텐츠가 변경되는 페이지를 스크래핑하는 경우 깨끗한 해결책이 없다고 생각합니다.

필자는 여러 가지 파이썬 스크래퍼를 개발했으며 사이트가 레이아웃에 미묘한 변화를 줄 때 어떻게 좌절 할 수 있는지 알고 있습니다.

당신은 해결책을 시도해 볼 수 있습니다. (PHP 대응 물을 모르겠다.) 그리고 행운이 있다면 추출해야하는 콘텐츠를 격리시킬 수 있습니까? (링크?)

또 다른 가능한 접근법은 일부 제약 조건을 코딩하고 db에 저장하기 전에 확인하는 것입니다.

예를 들어, URL을 스크랩하는 경우 스크래퍼가 공식적으로 유효한 URL인지 확인해야합니다. 정수 ID 또는 긁어 내고 자하는 내용이 유효하다고 인식 될 수있는 것과 동일합니다.

일반 텍스트를 스크래핑하는 경우 확인하기가 더 어려워집니다.

+0

안녕하세요, 저였습니다. 그것이 의도적이지 않았기 때문에 유감스럽게 생각합니다! 나는 잘못된 버튼을 눌렀으나 지금은 변경할 수 없다. 그것은 -이 답변이 편집되지 않는 한 "투표하기에는 너무 오래된 투표"라고 말합니다. 죄송합니다 다시 투표를 할 수 있도록 답변을 변경하십시오. 그것은 의도적 인 것이 아닙니다. – Yeti

1

먼저, 어떤 경우에는 원래의 hashes과 새 html을 비교할 수 있습니다. MD5와 SHA1은 두 가지 인기있는 해시입니다. 이것은 모든 상황에서 유효 할 수도 유효하지 않을 수도 있지만 익숙해야 할 사항입니다. 콘텐츠, 태그 등 무엇인가가 변경되면 알려줍니다.

구조가 변경되었는지 이해하려면 태그 발생의 막대 그래프를 캡처 한 다음이를 비교해야합니다. 태그가 고장난 경우, 태그 트리를 캡쳐하고 태그가 동일한 순서로 발생하는지 비교해야합니다. 이것은 당신이 성취하고자하는 것에 매우 구체적 일 것입니다.

PHP Simple HTML DOM Parser은 HTML을 구문 분석하는 데 도움이되는 도구입니다.

+2

@BrainLy : 새로운 html 파일이 다른 해시를 가지고 있기 때문에 HTML 구조가 변경된 것은 아닙니다. – codaddict

+0

내가 긁고있는 데이터가 매시간 변경되므로 해시가 * 항상 * 달라집니다! 내가 의미했던 바는 그들이 사이트의 디자인을 변경하면 어떻게 효율적으로 탐지 할 수 있을까? – Yeti

+0

동적 페이지는 대개 중요한 구조 변경없이 서로 다른 해시를 일관되게 생성합니다. –

0

Explode()은 HTML 구문 분석기가 아니지만 HTML 구조의 변경 사항에 대해 알고 싶습니다. 그건 까다로울거야. HTML 구문 분석기를 사용해보십시오. 이 일을 제대로 수행 할 수있는 사람은 없습니다.

+0

누구든지 다운 폰트에 대해 설명해 주시겠습니까? – spender

2

구조와 관련된 변경 사항을 알고 싶다면 가장 좋은 방법은 첫 페이지의 DOM 구조를 저장 한 다음 새 구조와 비교하는 것입니다.

당신이 그것을 할 수있는 방법이 많이있다 : - SAXParser를가 DOmParser 등

내가 http://let-them-c.blogspot.com/2009/04/xml-as-objects-in-oops.html

을 의미하거나 http://en.wikipedia.org/wiki/Simple_API_for_XML를 사용할 수있는 몇 가지 포인터를 줄 것이다 작은 블로그가 나 DOm 유틸리티 파서.

+1

HTML과 함께 XML 파서를 사용할 때 매우주의해야합니다. 그들은 사소한 잘못된 HTML에서 날아가 버리는 경향이 있습니다. –

2

내 엉뚱한 말로 말하지만 가능한 경우 일부 문서 객체 모델 PHP 방법을 살펴볼 수 있습니다.DOM의 내 매우 제한된 이해가 맞으면

http://php.net/manual/en/book.dom.php

는 HTML 사이트 구조의 변화는 문서 객체 모델을 변경,하지만 고정 된 구조 내에서 간단한 내용이 변화하지 않을 것입니다. 따라서 DOM 상태를 캡처하여 각 스크래핑마다 비교할 수 있다면 이론적으로 그러한 변경이 이루어진 것으로 판단 할 수 있습니까?

(바 시험 결과가 특정 페이지에 게시되었을 때 전자 메일 알림을 받으려고 할 때 나는이 방법을 사용하여 file_get_contents() 값을 비교했을뿐입니다. 놀랍게도 완벽하게 작동했습니다. 오 탐지 없음 사이트가 콘텐츠를 게시하자마자 이메일로 알려주었습니다.)

2

사이트에 따라 div, 클래스 & 스타일 태그와 같은 긁힌 페이지의 페이지 요소 수를 계산 한 다음이 총계를 나중에 긁힌 자국은 페이지 구조가 변경되었는지 여부를 감지합니다.

각 클래스 또는 id의 이름을 간단한 regex를 사용하여 추출하고 필요에 따라 저장하고 검사 할 수있는 유사한 파일 프로세스를 CSS 파일에 사용할 수 있습니다. 이 목록에 새로 추가 된 항목이 있으면 사이트 구조에서 페이지 구조가 거의 확실하게 변경되었습니다.

관련 문제