从what.cd获取页面

1 投票
1 回答
624 浏览
提问于 2025-04-17 04:02

我正在用Python和BeautifulSoup做一个屏幕抓取工具,目标是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,还有这里的脚本,以及Requests模块。每次我都得到了同样的HTML信息。简而言之,它说“Javascript被禁用了”,“Cookies被禁用了”,并且还提供了一个登录框。

我其实不太想去折腾Mechanize,但目前我看不出其他的解决办法。如果有人能提供帮助,我会非常感激。

1 个回答

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()

这段代码的功劳归于carl.waldbieser,来自于linuxquestions.org。感谢所有提供建议的人。

撰写回答