2017-12-18 10 views
1

ユーザー名とパスワードが必要なドメインの背後にあるpdfファイルを取得しようとしています。私はMechanicalSoupにログイン資格情報を入力することができますが、pdfファイルにナビゲートすると、MechanicalSoups launch_browser()でpdfを表示できますが、pdfをダウンロードできません。 (認証を必要としませんでしたサイトのためのpython 2にBeautifulSoupを使用して)過去に私はそうのようurllib2のURLを渡します。問題WebサイトでurllibでPDFをダウンロードするには認証が必要です

page = urllib2.urlopen(download_url) 
file = open(fileName, 'w') 
file.write(page.read()) 
file.close() 

を、私は私が私ことがわかっurllib.requestsと同様に行うとログイン資格情報をもう一度入力する必要があります。

loginUrl = "http://..." 
urlToPDF = "http://..." 
passman = urllib.request.HTTPPasswordMgrWithDefaultRealm() 
passman.add_password(None, loginUrl, "username", "password") 

authhandler = urllib.request.HTTPBasicAuthHandler(passman) 
opener = urllib.request.build_opener(authhandler) 

urllib.request.install_opener(opener) 

page = urllib.request.urlopen(urlToPDF) 
file = open("test.pdf", "wb") 
file.write(page.read()) 
file.close() 

しかし、これは動作するようには思えません。だから私は(以下の指示をhere)試してみました。ファイル名を "test"( ".pdf"を削除)に変更してクロムで開くと、ログインページにリダイレクトされるボタンをクリックする必要があるというWebページがファイルに書き込まれたように見えます。したがって、私は上記のコードでloginUrlとurlToPDFの両方を使用しようとしました。

私がこれまで読んだフォーラムは、上記がうまくいくと言えるでしょう。あるいは、MechanicalSoupを使ってpdfを見ることができると考えると、MechanicalSoupでpdfを直接ダウンロードする方法はありますか?

+0

あなたの特定のケースについてはわかりませんが、多くのWebサイトでは参照元フィールドを調べて、実際にダウンロードページから来ているかどうかを確認し、それ以外の場合はHTMLページを表示します。そのような場合は、MechanicalSoupが動作するはずです。 –

答えて

0

MechanicalSoupを使用してPDFをダウンロードできます。

StatefulBrowser.openStatefulBrowser.follow_link含む)StatefulBrowser方法の多くの戻り値は、requests.Responseオブジェクトです。要求が成功すると、必要なデータはResponse.content属性に格納されます。したがって、ファイルをダウンロードするには、この属性をファイルに書き込む必要があります。ここで

は一例です。将来的には

import mechanicalsoup 

browser = mechanicalsoup.StatefulBrowser() 
response = browser.open("http://example.com/example.pdf") 

with open('your_filename_here.pdf', 'wb') as f: 
    f.write(response.content) 

、私はMechanicalSoupがStatefulBrowser.download法(またはそれらの線に沿って何か)として、より直接的にこれを実装することを期待しています。この機能の開発に従うには、MechanicalSupp GitHubページのthis issueを参照してください。

+0

それは働いて、ありがとう:)私は今持っている1つの問題は、ファイルを書いたファイルを読んで明らかにresponse.contentが<!DOCTYPE html>として格納されているので、htmlをpdfに変換する必要があります – user314159265

関連する問題