使用requests.post登录会导致“错误405不允许”

时间:2018-06-10 23:39:38

标签: python python-requests http-post http-status-code-405

我的目标是从consumerreports.com抓取数据,因此我正在为此项目使用“请求”和“beautifulsoup”。除了Web浏览,我在通过请求成功登录consumerreports.com时遇到了很多麻烦。

这是我的代码:我创建了两个文本文件,其中我写了帖子和响应,所以我可以检查它是否成功登录。

response = requests.get(login_url, headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'})

这就是我得到的:

{{1}}

另外,我检查了'response text file.txt'的内容,并且能够通过基本的ctrl + f函数确定系统没有成功登录。

似乎Web服务器不接受'post'方法,至少对于这个特定的url,这就是它返回错误的原因。但是,我不知道如何从这里开始。我在线查看,有人建议使用

{{1}}

创建用户代理以“登录”或其他任何内容。我仍然是python的新手,所以任何建议都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

原因是登录表单是通过javascript创建的。由于单击事件将登录表单添加到DOM,因此在执行请求时它不存在。所有请求都是从页面获取现有内容。如果URL确实发生变化以反映状态(显示登录表单),那么您可以使用它,但它不会。但

你需要做的是使用无头浏览器(无头模式下的chrome或firefox)与像Selenium这样的库结合使用。您可以在无头浏览器中加载站点,并使用Selenium编写代码进行交互。但是,实施起来更具挑战性。

答案 1 :(得分:1)

您可能需要在s.post中添加标头对于此错误here,有解决方案。它为我工作。希望这会有所帮助。