2016-06-19 7 views
2

私はtwillを使用して、ログインフォームで保護されたWebサイトをナビゲートします。私は、次の属性を持つdivを介してアクセス可能なExcelファイルをダウンロードする場合は、この最後のページではPython twill:PHPスクリプトでダウンロード可能なファイル

from twill.commands import * 

go('http://www.example.com/login/index.php') 
fv("login_form", "identifiant", "login") 
fv("login_form", "password", "pass") 
formaction("login_form", "http://www.example.com/login/control.php") 
submit() 
go('http://www.example.com/accueil/index.php') 

twill

onclick="OpenWindowFull('../util/exports/control.php?action=export','export',200,100);" 

私は、PHPスクリプトのURLにアクセスすることが可能ですし、ファイルの内容を表示します。

go('http://www.example.com/util/exports/control.php?action=export') 
show() 

ただし、生の内容に対応する文字列が返されるため、使用できません。 urllib.urlretrieve()に似た方法でExcelファイルを直接取得する方法はありますか?

+0

はhttp://stackoverflow.com/questions/16283799/how-to-read-と同様のように見えますa-csv-file-from-a-url-python – dmitryro

+0

正確ではない:この場合、ウェブサイトへのアクセスはパスワードで保護されています。私はログインフォームを投稿する必要があります。したがって、「綾織り」を使用します。 (私は '要求'を使用する方が好きですが、ログインヘッダの複雑な制御があり、多くの試みの後に 'twill'でしか動作させることができませんでした)。 –

+0

EDIT:私の質問を編集しました:ファイルはCSV形式ではなく、MSV形式なのでバイナリデータです... –

答えて

1

クッキージャーをtwillからrequestsに送信することができました。

注:requestsは、ログイン時の複雑な制御のためにのみ使用できませんでした(正しいヘッダーやその他のオプションを特定できませんでした)。

import requests 
from twill.commands import * 

# showing login form with twill 
go('http://www.example.com/login/index.php') 
showforms() 

# posting login form with twill 
fv("login_form", "identifiant", "login") 
fv("login_form", "password", "pass") 
formaction("login_form", "http://www.example.com/login/control.php") 
submit() 

# getting binary content with requests using twill cookie jar 
cookies = requests.utils.dict_from_cookiejar(get_browser()._session.cookies) 
url = 'http://www.example.com/util/exports/control.php?action=export' 

with open('out.xls', 'wb') as handle: 
    response = requests.get(url, stream=True, cookies=cookies) 

    if not response.ok: 
     raise Exception('Could not get file from ' + url) 

    for block in response.iter_content(1024): 
     handle.write(block) 
関連する問題