3

Web サイトとその資産を調べて統計とレポートを作成するコードを書きたいと思います。アセットには画像が含まれます。リンクを追跡したり、少なくともページ上のメニューを識別できるようにしたいと考えています。また、クラス名などに基づいて、どの CMS がサイトを作成したかを推測したいと思います。

サイトは適度に静的であるか、CMS によって駆動されているが、RIA のようなものではないと仮定します。

私がどのように進歩するかについてのアイデア。

1) サイトを iFrame に読み込みます。jQueryで解析できるので、これはいいですね。それとも私ができますか?クロスサイト スクリプティングのルールによって妨げられているようです。これらの問題を回避するための提案を見てきましたが、ブラウザーは引き続きそのような問題を取り締まると思います。ブックマークレットは役に立ちますか?

2) Firefox アドオン。これで、クロスサイト スクリプティングの問題を回避できますよね? Firefox (および GreaseMonkey) 用のデバッグ ツールを使用すると、あらゆる種類のことができるため、実行可能に思えます。

3) サーバー側でサイトを取得します。サーバー上のライブラリを使用して解析します。

4) YQL。これは、サイトの解析用に構築されたものではないでしょうか?

4

7 に答える 7

7

私の提案は次のとおりです。

a) スクリプト言語を選択しました。Perl または Python をお勧めします。curl+bash も使用できますが、例外処理がありません。

b) Python または Perl ライブラリを使用して、スクリプトを介してホームページを読み込みます。Perl WWW::Mechanizeモジュールを試してください。

Python には多数の組み込みモジュールがあります。www.feedparser.org も参照してください。

c) (HTTP HEAD コマンドを使用して) サーバー ヘッダーを検査し、アプリケーション サーバー名を見つけます。運が良ければ、CMS 名 (id WordPress など) も見つかります。

d) Google XML API を使用して、「link:sitedomain.com」などのように質問して、サイトを指すリンクを見つけます。ここでも、Google ホームページで Python のコード例を見つけることができます。また、Google にドメイン ランキングを尋ねることも役に立ちます。

e) SQLite db でデータを収集し、Excel で後処理することができます。

于 2009-06-01T13:22:44.363 に答える
3

最初にオプション#4(YQL)を試してみることをお勧めします。これは、必要なすべてのデータを取得できるように見えるため、実際にはサイトに関する情報を取得できないWebサイトなどとしてツールを構築できるためです。ブラウザのページに移動する必要があります。YQLが必要なもので機能する場合は、このオプションで最も柔軟性があるように見えます。

YQLがうまく機能しない場合は、オプション#2(Firefoxアドオン)を使用することをお勧めします。

クロスサイトスクリプティングの問題をすでに認識しているため、オプション#1(Iframe)には近づかないようにする必要があると思います。

また、オプション#3(サーバー側でサイトを取得する)を使用しましたが、過去に遭遇した問題の1つは、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/ajaxwebscraping09072006000229AM/ajaxwebscraping.aspx

また、PHPとCurlライブラリを使用してWebページからすべてのリンクをスクラップすることに関する一般的な記事もあります。ただし、この記事とCurlライブラリがAJAXコンテンツの問題をカバーしているかどうかはわかりません: http ://www.merchantos.com/makebeta/php/scraping-links-with-php/

私がちょうどそれがうまくいくかもしれないと思った1つのことは:

  1. コンテンツを取得し、AJAXを使用して評価します。
  2. コンテンツをサーバーに送信します。
  3. ページ、リンクなどを評価します。
  4. [オプション]コンテンツをローカルページとしてサーバーに保存します。
  5. 統計情報をページに戻します。
  6. [オプション]キャッシュされたローカルバージョンを強調表示して表示します。

^注:ローカルバージョンを保存する場合は、正規表現を使用して、相対リンクパス(特に画像の場合)を正しく変換する必要があります。

幸運を!AJAXの問題に注意してください。現在、多くのサイトがAJAXを使用してコンテンツを動的にロードしています。Digg.comはそうです、MSN.comはそれのニュースフィードなどのためにそうします...

于 2009-06-05T17:39:50.717 に答える
3

Firebugの拡張機能を作成することは、おそらく最も簡単な方法の 1 つになると思います。たとえば、YSlowは Firebug の上に開発されており、探している機能の一部 (画像、CSS、Javascript の概要など) を提供します。

于 2009-05-31T09:10:20.573 に答える
3

ソース (XHTML/HTML) を取得して解析するだけです。これは、ほとんどすべての最新のプログラミング言語で実行できます。インターネットに接続されている自分のコンピューターから。

iframe は HTML コンテンツを表示するためのウィジェットであり、データ分析のためのテクノロジーではありません。データをどこにも表示せずに分析できます。ブラウザも必要ありません。

Python、Java、PHP などの言語のツールは、Javascript や Firefox の拡張機能にあるものよりも強力です。

また、ウェブサイトの背後にあるテクノロジーも問題ではありません。XHTML/HTML は、ブラウザーがどのように表示するかに関係なく、単なる文字列です。「アセット」を見つけるには、「img」、「object」などの特定の HTML タグを探すだけです。

于 2009-05-28T01:27:09.767 に答える
2

それは本当にプロジェクトの規模に依存します。それが完全に自動化されていない、単なるカジュアルなものである場合は、Firefox アドオンを強くお勧めします。

私は同様のプロジェクトの真っ最中です。Javascript を使用して生成されたページの DOM を分析する必要があります。サーバー側のブラウザーを作成するのは難しすぎたので、Adobe AIR、Firefox アドオン、ユーザースクリプトなどの他のテクノロジーに目を向けました。

自動化が必要ない場合は、Fx アドオンが最適です。スクリプトはページを分析し、結果を表示し、不確実な部分を修正するように依頼し、最終的にデータをバックエンドに送信します。すべての DOM にアクセスできるので、JS/CSS/HTML/その他のパーサーを作成する必要はありません (それは大変な仕事です!)。

もう 1 つの方法は、Adobe AIR です。ここでは、アプリケーションをより詳細に制御できます。バックグラウンドでアプリケーションを起動して、操作なしですべての解析と分析を行うことができます。欠点は、ページのすべての DOM にアクセスできないことです。これを通過する唯一の方法は、単純なプロキシを設定して、ターゲット URL を取得し、Javascript を追加することです (信頼できるサンドボックス ブリッジと信頼できないサンドボックス ブリッジを作成するため)... 汚いハックですが、機能します。

編集: Adob​​e AIR では、外国の Web サイトの DOM にアクセスする方法が 2 つあります。

  • Ajax 経由でロードし、HTMLLoader オブジェクトを作成し、応答をフィードします ( loadStringIIRC メソッド)。
  • iframe を作成し、信頼されていないサンドボックスにサイトを読み込みます。

理由は覚えていませんが、最初の方法が失敗したため、別の方法を使用する必要がありました (セキュリティ上の理由があり、回避できなかったと思います)。そして、サイトの DOM にアクセスするために、サンドボックスを作成する必要がありました。ここでは、サンドボックス ブリッジの扱いについて少し説明します。childSandboxBridgeアイデアは、いくつかのメソッドを作成して親 (この場合は AIR アプリケーション) に公開する単純な JS を追加するプロキシを作成することです。スクリプトの内容は次のようなものです。

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

(注意してください — サンドボックス ブリッジを介して渡すことができるものには制限があります — 確かに複雑なオブジェクトはありません! プリミティブ型のみを使用してください)

そのため、プロキシは基本的に、HTML または XHTML を返すすべてのリクエストを改ざんしました。他のすべてはそのまま通過しました。私は Apache + PHP を使用してこれを行いましたが、いくつかのプラグイン/カスタム モジュールを備えた実際のプロキシで確実に行うことができます。このようにして、任意のサイトの DOM にアクセスできました。

編集終了

私が知っている 3 番目の方法は、最も難しい方法です — browsershotsに似た環境をセットアップします。次に、自動化されたFirefoxを使用しています。サーバーに Mac OS X がある場合は、ActionScript を使って自動化を行うことができます。

要約すると、次のようになります。

  • PHP/サーバー側スクリプト — 独自のブラウザー、JS エンジン、CSS パーサーなどを実装する必要があります。代わりに完全に制御され、自動化されています。
  • Firefox アドオン — DOM およびすべてのものにアクセスできます。ユーザーがそれを操作する必要があります (または、少なくともある種の自動再ロードを伴う開いている Firefox セッション)。ユーザーがプロセス全体をガイドするための優れたインターフェイス。
  • Adobe AIR — 動作するデスクトップ コンピューターが必要です。Fx アドオンを作成するよりも困難ですが、より強力です。
  • 自動化されたブラウザ — webdevelopment よりもデスクトップ プログラミングの問題です。グラフィカル環境なしで Linux 端末にセットアップできます。マスターハッキングスキルが必要です。:)
于 2009-06-01T15:19:22.087 に答える
0

最近は主に .Net プログラマーとして、C# などの言語を .Net バインディングと共に使用することをお勧めします。WebBrowserコントロールを使用してページをロードし、( GetElementsByTagName()を介して) ドキュメント内の要素を反復処理して、リンクや画像などを取得します。少し余分な作業 (利用可能な場合は BASE タグを解析する) を行うことで解決できます。 src および href 属性を URL に追加し、HttpWebRequestを使用してターゲット画像の HEAD リクエストを送信し、サイズを決定します。興味がある場合は、これでページのグラフィカルな負荷がどの程度かがわかります。統計に含めることに関心がある可能性のあるその他の項目には、バックリンク / ページランク (Google API 経由) が含まれる可能性があります。HTML または XHTML として検証し、同じドメインとオフサイトの URL にリンクしているリンクの割合、および可能であれば、さまざまな検索文字列に対するページの Google ランキング (ただし、プログラムで利用できるかどうかはわかりません)。

于 2009-06-05T19:21:03.997 に答える
0

ネットワークとテキスト解析/正規表現を強力にサポートする言語で記述されたスクリプト (または選択した言語に応じてコンパイルされたアプリ) を使用します。

  • パール
  • パイソン
  • 選択した .NET 言語
  • ジャワ

あなたが最も慣れている言語なら何でも。基本的なスタンドアロン スクリプト/アプリを使用すると、ブラウザーの統合やセキュリティの問題についてあまり心配する必要がなくなります。

于 2009-06-05T20:57:49.090 に答える