2010-12-21 21 views
2

많은 라이브러리 웹 페이지에서 사용 가능한 책을 크롤링/구문 분석하고 색인을 생성하는 작업이 제공되었습니다. 보통 HTML Agility Pack과 C#을 사용하여 웹 사이트 콘텐츠를 구문 분석합니다. 그 중 하나는 다음과 같다 : 당신이 * (모든 책)을 검색하면C#에서 웹 페이지 크롤링

http://bibliotek.kristianstad.se/pls/bookit/pkg_www_misc.print_index?in_language_id=en_GB

하는이 페이지 당 10 책으로 페이지가 매겨진 책의 많은 목록을 반환합니다.

내가 발견 한 일반적인 웹 크롤러는이 웹 사이트에서 실패합니다. 나는 또한 페이지의 모든 링크를 거쳐 결과를 동적으로 생성하기 위해 게시/변수를 생성하는 자체 크롤러를 작성하려고했습니다. 나는 (비록 내가 생성 된 링크가 옳다는 것을 확신하지만) 얻을 수있는 404 에러로 대부분 이것을 수행 할 수 있었다.

사이트는 Javascript를 사용하여 컨텐츠를 생성하고 GET 및 POST 변수 제출의 혼합 모드를 사용합니다.

+1

여기 어딘가에 질문이 있습니까? –

답변

3

저는 사지에 나가고 있지만, JavaScript GET 및 POST를 Fiddler으로 관찰하고 해당 요청을 기점으로 할 수 있습니다. Fiddler는 자신의 C# 프로젝트에 넣을 수있는 FiddlerCore을 가지고 있습니다. 이를 사용하여 WebBrowser 컨트롤에서 만들어진 요청을 모니터링 한 다음 나중에 크롤링을 위해 저장합니다.

C# JavaScript 인터프리터 경로를 내려가는 것이 '보다 정확한 방법'처럼 들릴지 모르겠지만 가장 단순한 경우가 아니라면 오류 및 버그로 인해 훨씬 ​​더 어려워지고 가벼워집니다.

행운을 빈다.

+1

또한, 특정 요청을 다시 생산하는 HttpWebRequest 코드를 생성합니다 피들러에 대한 플러그인이 있습니다. 특정 헤더에 의존하는 스크린 스크래핑 사이트에 매우 편리합니다. (그리고 분명히 당신은 그것을 썼습니다 - 예수님은 우연의 일치입니까!) – Josh

+0

@Josh - 나는 우연의 일치, 맞습니다 ;-) 나는 우연히 Fiddler 팬이되었습니다. 그것은 내가 예상했던 것보다 더 자주 편리한 방법으로옵니다. 바라기를, OP는 그것을 사용할 수 있습니다. 플러그인에 대한 필수 링크 - http://www.chadsowald.com/software/fiddler-extension-request-to-code – Chad

+0

나는 이것이 내 문제를 해결할 것이라고 생각한다. 페이지의 스크립트 분석을 보지 못한 많은 변수가 있습니다. 신난다 도구 실제로, 나는 그것에 관해 더 일찍 알고 있었기를 바란다. – user496607

0

사이트에서 JavaScript로 콘텐츠를 생성하는 경우 운이 없게됩니다. 실제로 스크립트를 실행하고 생성 된 출력을 캡처 할 수 있도록 C#에서 사용할 수있는 전체 JavaScript 엔진이 필요합니다.

Embedding JavaScript engine into .NET이 질문을보십시오. 그러나 필요한 것을하기 위해 "심각한"노력을 기울일 것입니다.

+5

그는 WebBrowser 컨트롤을 자동화 할 수 있지만 대부분의 테스트 대상에서 조기 사망하게됩니다. – Josh

+0

@ Josh : 웃음 +1. – Jon

+0

@ 조쉬 : 누군가가 1 년 전 그런 현명한 말을 전했으면 좋겠다 .- – Chad

1

Windows Forms 응용 프로그램에서 WebBrowser control을 사용하여 페이지를 열면 HtmlDocument을 통해 DOM에 액세스 할 수 있어야합니다. 그것은 HTML 링크에서 작동합니다.

자바 스크립트를 통해 생성되는 링크의 경우 자바 스크립트를 통해 HTML 페이지와 상호 작용할 수있는 ObjectForScripting 속성을 볼 수 있습니다. 나머지는 자바 스크립트 문제가되지만 이론적으로는 풀어야합니다. 나는 이것을 시도하지 않았기 때문에 나는 말할 수 없다.

2

FWIW, C# WebBrowser 컨트롤은 매우 느립니다. 동시에 두 개 이상의 동시 요청을 지원하지 않습니다.

SHDocVw 사용은 더 빠르지 만 세마포 제한도 있습니다.

더 빠른 MSHTML을 사용하고 있습니다. 작업 코드는 여기에 있습니다 : https://svn.arachnode.net/svn/arachnodenet/trunk/Renderer/HtmlRenderer.cs 사용자 이름/비밀 번호 : 공개 (다른 두 사람이 처리 중에 실행될 때 요청/렌더링 제한이 없음 ...)

이것은 컨트롤이 렌더링되지 않으므로 아무 것도 렌더링되지 않습니다. (더 빠름).

감사합니다, 마이크

0

AbotX 당신을 위해 자바 스크립트 렌더링을 수행합니다. 그것도 무료가 아니야.