문제

어떻게 하는 지능적으로 분석 데이터를 반환에 의해 검색결과 페이지에서?

예를 들어,사라고 말하고 싶을 만들는 웹 서비스를 검색에 대한 온라인 도서로 구문 분석의 검색 결과 많은 책 공급자의 웹사이트입니다.어플리케이션을 활성화 원 HTML 데이터 페이지의 일부 regexs 데이터를 확인하는 작업에 대한 나의 웹 서비스,그러나 어떤 경우 웹사이트의 변경의 포맷 페이지가 나의 코드니다.

RSS 은 참으로 놀라운 옵션이 있지만,많은 사이트에 있지 않는 XML/JSON 를 기반으로 검색 할 수 있습니다.

이 있는 장비는 정보를 전파하는 데 도움이에 페이지를 자동으로?생각을 해야 하는 것 퍼지 AI 모듈 패턴을 인식 검색결과 페이지에며,분석 결과에 따라...

도움이 되었습니까?

해결책

나는 몇 가지의 이 최근에,그리고 여기에 있습니다.

세 가지 기본적인 방법:

  1. 정규표현식이 있습니다.
    • 대부분의 유연성,사용하기 쉬운을 가진 느슨하게 구조적 정보와 변화하는 형식입니다.
    • 열심히 하는 구조/꼬리표 분석을,그러나게 하는 텍스트 일치합니다.
    • 내장의 유효성 검사 데이터 포맷.
    • 을 유지하기 위하여 열심히 다른 사람보다,당신이 있기 때문에 쓰는 정규 표현식에 대한 각 패턴에 사용할 추출/변환 문서
    • 일반적으로 느린 것보다 2and3.
    • 잘 작동한 목록의 비슷한 형식의 항목
    • 좋은 regex 개발/도구를 테스트 및 일부 샘플 페이지에 도움이 될 것입니다.나는 좋은 일에 대해 말 RegexBuddy 니다 여기에.도 그들의 데모입니다.
    • 나는 가장 성공을 거두었다.는 유연성을 사용하여 작업할 수 있습니다 더러운 짐승에서 야생의 HTML 코드입니다.
  2. 변환 HTML XHTML and XML 을 사용하여 추출 도구입니다. 정 HTML,로 변환하여 법적 XHTML,사용 XPath/XQuery/X-이 무엇을 쿼리로는 XML 데이터입니다.
    • 구:TagSoup,HTMLTidy,etc.
    • 품질 HTML-to-XHML 변환하는 것은 매우 중요한,그리고 변동성이 높습니다.
    • 최고의 솔루션을 경우 데이터의 당신이 원하는 구조화하여 HTML 레이아웃과 태그(데이터에서는 HTML 테이블,목록,DIV/SPAN 그룹,etc.)
    • 가장 적합한 링크를 구조물,중첩된 테이블,이미지,목록,등등
    • 보다 더 빨리해야 option1 지만,그보다 느리게 옵션 3.
    • 잘 작동하는 경우 컨텐츠 포맷을 변경/는 변수이지만,문서 구조/레이아웃을 하지 않습니다.
    • 는 경우에 데이터 없으로 구성되어 HTML 태그를 당신이 문제입니다.
    • 과 함께 사용할 수 있습 옵션 1 을 선택합니다.
  3. 파서 생성기(ANTLR,etc.) 을 만들어 문법에 대한 구문 분석 및 분석은 페이지입니다.
    • 내가 노력하지 않기 때문에 이것을 그에 적합하지 않 내(저)페이지
    • 가장 적당한 경우 HTML 을 구조가 높은 구조화하고,매우 일정,일정 및 결코 변하지 않습니다.
    • 사이 있을 경우 쉽게 설명해 본 문서지만,그들은 그들을 포함하지 않 HTML 태그와 재귀를 포함하는 복잡한 동작
    • 이 필요하지 않 XHTML 입력
    • 가장 빠른 처리 속,일반적으로
    • 큰 학습 곡선,하지만 유지하기 쉽

나에 땜질 수확 웹사 옵션 2 의 그러나 나는 그 구문을 수 있다.의 혼합 XML 일부 의사 자바 스크립트 언어입니다.는 경우 다음과 같 Java,그리고 다음과 같 XML 스타일의 데이터 추출(XPath,XQuery)이 있을 수도 있습니다 티켓을 위해 당신입니다.


편집:당신이 정규 표현식을 사용하여 확인,라이브러리를 사용하고 있으로 lazy 수량자 및 그룹!PHP 의 정규 표현식 라이브러리는 이러한 부족,그리고 그들은 필수적인 데이터베이스 사이의 열기/닫기 태그에서 HTML.

다른 팁

a 결정된 HTML 구조 구문 분석, 나는 데이터를 찾기위한 정기적 인 표현을 유지하는 것을 싫어합니다. 트리를 만드는 적절한 파서를 통해 HTML을 구문 분석하는 데 더 많은 운이있을 수 있습니다. 그런 다음 요소를 선택하십시오 ... 더 관리하기 쉽습니다.

가장 좋은 방법은 구문 분석하고 검증 할 수있는 고정 마크 업이있는 엔진의 일부 XML 출력입니다. 생산 된 트리의 '어둠 속에'프로빙이있는 HTML 구문 분석 라이브러리는 일반 표현보다 유지하기가 더 간단 할 것이라고 생각합니다.

이렇게하면 확인하면됩니다 <a href="blah" class="cache_link">... 바로 전환 <a href="blah" class="cache_result">... 또는 무엇이든.

결론적으로, Regexp의 특정 요소를 괴롭히는 것은 어둡습니다. 더 나은 접근 방식은 페이지의 DOM과 같은 모델을 구축하고 태그의 문자 데이터에 '앵커'를 찾는 것입니다.

또는 이메일을 보내다 XML API의 사례를 진술하는 사이트에 ... 고용 될 수 있습니다!

당신은 당신이 어떤 언어를 사용하고 있는지 말하지 않습니다. 자바 땅에서는 사용할 수 있습니다 tagsoup 그리고 XPath는 고통을 최소화하는 데 도움이됩니다. 예제가 있습니다 이 블로그 (물론 XPath는 요구가 지시함에 따라 훨씬 더 복잡해 질 수 있습니다) :

URL url = new URL("http://example.com");
SAXBuilder builder = new SAXBuilder("org.ccil.cowan.tagsoup.Parser"); // build a JDOM tree from a SAX stream provided by tagsoup
Document doc = builder.build(url);
JDOMXPath titlePath = new JDOMXPath("/h:html/h:head/h:title");
titlePath.addNamespace("h","http://www.w3.org/1999/xhtml");
String title = ((Element)titlePath.selectSingleNode(doc)).getText();
System.out.println("Title is "+title);

사이트가 변경되면 XPath 표현식을 외부화하는 것이 좋습니다.

다음은이 사이트를 Screenscrape에 분명히 사용하지 않는 예제입니다. 나도 아니에요 :

"//h:div[contains(@class,'question-summary')]/h:div[@class='summary']//h:h3"

어떤 기술 스택을 사용하고 있는지 언급하지 않았습니다. HTML을 구문 분석하고 있다면 구문 분석 라이브러리를 사용할 것입니다.

상업적이고 무료로 말하는 것을 정확하게하는 웹 서비스도 있습니다. 그들은 사이트를 긁어 내고 웹 서비스 인터페이스를 제공합니다.

그리고 일부 화면 스크래핑을 제공하는 일반적인 웹 서비스는 Yahoo Pipes입니다. 그것에 대한 이전의 stackoverflow 질문

그것은 완벽하지는 않지만 당신은 다음과 같은 파서를보고 싶을 수도 있습니다. 아름다운 수프 레이아웃이 변경되면 마술처럼 같은 정보를 찾지 못하지만 복잡한 정규 표현식을 작성하는 것이 훨씬 쉽습니다. 이것은 파이썬 모듈입니다.

불행히도 '스크래핑'은 웹 사이트에서 HTML을 구문 분석하려고 시도했듯이 가장 일반적인 솔루션입니다. 페이지에 대한 구조적 변경을 감지하고 고칠 경고를 표시 할 수 있으므로 끝의 변경으로 인해 부랑자 데이터가 발생하지 않습니다. 시맨틱 웹이 현실이 될 때까지 큰 데이터 세트를 보장하는 유일한 방법입니다.

또는 API가 제공하는 작은 데이터 세트를 고수 할 수 있습니다. Yahoo는 API를 통해 검색 가능한 데이터를 제공하기 위해 매우 열심히 노력하고 있습니다 (YDN 참조). Amazon API는 많은 책 데이터 등을 열어줍니다.

조금 도움이되기를 바랍니다!

편집 : PHP를 사용하는 경우 simplehtmldom을 추천합니다.

HTML 조작 라이브러리 사용을 살펴 보셨습니까? 루비는 꽤 좋은 것을 가지고 있습니다. 예를 들어 HPRICOT

좋은 라이브러리를 사용하면 CSS Selector 또는 XPath를 사용하려는 페이지의 부분을 지정할 수 있습니다. 이것들은 Regexps를 사용하는 것보다 더 강력 할 것입니다.

HPRICOT WIKI의 예 :

 doc = Hpricot(open("qwantz.html"))
 (doc/'div img[@src^="http://www.qwantz.com/comics/"]')
   #=> Elements[...]

.NET 또는 Python 등에서 비슷한 일을하는 라이브러리를 찾을 수 있다고 확신합니다.

스크린 스크래핑 + 선호하는 언어에 대한 인터넷 검색을 시도하십시오. 파이썬에 대한 몇 가지 옵션을 알고 있습니다. 선호하는 언어에 해당하는 것을 찾을 수 있습니다.

  • 아름다운 수프
  • 기계화 : Perl www와 유사합니다 : 기계화. 객체와 같은 브라우저를 웹 페이지와 함께 ineract와 같은 브라우저를 제공합니다.
  • LXML : libwww에 대한 파이썬 바인딩
  • Scrapemark : 템플릿을 사용하여 페이지 조각을 긁습니다
  • PyQuery : XML/XHTML 문서에서 jQuery 쿼리를 만들 수 있습니다.
  • 스크레이프 : 거미를 쓰고 웹 페이지를 구문 분석하기위한 고급 스크래핑 및 웹 크롤링 프레임 워크

긁어 내기 위해 웹 사이트에 따라 위의 접근 방식 중 하나 이상을 사용해야 할 수도 있습니다.

당신이 같은 것을 사용할 수 있다면 태그 수프, 그것은 시작할 곳이었습니다. 그런 다음 페이지를 XML API처럼 취급 할 수 있습니다.

Java 및 C ++ 구현이있어 작동 할 수 있습니다!

파슬리 http://www.parselets.com 꽤 매끄럽게 보입니다.

JSON을 사용하여 '팔레트'를 정의 할 수 있습니다. 페이지에서 무엇을 찾아야하는지 정의한 다음 해당 데이터를 구문 분석 할 수 있습니다.

다른 사람들이 말했듯이, DOM 표현을 구축하고 XPath/XQuery로 쿼리하는 HTML 파서를 사용할 수 있습니다. 여기에서 매우 흥미로운 기사를 찾았습니다 : Java Theory and Practice : XQuery를 사용한 스크린 스크래핑 - http://www.ibm.com/developerworks/xml/library/j-jtp03255.html

공평하게, 나는 권장대로 태그 수프 방법을 사용하겠습니다.

후속 질문으로서 - 지구상에서 어떻게 큰 스크레이퍼 유형 사이트가 그것을 하는가? 나는 수천 개의 사이트를 스캔하는 구직 엔진 (예 : rally.com)을 보았습니다! 그게 수천 개의 regexes입니까? 불가능한 옆 ...

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