Как получить все входные данные из формы, используя python Scrapy - PullRequest
0 голосов
/ 17 апреля 2020

Мне нужно получить все входные данные из формы

<form action="/login" method="post" accept-charset="utf-8">
        <input type="hidden" name="csrf_token" value="SruPnWLxKQsADilCyvGFbRIetmjwBqNgpJVhHZoMfYzkOTdXcaEU">
        <div class="row">
            <div class="form-group col-xs-3">
                <label for="username">Username</label>
                <input type="text" class="form-control" id="username" name="username">
            </div>
        </div>
        <div class="row">
            <div class="form-group col-xs-3">
                <label for="username">Password</label>
                <input type="password" class="form-control" id="password" name="password">
            </div>
        </div>
        <input type="submit" value="Login" class="btn btn-primary">

    </form>

Рассмотрим приведенный выше код, и мне нужно получить только входные элементы из него. Мое выражение для этой операции **response.xpath('//form[child::input]').extract()**. Может кто-нибудь, пожалуйста, помогите мне исправить выражение

Я собираюсь войти на любой сайт, используя запрос python. Для этого я планирую вырезать все входные элементы (включая скрытые входные данные) в форме, где я дам имя формы в качестве параметра XPath. После этого я могу заполнить данные формы своими учетными данными, а также передать маркер csrf, если он есть.

Мой ввод для этой операции
имя пользователя, пароль и имя_файла

from scrapy.http import FormRequest
from scrapy.utils.response import open_in_browser


class QuotesSpider(Spider):
    name = 'quotes'
    start_urls = ('http://quotes.toscrape.com/login',)

    def parse(self, response):
        token = response.xpath('//*[@name="csrf_token"]/@value').extract_first()
        return FormRequest.from_response(response,
                                         formdata={'csrf_token': token,
                                                   'password': 'foobar',
                                                   'username': 'foobar'},
                                         callback=self.scrape_pages)

    def scrape_pages(self, response):
        open_in_browser(response)

Могут ли некоторые помочь мне изменить приведенный выше код в соответствии с моими требованиями. Ваше время и руководство ценится

1 Ответ

1 голос
/ 17 апреля 2020
response.xpath('//form//input').extract()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...