Pythonを使用して、いくつかのPDFをサイト(http://bibliotecadigitalhispanica.bne.es)に自動的にダウンロードしようとしています。PythonとのリンクのhrefでJavaScriptを実行
私はurllib/urllib2/mechanizeモジュール(これは他のサイトに使用しています:これにはurlopen、urlretrieveなどの標準機能が含まれています)を使用しようとしましたが、リンクにはJavaScriptが埋め込まれていますいくつかの処理を行い、少なくとも私がここで読んだことから、これらのモジュールは扱えないように見えるPDFを開きます。例えば、私が行うときは、次の
request = mechanize.Request('the example url below')
response = mechanize.urlopen(request)
それだけ含むHTMLページを取り戻す - 私はちょうど(そのページ内のそれへのリンクはどちらか、存在しない)PDFを抽出するために見えることはできません。
実際のブラウザ(FirefoxのLiveHTTPHeaders拡張機能を使用)でヘッダーを調べると、多くのHTTP要求が行われ、最終的にPDFが返され(ブラウザーに表示される)ことがわかりました。これを傍受してダウンロードできるようにしたいと思います。具体的には、一連の302と304の回答が得られ、最終的にPDFにつながります。
ここでは、私がクロールしているリンク属性の例を示します。 href = 'javascript:open_window_delivery( "http://bibliotecadigitalhispanica.bne.es:80/verylonglinktoaccess");'
href属性に埋め込まれたこのJavaScriptを実行すると、最終的にPDFドキュメント自体にアクセスできるようです。私はセレンを試してみましたが、それは分かりにくいです - ドキュメントを読む際にどのように使用するのかよく分かりません。誰かが私がこれをやることができる方法を(私が試していないモジュールを通して、または私が持っているモジュールを通して)提案することができますか?
ありがとうございました。
PS:あなたは私が複製しようとしているかを確認したい場合には、私は:)次のページ(PDFアイコンを持つもの)の上に、上記のPDFのリンクにアクセスしようとしています: http://bibliotecadigitalhispanica.bne.es/R/9424CFL1MDQGLGBB98QSV1HFAD2APYDME4GQKCBSLXFX154L4G-01075?func=collections-result&collection_id=1356
正規表現を使用してURIを抽出できますか? – max
私はこれをやってみましたが、JavaScript関数呼び出しの中からURIを引き出し、mechanizeとurllib2を使ってアクセスしようとしましたが、今まで運がなかったので、含まれているHTMLページを返します: - /ヘッダー、いくつかのリダイレクトを含む多くの要求がこのURIで行われたようです。これらすべての対応をとる方法はありますか?おそらくこれも問題を解決するかもしれない。ところで、ありがとうございました。 – spanport
更新:この特定のサイトで、PDFファイルに最も近いURLの構造を見つけてからリダイレクトする方法を見つけました。乾杯! – spanport