2011-08-16 11 views
1

私はウェブサイトからいくつかのファイルをつかむ小さなスクリプトに取り組んでいます。まず、ウェブサイト内の潜在的なURLのリストを作成します。これはPython 3.1ではうまくいきましたが、Python 3.2ではうまく動作しませんでした。私はそれがエンコーディングに関する質問だと思いますが、私はエレガントな方法でそれを実現する方法がわかりません。手伝って頂けますか?Python 3 [12] urllib

def get_urls(username, password, userid): 
    cj = http.cookiejar.CookieJar() 
    opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj)) 
    login_data = urllib.parse.urlencode({'login' : username, 'password' : password}) 
    opener.open(BASE_URL+"/bg/login", login_data) 
    url = BASE_URL + "/bg/user/" + userid + "?finished=1" 
    resp = opener.open(url) 
    result = resp.read() 
    txt = result.decode("iso-8859-1") 
    liste = (re.findall("/bg/export/[\d]{4,8}",txt)) 
    return liste 
+0

Python 3.2ではどうなりますか?特定のページの予想される出力対受信出力の関係何が起きているのかを見るために 'print'文を行ごとに追加すればどこが間違っていますか? – agf

+0

エラーメッセージ:TypeError:POSTデータは、バイトまたはバイトの反復可能でなければなりません。それはstrすることはできません。だから私はバイトコードにすべてをエンコードする必要がありますが、これを行うための最もエレガントな方法は何ですか? – hack23

+1

エラーはどの行ですか?あなたの質問に__full tr​​aceback__を編集してください。また、あなたの質問に署名しないでください - それを削除してください。 – agf

答えて

0

問題はここにする必要があります:反復可能な

login_data = urllib.parse.urlencode({'login' : username, 'password' : password}) opener.open(BASE_URL+"/bg/login", login_data)

urllib.parse.urlencode出力文字列ではありません。

+0

はい、問題を解決しました: でlogin_data変数をエンコードするlogin_data = login_data.encode( "utf-8")は今のところうまく動作します。どうも! – hack23

関連する問題