-2

私はPythonを使用して、ASPスクリプトによってレンダリングされたランディングページに認証フォームがあるWebサイトをナビゲートしようとしています。

しかし、Python(mechanize、requests、またはurlibsを使用)を使用してそのサイトのHTMLを取得すると、そのようなASPスクリプトが原因で、常に半空白のHTMLファイルになってしまいます。

ASPサイトの最終(ブラウザに表示される)バージョンを取得するために使用できる方法を誰かが知っていますか?

4

1 に答える 1

2

ターゲット ページframeset. 私が知ることができるサーバー側からは何も変わっていません。ヘッダーをまったく送信しなくても、使用requestsまたはダウンロードすると、Chrome や Firefox で表示されるのとまったく同じ HTML が表示されます。urllib埋め込まれた JS がいくつかありますが、何もしません。基本的に、ここにあるのはframesetシングルframeが入った だけです。

ターゲットも完全に通常のframeページであり、サーバー側から何も変わっていないことがわかります。ここでも、ヘッダーなしで取得すると、Chrome や Firefox とまったく同じコンテンツが得られます。ここには埋め込み JS がたくさんありますが、DOM をゼロから構築するなどではありません。サーバーから取得した静的コンテンツには、ページ全体のコンテンツが含まれています。すべての JS を取り除いてレンダリングできますが、見た目はまったく同じです。

サーバーも HTML もどこにも文字セットを指定していないにもかかわらず、内容が ASCII ではないという小さな問題があります。つまり、Unicode として処理したい場合は、デコードする文字セットを推測する必要があります。しかし、Python 2.x を使用していて、ID などで DOM から何かを取得することを計画している場合、それは問題ではありません。

あなたの本当の問題は、HTML がどのように機能するかを知らないことだと思いますframeset。参照されている をダウンロードするのframesetではなく、 をダウンロードしていてframe、結果のページが空の のように見えるのはなぜかと思っていますframeset

フレームは時代遅れの機能であり、古いブラウザでもユーザーが新しいウィンドウをポップアップできるようにするための一般的なトリックと、ポップアップ ブロッカーをだますためのあいまいなトリック以外には誰も使用しなくなりました。HTML 5 では、それらは最終的になくなりました。しかし、古い Web サイトがそこにあり、スクレイピングする必要がある限り、それらがどのように機能するかを知る必要があります。

これは完全なドキュメントに代わるものではありませんが、Web ブラウザーが を使用して行うことの短いバージョンframesetを次に示しframeます。URL をコンテンツとして読み取った結果。もちろん、フレームはレイアウトに影響しますが、おそらく影響はありません。srcframe#documentsrc

一方、Web スクレイピングを学習しようとしている場合は、ブラウザーの "Web 開発者ツール" (ブラウザーによって名前が異なります)、または Firebug のような完全なデバッガーをインストールする必要があります。そうすれば、ブラウザがレンダリングしているライブ ツリーを調べて、スクリプトから取得したもの (または、より単純に から取得したもの) と比較できますwget。したがって、次回は、「Chrome の検査ページでは、 の#document下に がありframe、その下にたくさんのものがありますが、同じページを自分で読もうとすると、 にframeは子がありません」と言うことができます。

于 2012-11-13T00:55:23.647 に答える