表单是使用 Javascript 创建的,它不是静态 HTML 源代码的一部分。 Scrapy 不解析 Javascript,因此无法找到。
静态 HTML 的相关部分(他们使用 Javascript 注入表单的地方)是:
<div ng-controller="AppCtrl as appC" class="m-auto pt-3 pb-5 container" style="max-width: 425px;">
<section ui-view></section>
</div>
要找到这样的问题,我会:
- 比较“查看源代码”和“检查”中的源代码
- 用不带 Javascript 的浏览器浏览网页(当我开发爬虫时,我通常有一个带 Javascript 的浏览器用于研究和文档,另一个用于检查没有 Javascript 的网页)
在这种情况下,您必须为此网页手动创建 FormRequest。我无法在他们的表单上发现任何形式的 CSRF 保护,所以它可能很简单:
FormRequest(url='https://www.athletic.net/account/auth.ashx',
formdata={"e": "foo@example.com", "pw": "secret"})
但是,我认为您不能使用formdata,而是他们希望您发送 JSON。不确定FormRequest 是否可以处理这个问题,我猜你只是想使用标准的Request。
由于他们在前端大量使用 Javascript,因此您也无法使用页面的源代码来查找这些参数。相反,我使用浏览器的开发者控制台并检查了当我尝试使用无效凭据登录时发生的请求/响应。
这给了我:
General:
Request URL: https://www.athletic.net/account/auth.ashx
[...]
Request Payload:
{e: "foo@example.com", pw: "secret"}