Форма создана с использованием 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)
В этом случае вам необходимо вручную создать запрос формы для этой веб-страницы. Мне не удалось обнаружить какую-либо форму защиты 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"}