2011-08-16 60 views
1

我正在从一个网站上抓取一些文件的小脚本。首先,我在网站中创建一个潜在的网址列表。这与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