python - 如何使用 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)
有人可以根据我的要求帮助我更改上述代码。感谢您的时间和指导
解决方案
response.xpath('//form//input').extract()
推荐阅读
- terraform - 为什么我的 AWS ACM 证书无法验证?
- alphanumeric - 从字母数字数据映射和排序
- c - 如何解决这些错误和警告?还有一些来自这个程序的问题
- azureservicebus - 使用 Azure 服务总线主题时从 _error 队列中移动消息
- flutter - imagepicker 不会让我在 android 上运行我的应用程序,在 IOS 上它工作正常
- c# - 平滑的 SDL2 精灵移动
- r - 如何使用 R 在动画图表栏中包含图像?
- java - Java JPanel Graphics - 了解如何绘制简单的形状
- python-3.x - 有没有办法使用 librosa 的波形图来存储图形的坐标而不是显示波形图的图像?
- react-native - 动态设置图像需要路径