문제

웹사이트와 그 자산을 살펴보고 통계와 보고서를 생성하는 코드를 작성하고 싶습니다.자산에는 이미지가 포함됩니다.링크를 추적하거나 최소한 페이지의 메뉴를 식별할 수 있기를 바랍니다.또한 클래스 이름 등을 토대로 CMS가 어떤 사이트를 만들었는지 추측해 보고 싶습니다.

나는 사이트가 합리적으로 정적이거나 CMS에 의해 구동되지만 RIA와 같은 것은 아니라고 가정하겠습니다.

내가 어떻게 발전할 수 있을지에 대한 아이디어.

1) 사이트를 iFrame에 로드합니다.jQuery로 파싱할 수 있어서 좋을 것 같아요.아니면 내가 할 수 있을까?크로스 사이트 스크립팅 규칙으로 인해 방해를 받는 것 같습니다.나는 이러한 문제를 해결하기 위한 제안을 보았지만 브라우저가 그러한 문제를 계속해서 단속할 것이라고 가정합니다.북마크릿이 도움이 될까요?

2) Firefox 부가 기능.이렇게 하면 크로스 사이트 스크립팅 문제를 해결할 수 있을 것입니다. 그렇죠?Firefox(및 GreaseMonkey)용 디버깅 도구를 사용하면 모든 종류의 작업을 수행할 수 있으므로 실행 가능한 것 같습니다.

3) 서버 측에서 사이트를 확보하십시오.서버의 라이브러리를 사용하여 구문 분석하세요.

4) YQL.이것은 사이트 구문 분석을 위해 만들어진 것이 아닌가?

도움이 되었습니까?

해결책

그것은 실제로 프로젝트의 규모에 달려 있습니다. 단지 캐주얼하고 완전히 자동화되지 않은 경우 Firefox Addon을 강력하게 제안합니다.

나는 비슷한 프로젝트의 중간에 있습니다. JavaScript를 사용하여 생성 된 페이지의 DOM을 분석해야합니다. 서버 측 브라우저를 작성하는 것이 너무 어려웠으므로 Adobe Air, Firefox Addons, Userscripts 등과 같은 다른 기술로 전환했습니다.

자동화가 필요하지 않은 경우 FX Addon은 훌륭합니다. 스크립트는 페이지를 분석하고, 결과를 표시하고, 부품을 수정하도록 요청하고, 그것이 불확실하고, 마지막으로 데이터를 백엔드에 게시 할 수 있습니다. 당신은 모든 DOM에 액세스 할 수 있으므로 JS/CSS/HTML/뭐든지 구식을 작성할 필요가 없습니다 (직업의 지옥이 될 것입니다!)

또 다른 방법은 Adobe Air입니다. 여기에서는 응용 프로그램을 더 많이 제어 할 수 있습니다. 응용 프로그램을 더 많이 제어 할 수 있습니다. 배경에서 출시 할 수 있으며 상호 작용없이 모든 구문 분석 및 분석을 수행 할 수 있습니다. 단점은 - 당신은 모든 페이지의 dom에 액세스 할 수 없다는 것입니다. 통과하는 유일한 방법은 대상 URL을 가져오고 일부 JavaScript (신뢰할 수없는 신뢰할 수없는 샌드 박스 브리지를 만들기 위해)를 추가하는 간단한 프록시를 설정하는 것입니다. 더러운 해킹이지만 작동합니다.

편집하다:Adobe Air에는 외국 웹 사이트의 DOM에 액세스하는 두 가지 방법이 있습니다.

  • ajax를 통해로드하고 htmlloader 객체를 만들고 응답을 공급합니다 (loadString 방법 IIRC)
  • iframe을 만들고 신뢰할 수없는 샌드 박스에 사이트를로드하십시오.

이유를 기억하지 못하지만 첫 번째 방법은 나에게 실패했기 때문에 다른 방법을 사용해야했습니다 (해결할 수없는 보안상의 이유가 있다고 생각합니다). 그리고 사이트의 DOM에 액세스하기 위해 샌드 박스를 만들어야했습니다. 여기에 약간 있습니다 샌드 박스 교량 처리. 아이디어는 간단한 JS를 추가하는 프록시를 만드는 것입니다. childSandboxBridge 부모에게 몇 가지 방법을 노출시킵니다 (이 경우 : 공기 적용). 스크립트 내용은 다음과 같습니다.

window.childSandboxBridge = {
   // ... some methods returning data
}

(조심하십시오 - 샌드 박스 브리지를 통해 전달할 수있는 것의 제한 사항이 있습니다 - 확실히 복잡한 물체가 없습니다! 원시 유형 만 사용하십시오)

따라서 프록시는 기본적으로 HTML 또는 XHTML을 반환 한 모든 요청을 조작했습니다. 다른 모든 것은 방금 변하지 않은 것을 통과했습니다. Apache + PHP를 사용 하여이 작업을 수행했지만 일부 플러그인/사용자 정의 모듈이있는 실제 프록시로 수행 할 수 있습니다. 이런 식으로 나는 모든 사이트의 Dom에 액세스 할 수있었습니다.

편집 종료.

내가 아는 세 번째 방법, 가장 어려운 방법 - 환경과 비슷한 환경을 설정합니다. 브라우저 샷. 그런 다음 자동화와 함께 Firefox를 사용하고 있습니다. 서버에 Mac OS X가있는 경우 ActionScript를 사용하여 자동화를 수행 할 수 있습니다.

따라서 요약합니다.

  • PHP/Server-Side 스크립트-고유 한 브라우저, JS 엔진, CSS 파서 등을 구현해야합니다.
  • Firefox Addon - Dom과 모든 것들에 액세스 할 수 있습니다. 사용자가이를 작동해야합니다 (또는 적어도 어떤 종류의 AutorELoad와 함께 열린 Firefox 세션). 사용자가 전체 프로세스를 안내 할 수있는 좋은 인터페이스.
  • Adobe Air - FX Addon을 만드는 것보다 더 어렵지만 더 강력한 작업 데스크탑 컴퓨터가 필요합니다.
  • 자동화 된 브라우저 - 웹 개발의 더 많은 데스크탑 프로그래밍 문제. 그래픽 환경이없는 Linux 터미널에서 설정할 수 있습니다. 마스터 해킹 기술이 필요합니다. :)

다른 팁

내 제안은 다음과 같습니다.

a) 스크립팅 언어를 선택했습니다. 나는 Perl 또는 Python을 제안합니다 : 또한 curl+bash이지만 예외 처리는 나쁘지 않습니다.

b) 파이썬 또는 Perl 라이브러리를 사용하여 스크립트를 통해 홈페이지를로드하십시오. Perl을 시도하십시오 www :: 기계화 기준 치수.

Python에는 많은 내장 모듈이 있으며 www.feedparser.org도 살펴보십시오.

c) 서버 헤더 (HTTP 헤드 명령을 통해)를 검사하여 응용 프로그램 서버 이름을 찾으십시오. 운이 좋으면 CMS 이름 (ID WordPress 등)도 찾을 수 있습니다.

d) Google XML API를 사용하여 "링크 : sittedomain.com"과 같은 것을 요청하여 사이트를 가리키는 링크를 찾으십시오. 다시 Google 홈페이지에서 Python에 대한 코드 예제를 찾을 수 있습니다. 또한 도메인 순위를 Google에 요청하는 것이 도움이 될 수 있습니다.

e) SQLITE DB로 데이터를 수집 한 다음 Post Process in Excel에서 데이터를 수집 할 수 있습니다.

소스 (xhtml/html)를 단순히 가져 와서 구문 분석해야합니다. 거의 모든 현대 프로그래밍 언어로 그렇게 할 수 있습니다. 인터넷에 연결된 자신의 컴퓨터에서.

iframe은 HTML 컨텐츠를 표시하기위한 위젯이며 데이터 분석 기술이 아닙니다. 데이터를 어디에나 표시하지 않고 분석 할 수 있습니다. 브라우저가 필요하지 않습니다.

Python, Java, PHP와 같은 언어의 도구는 JavaScript 또는 Firefox 확장에있는 것보다 작업에 더 강력합니다.

또한 웹 사이트 뒤에 어떤 기술이 있는지는 중요하지 않습니다. XHTML/HTML은 브라우저가 어떻게 렌더링하든 일련의 문자열입니다. "자산"을 찾으려면 단순히 "IMG", "Object"와 같은 특정 HTML 태그를 찾을 수 있습니다.

나는 글쓰기가 확장이라고 생각합니다 개똥 벌레 아마도 가장 쉬운 방법 중 하나 일 것입니다. 예를 들어 yslow Firebug 위에 개발되었으며 찾고있는 기능 중 일부 (예 : 이미지, CSS 및 JavaScript-Summaries)를 제공합니다.

옵션 #4 First (YQL)를 시도해 보는 것이 좋습니다. 이와 같이 보이는 이유는 필요한 모든 데이터를 얻을 수 있고 웹 사이트 또는 실제로 사이트에 대한 정보를 얻을 수있는 곳으로 도구를 구축 할 수 있습니다. 브라우저의 페이지로 이동해야합니다. YQL이 필요한 것에 대해 작동한다면이 옵션에서 가장 유연성이 가장 높은 것으로 보입니다.

YQL이 튀어 나오지 않으면 옵션 #2 (Firefox Addon)와 함께 가십시오.

나는 당신이 아마해야한다고 생각합니다 노력하다 그리고 이미 알고있는 크로스 사이트 스크립팅 문제로 인해 옵션 #1 (Iframe)에서 멀리 떨어져 있습니다.

또한 옵션 #3 (서버 측에서 사이트를 잡음)을 사용했으며 과거에 제가 실행 한 한 가지 문제는 AJAX 호출을 사용한 사실을 사용한 후 컨텐츠로드를 잡는 사이트입니다. 당시 나는 Ajax를 사용하는 페이지의 전체 내용을 가져 오는 좋은 방법을 찾지 못했습니다. 따라서 그 장애물에주의하십시오! 여기에있는 다른 사람들도 그와 달려있었습니다. 이것을 참조하십시오. 동적 웹 사이트를 긁어 모으십시오

Ajax 동적 컨텐츠 문제 :Ajax 자체를 사용하여 컨텐츠를 잡고 evalscripts : true 매개 변수를 사용하는 것과 같은 Ajax 문제에 대한 몇 가지 솔루션이있을 수 있습니다. 자세한 내용은 다음 기사를 참조하고 문제를 해결해야 할 컨텐츠에서 JavaScript를 평가하는 방법에 대해 알아야 할 문제를 참조하십시오.

프로토 타입 라이브러리 : http://www.prototypejs.org/api/ajax/updater

메세지 보드: http://www.crackajax.net/forums/index.php?action=vthread&forum=3&topic=17

또는 돈을 기꺼이 지출하려면 이것을 살펴보십시오.http://aptana.com/jaxer/guide/develop_sandbox.html

다음은 webrobot이라는 .NET 구성 요소를 사용하여 Digg.com과 같은 동적 Ajax 활성화 사이트에서 컨텐츠를 폐기하는 추악한 (유용한) 예입니다.http://www.vbdotnetheaven.com/uploadfile/fsjr/ajaxwebscraping0907200600029am/ajaxwebscraping.aspx

또한 PHP와 CURL 라이브러리를 사용하여 웹 페이지에서 모든 링크를 폐기하는 방법에 대한 일반적인 기사가 있습니다. 그러나이 기사와 CURL 라이브러리가 AJAX 컨텐츠 문제를 다루는 지 확실하지 않습니다.http://www.merchantos.com/makebeta/php/scraping-links-with-php/

내가 방금 생각했을 수도있는 한 가지는 다음과 같습니다.

  1. 내용을 잡고 Ajax를 사용하여 평가하십시오.
  2. 컨텐츠를 서버로 보냅니다.
  3. 페이지, 링크 등을 평가하십시오.
  4. 선택 사항] 컨텐츠를 서버의 로컬 페이지로 저장하십시오.
  5. 통계 정보를 페이지로 되돌립니다.
  6. 선택 사항] 강조 표시된 캐시 된 로컬 버전을 표시합니다.

^참고 : 로컬 버전을 저장하는 경우 일반 표현식을 사용하여 상대 링크 경로 (특히 이미지의 경우)를 올바르게 변환해야합니다.

행운을 빕니다! Ajax 문제에 대해주의하십시오. 오늘날 많은 사이트가 Ajax를 사용하여 동적으로 컨텐츠로드됩니다. Digg.com은 MSN.com을 뉴스 피드 등으로 만듭니다 ...

요즘에는 주로 .Net 프로그래머이기 때문에 .Net 바인딩과 함께 C#이나 다른 언어를 사용하라는 조언을 드립니다.사용 웹 브라우저 페이지를 로드한 다음 문서의 요소를 반복하는 컨트롤을 사용합니다. GetElementsByTagName()) 링크, 이미지 등을 가져옵니다.약간의 추가 작업(사용 가능한 경우 BASE 태그 구문 분석)을 통해 src 및 href 속성을 URL로 확인하고 HttpWeb요청 대상 이미지에 대한 HEAD 요청을 보내 크기를 결정합니다.관심이 있는 경우 페이지가 얼마나 그래픽 집약적인지 알 수 있습니다.통계에 포함하고 싶은 추가 항목에는 백링크/페이지 순위(Google API를 통해)가 포함될 수 있습니다. HTML 또는 XHTML로 유효성을 검사합니다., 동일한 도메인에 있는 URL과 외부 사이트에 있는 URL에 링크되는 링크의 비율, 가능하다면 다양한 검색 문자열에 대한 페이지의 Google 순위(프로그래밍 방식으로 사용할 수 있는지는 알 수 없음).

네트워킹 및 텍스트 구문 분석/일반 표현식을 강력하게 지원하는 언어로 작성된 스크립트 (또는 선택한 언어에 따라 컴파일 된 앱)를 사용합니다.

  • 파이썬
  • .NET 언어 선택
  • 자바

당신이 가장 편한 언어가 무엇이든. 기본 독립형 스크립트/앱을 사용하면 브라우저 통합 및 보안 문제에 대해 너무 걱정할 필요가 없습니다.

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