python - 从 What.cd 检索页面

标签 python cookies screen-scraping

我正在使用 Python 使用 BeautifulSoup for 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和请求模块。我收到的每条消息都是相同的 HTML 消息。简而言之,它表示“Javascript 已禁用”和“Cookie 已禁用”,并且还提供了一个 HTML 登录框。

我真的不想乱搞 Mechanize,但目前我没有看到任何其他方法可以做到这一点。如果有人可以提供任何帮助,我们将不胜感激。

最佳答案

经过几个小时的搜索,我找到了解决问题的方法。我仍然不确定为什么这段代码的工作方式与上面的版本相反,但它确实如此。这是我现在使用的代码:

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 。感谢所有提供意见的人。

关于python - 从 What.cd 检索页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7716994/

相关文章:

python - 如何在不破坏浏览器后退按钮的情况下正确重定向到另一个站点?

python - pyinstaller Hook 从未被调用

ASP.NET 输出缓存和 Cookie

security - 在 cookie 中存储 API 的用户名和密码?

java - 读取网站的 HTML 代码

python - 如何匹配数据框中列之间的值

PHP-setcookie();不工作

c#httpwebrequest凭证问题

javascript - 监视所有当前和 future 窗口+选项卡的窗口打开、关闭、DOMContentLoaded 事件

python - Jupyter 笔记本 pandas_profiling : cannot import name 'to_html' from 'pandas_profiling.report'