IT박스

Google Chrome 확장 (JavaScript + Chrome API)에서 웹 스크랩 핑

itboxs 2020. 11. 9. 07:57
반응형

Google Chrome 확장 (JavaScript + Chrome API)에서 웹 스크랩 핑


JavaScript 및 사용 가능한 추가 기술이 있는 Google 크롬 확장 프로그램 내에서 현재 열려 있지 않은 탭의 웹 스크래핑 을 수행하는 가장 좋은 옵션은 무엇입니까? 다른 JavaScript 라이브러리도 허용됩니다.

중요한 것은 일반적인 웹 요청처럼 동작하도록 스크래핑을 마스킹하는 것입니다 . AJAX 또는 XMLHttpRequest를, 등의 어떠한 표시하지 X-Requested-With: XMLHttpRequestOrigin.

스크랩 된 콘텐츠는 확장 내에서 추가 조작 및 표시를 위해 JavaScript에서 액세스 할 수 있어야합니다 (대부분의 경우 문자열).

WebKit / Chrome 관련 API에 일반적인 웹 요청을 만들고 조작 결과를 얻는 데 사용할 수있는 후크가 있습니까?

var pageContent = getPageContent(url); // TODO: Implement
var items = $(pageContent).find('.item');
// Display items with further selections

초기 디버깅을 위해 디스크의 로컬 파일에서이 작업을 수행 할 수있는 보너스 포인트 입니다. 그러나 그것이 해결책을 멈추는 유일한 요점이라면 보너스 포인트를 무시하십시오.


XHR2 사용을 시도 하고 패치로responseType = "document" 폴백 합니다 . 지원을 감지하는 방법에 대한 예는 https://gist.github.com/1138724참조 하십시오 ( blob 에서 생성 된 개체 URL을 동 기적으로 확인 ).(new DOMParser).parseFromString(responseText, getResponseHeader("Content-Type"))text/htmlresponseType = "documentresponse === nulltext/html

Chrome WebRequest API사용하여 X-Requested-With헤더 등 을 숨 깁니다 .


Google 크롬 플러그인 이외의 것을 잘 살펴보면 백그라운드에서 Qt-Webkit을 사용하고 ajax 요청을 만드는 브라우저처럼 실행되는 phantomjs살펴보십시오 . 화면에 출력을 표시하지 않고 다른 작업을 수행하는 동안 백그라운드에서 작업 할 수 있으므로 헤드리스 브라우저라고 부를 수 있습니다. 원하는 경우 가져온 페이지에서 이미지, pdf를 내보낼 수 있습니다. 브라우저에서와 같이 페이지를로드하고 버튼을 클릭하는 JS 인터페이스를 제공합니다. 스크랩하려는 페이지에 jQuery와 같은 사용자 정의 JS를 삽입하고이를 사용하여 dom에 액세스하고 원하는 데이터를 내보낼 수도 있습니다. Webkit을 사용 하므로 렌더링 동작은 Google Chrome과 똑같습니다.

또 다른 옵션은 Mozilla Engine을 기반으로하고 그 자체로 매우 좋은 개념 인 Aptana Jaxer 를 사용 하는 것입니다. 간단한 스크래핑 도구로도 사용할 수 있습니다.


이 질문을받은 이후 많은 도구가 출시되었습니다.

artoo.js 는 그중 하나입니다. 스크래핑 유틸리티를 제공하기 위해 브라우저의 콘솔에서 실행되는 JavaScript 코드입니다. 크롬 확장으로도 사용할 수 있습니다.


웹 스크래핑은 Chrome 확장 프로그램에서 다소 복잡합니다. 몇 가지 사항 :

  • DOM에 액세스하기 위해 콘텐츠 스크립트를 실행합니다.
  • 백그라운드 페이지 (브라우저 당 하나씩)는 콘텐츠 스크립트로 메시지보내고받을 수 있습니다 . 즉, RPC 끝점을 설정하고 백그라운드 페이지의 컨텍스트에서 지정된 콜백을 응답으로 실행하는 콘텐츠 스크립트를 실행할 수 있습니다.
  • 웹 페이지의 모든 프레임에서 콘텐츠 스크립트를 실행 한 다음 문서 트리 (페이지에 포함 된 1..N 프레임으로 구성됨)를 함께 연결할 수 있습니다.
  • SK가 제안했듯이 백그라운드 페이지는 데이터를 XMLHttpRequest로 로컬에서 수신하는 일종의 경량 HTTP 서버에 보낼 수 있습니다.

JavaScript만으로는 완전히 가능할지 모르겠지만 cURL을 사용하여 페이지의 HTML을 가져 오는 확장 전용 PHP 스크립트를 설정할 수 있다면 PHP 스크립트가 페이지를 긁어 낼 수 있고 확장 프로그램이 읽을 수 있습니다. AJAX 요청을 통해 입력합니다.

스크랩되는 실제 페이지는 cURL을 통해 액세스되기 때문에 AJAX 요청인지 알지 못합니다.


에서 시작할 수 있다고 생각합니다 .

따라서 기본적으로 Extension + Plugin 조합을 사용해 볼 수 있습니다. Extension은 DOM (플러그인 포함)에 액세스하고 프로세스를 구동합니다. 그리고 플러그인은 실제 HTTP 요청을 보냅니다.

Firebreath를 크로스 플랫폼 Chrome / Firefox 플러그인 플랫폼으로 사용하는 것이 좋습니다. 특히 다음 예제를 살펴보십시오. Firebreath-Making + HTTP + Requests + with + SimpleStreamsHelper


그냥 iframe 속임수를 쓰실 수 없나요? URL을 전용 프레임에로드하면 문서 객체에 dom이 있고 jquery 선택을 수행 할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/6508393/web-scraping-in-a-google-chrome-extension-javascript-chrome-apis

반응형