我正在使用BeautifulSoup为使用Python的what.cd进行屏幕抓取。我在工作时遇到this脚本并决定查看它,因为它似乎与我正在处理的相似。但是,每次运行脚本时,我都会收到一条消息,表明我的凭据是错误的,即使它们不是。
据我所知,我收到此消息是因为当脚本尝试登录what.cd时,what.cd应该返回一个cookie,其中包含允许我稍后在脚本中请求页面的信息。所以脚本失败的地方是:
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
login_data = urllib.urlencode({'username' : username,
'password' : password})
check = opener.open('http://what.cd/login.php', login_data)
soup = BeautifulSoup(check.read())
warning = soup.find('span', 'warning')
if warning:
exit(str(warning)+'\n\nprobably means username or pw is wrong')
我尝试了多种使用该网站进行身份验证的方法,包括使用CookieFileJar,位于here的脚本和Requests模块。我和每个人都收到了相同的HTML消息。简而言之,它说“Javascript被禁用”,“Cookies被禁用”,并且还提供HTML格式的登录框。
我真的不想乱用Mechanize,但目前我还没有看到任何其他方法。如果有人能提供任何帮助,我们将不胜感激。
答案 0 :(得分:1)
经过几个小时的搜索,我找到了解决问题的方法。我仍然不确定为什么这段代码与上面的版本相同,但确实如此。这是我现在使用的代码:
import urllib
import urllib2
import cookielib
cj = cookielib.LWPCookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener)
request = urllib2.Request("http://what.cd/index.php", None)
f = urllib2.urlopen(request)
f.close()
data = urllib.urlencode({"username": "your-login", "password" : "your-password"})
request = urllib2.Request("http://what.cd/login.php", data)
f = urllib2.urlopen(request)
html = f.read()
f.close()
来自linuxquestions.org的carl.waldbieser。感谢所有给予投入的人。