首页 > 解决方案 > 如何使用 python Scrapy 从表单中获取所有输入

问题描述

我需要从表单中获取所有输入

<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 令牌(如果存在)。

我对这个操作的输入是
用户名、密码和 form_name

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)

有人可以根据我的要求帮助我更改上述代码。感谢您的时间和指导

标签: pythonformsxpathscrapy

解决方案


response.xpath('//form//input').extract()

推荐阅读