我的目标是从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的新手,所以任何建议都会受到赞赏。
答案 0 :(得分:1)
原因是登录表单是通过javascript创建的。由于单击事件将登录表单添加到DOM,因此在执行请求时它不存在。所有请求都是从页面获取现有内容。如果URL确实发生变化以反映状态(显示登录表单),那么您可以使用它,但它不会。但
你需要做的是使用无头浏览器(无头模式下的chrome或firefox)与像Selenium这样的库结合使用。您可以在无头浏览器中加载站点,并使用Selenium编写代码进行交互。但是,实施起来更具挑战性。
答案 1 :(得分:1)
您可能需要在s.post
中添加标头对于此错误here,有解决方案。它为我工作。希望这会有所帮助。