web-dev-qa-db-ja.com

GoogleでのWebスクレイピングChrome拡張機能(JavaScript + Chrome API)

Google Chrome拡張機能内から現在開いていないタブのWebスクレイピング JavaScriptおよびその他の利用可能な技術を使用して実行するための最良のオプションは何ですか。 他のJavaScriptライブラリも使用できます。

重要なことは、通常のWebリクエストのように動作するようにスクレイピングをマスクすることですX-Requested-With: XMLHttpRequestOriginなど、AJAXまたはXMLHttpRequestの兆候はありません。

スクレイピングされたコンテンツは、拡張機能内でさらに操作および表示するためにJavaScriptからアクセスできる必要があります。ほとんどの場合、文字列として。

WebKit/Chrome固有のAPIには、通常のWeb要求を作成し、操作の結果を取得するために使用できるフックがありますか?

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

ディスク上のローカルファイルからこの作業を行うためのボーナスポイント、初期デバッグ用。しかし、それが唯一のポイントがソリューションの停止である場合は、ボーナスポイントを無視します。

68
Seb Nilsson

XHR2responseType = "document"を使用して、 my (new DOMParser).parseFromString(responseText, getResponseHeader("Content-Type")) patchtext/htmlにフォールバックしようとします。 responseType = "documentサポートを検出する方法の例については、 https://Gist.github.com/1138724 を参照してください(から作成されたオブジェクトURLでresponse === nullを同期的にチェックするtext/html blob)。

Chrome WebRequest API を使用して、X-Requested-Withなどのヘッダーを非表示にします。

12
Eli Grey

Google Chrome=プラグインを超えて何か見ているなら、バックグラウンドでQt-Webkitを使用し、Ajaxリクエストを含むブラウザーのように動作する phantomjs を見てください。画面に出力を表示せず、他の作業を行っている間はバックグラウンドで動作するため、ヘッドレスブラウザーと呼ぶことができます。必要に応じて、フェッチしたページから画像やPDFをエクスポートできます。ブラウザにあるのと同じようにページをロードしたり、ボタンをクリックしたりするためのJSインターフェイスを提供します。また、スクレイピングしたいページにjQueryなどのカスタムJSを挿入し、それを使用してdomにアクセスし、必要なデータをエクスポートすることもできます。 Webkit を使用しているため、レンダリング動作はGoogle Chromeとまったく同じです。

もう1つのオプションは、Aptana Jaxer を使用することです。これは、Mozilla Engineに基づいており、それ自体が非常に優れた概念です。単純なスクレイピングツールとしても使用できます。

10
Anshul

この質問が尋ねられてから、多くのツールがリリースされました。

artoo.js はその1つです。これはJavaScriptコードの一部であり、ブラウザのコンソールで実行され、スクレイピングユーティリティを提供します。 chrome拡張機能としても使用できます。

7
potar

Webスクレイピングは、Chrome拡張機能で複雑になります。いくつかのポイント:

  • DOMにアクセスするためのコンテンツスクリプトを実行します。
  • バックグラウンドページ(ブラウザごとに1つ)は、コンテンツスクリプトに対して messages を送受信できます。つまり、RPCエンドポイントを設定し、バックグラウンドページのコンテキストで指定されたコールバックを応答として起動するコンテンツスクリプトを実行できます。
  • Webページのすべてのフレームでコンテンツスクリプトを実行し、ページに含まれる1..Nフレームで構成されるドキュメントツリーをつなぎ合わせることができます。
  • S.K.としてバックグラウンドページで、データをXMLHttpRequestとしてローカルでリッスンする何らかの種類の軽量HTTPサーバーに送信できます。
6
Novikov

JavaScriptだけで完全に可能かどうかはわかりませんが、cURLを使用してページのHTMLをフェッチする専用のPHPスクリプトを設定できる場合、PHPスクリプトはページをスクレイピングし、拡張機能はAJAXリクエストを介してページを読み込むことができます。

スクレイピングされている実際のページは、AJAXリクエストであることがわかりません。ただし、cURLを介してアクセスされているためです。

5
Steve

これから始めることができると思います

したがって、基本的には、Extension + Pluginの組み合わせを使用してみてください。拡張機能はDOM(プラグインを含む)にアクセスし、プロセスを駆動します。そして、プラグインは実際のHTTPリクエストを送信します。

FirebreathをクロスプラットフォームのChrome/Firefoxプラグインプラットフォームとして使用することをお勧めします。特に、この例をご覧ください: Firebreath-Making + HTTP + Requests + with + SimpleStreamsHelper

4
Dmitry Chichkov

iframeのトリックを実行できませんでしたか? URLを専用フレームにロードすると、ドキュメントオブジェクトにdomがあり、jqueryを選択できますか?

3
tim