使用扭曲的网页登录网页



我想使用twisted编写一个简单的web客户端,该客户端使用用户名和密码登录到网站,并从给定页面获取一些数据。最好的方法是什么?

编辑:添加更多详细信息:这是一个简单的用户名/密码HTML表单提交。有一个PHPSSID cookie涉及到这是一个PHP网站。没有captchas。没有HTTP身份验证。

HTML表单身份验证是通过提交身份验证表单来完成的。这意味着了解表单的操作和方法。对于初学者,您可以手动读取页面源代码并找到这些信息。更通用的解决方案包括解析页面(可能使用lxml或html5lib)并自动提取这些信息。

您还需要知道表单中用户名和密码字段的名称,以及任何其他必填表单字段的名称和正确值。

例如,一个看起来像这样的表单:

<form action="https://example.com/auth" method="post">
<input type="text" name="Email" id="Email" value="">
<input type="password" name="Password" id="Password" value="">
</form>

具有CCD_ 1的形式作用和CCD_。因此,您需要向https://example.com/auth发出POST请求。

按照惯例,这种请求中的数据编码使用application/x-www-form-urlencoded作为其内容类型。

您可以使用Python stdliburllib.urlencode对此类请求的正文进行编码。

最后,如果身份验证成功表示为一个cookie,该cookie必须在未来的请求中重新呈现,那么您需要确保捕获cookie的值并重新发送它

所以,把这些放在一起:

from twisted.web.client import getPage
cookies = {}
d = getPage(
"https://example.com/auth",
method="POST",
headers={"content-type": "application/x-www-form-urlencoded"},
postdata=urllib.urlencode(dict(Email="alice@example.com", Password="secret")),
cookies=cookies)

cookie字典将填充服务器设置的任何cookie的值。将它与将来要使用此身份验证结果的任何getPage调用一起传递。

尽管如此,我还是喜欢使用scrapy的建议。它会为你做很多低级的事情,让你专注于问题中更有趣的部分。

最新更新