你能告诉我为什么这个网络抓取工具无法正确登录吗?

Can you tell me why this web scraper isn't able to log in correctly?

我正在尝试制作一个网络抓取工具,以从我拥有帐户的网站 Colloquy.com 获取一些信息。不过,我无法让我的抓取工具登录到该站点。我将 Python 2.7 与 BeautifulSoup 和 Requests.

一起使用

Here is a screenshot of my code

and here is a screenshot of the relevant HTML for the login

我尝试了此代码的多种变体,包括将授权密钥添加到登录信息中。但是,无论我尝试了什么,当我得到 HTML.

时,我总是得到网站的 "un-logged-in version"

我怀疑这与网站使用 Javascript 登录(它使用弹出框而不是单独的登录页面)有关。但是,我对 Javascript 的了解还不足以正确处理这个问题,而且我还没有找到任何类型的指南来阐明这个特定问题。

所以希望有人能告诉我我的 code/process 出了什么问题,或者我在哪里可以找到如何使用 Javascript 处理登录。

谢谢! :)

他们没有尝试抓取 javascript 所在的登录页面,而是 post https://colloquy.com/app/account/login 的信息,因此您可以执行以下操作来尝试登录。

import requests
resp = requests.post("https://colloquy.com/app/account/login", data={"email":"some.email@address.com","password":"Password"})

然后您可以使用 resp.cookies 抓取您想要访问的页面。

cookies = resp.cookies
r = requests.get("https://colloquy.com/some-page", cookies=cookies)
# Get html etc

编辑: 通常在 login 页面的情况下,幕后会有一个 post 操作,该操作将发送所需的信息以进行登录。通常是 usernamepassword 等。这通常可以在 Chrome 上使用 Developer Tools 或使用 Developer Tools or Firebug 的 Firefox 找到。为了获得 post 信息,我调出工具,然后完成登录提示。在“网络”选项卡中(Chrome--Firefox/Firebug 可能会有所不同)在您完成登录 prompt/page 并提交后,它通常会显示对某个页面(通常是登录或类似内容)的请求你的资料。单击此操作将允许您查看此请求的一些信息,包括 Request UrlRequest Method。还会有一个区域显示 Form Data post 到 Request Url。然后,您应该能够使用此信息制作类似于 POSTRequest UrlForm Data.

注意:在某些情况下,Web 开发人员可能会尝试阻止某些 User-agents 以阻止自动脚本 and/or 机器人,但您通常只需将 user-agent 更改为普通代理即可绕过此限制。

requests.post(url, headers={"user-agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"})