FormRequest是Request的扩展类,具体常用的功能如下:
-
请求时,携带参数,如表单数据
-
从Response中获取表单的数据
FormRequest类可以携带参数主要原因是:增加了新的构造函数的参数formdata
。其余的参数与Request类相同.
- formdata参数类型为:dict
class scrapy.http.FormRequest(url[, formdata, ...])
返回一个新FormRequest对象,其中的表单字段值已预先<form>
填充在给定响应中包含的HTML 元素中.
参数:
- response(Responseobject) - 包含将用于预填充表单字段的HTML表单的响应
- formname(string) - 如果给定,将使用name属性设置为此值的形式
- formid(string) - 如果给定,将使用id属性设置为此值的形式
- formxpath(string) - 如果给定,将使用匹配xpath的第一个表单
- formcss(string) - 如果给定,将使用匹配css选择器的第一个形式
- formnumber(integer) - 当响应包含多个表单时要使用的表单的数量。第一个(也是默认)是0
- formdata(dict) - 要在表单数据中覆盖的字段。如果响应元素中已存在字段,则其值将被在此参数中传递的值覆盖
- clickdata(dict) - 查找控件被点击的属性。如果没有提供,表单数据将被提交,模拟第一个可点击元素的点击。除了html属性,控件可以通过其相对于表单中其他提交表输入的基于零的索引,通过nr属性来标识
- dont_click(boolean) - 如果为True,表单数据将在不点击任何元素的情况下提交
请求使用示例
通过HTTP POST发送数据
FormRequest(
url="http://www.example.com/post/action",
formdata={'name': 'John Doe', 'age': '27'},
callback=self.after_post
)
通过FormRequest.from_response()发送数据
FormRequest.from_response(
response,
formdata={'username': 'john', 'password': 'secret'},
callback=self.after_login
)
响应对象
class scrapy.http.Response(url[, status=200, headers=None, body=b'', flags=None, request=None])
一个Response对象表示的HTTP响应,这通常是下载器下载后,并供给到爬虫进行处理
参数:
- url(string) - 此响应的URL
- status(integer) - 响应的HTTP状态。默认为200
- headers(dict) - 这个响应的头。dict值可以是字符串(对于单值标头)或列表(对于多值标头)
- body(bytes) - 响应体。它必须是str,而不是unicode,除非你使用一个编码感知响应子类,如 TextResponse
- flags(list) - 是一个包含属性初始值的 Response.flags列表。如果给定,列表将被浅复制
- request(Requestobject) - 属性的初始值Response.request。这代表Request生成此响应
- text 获取文本
import scrapy
from scrapy.http import FormRequest
class FormSpider(scrapy.Spider):
name = "form" #爬虫名
allowed_domains = ["域名.com"]
# start_urls = ["https://www.域名.com/login/"]
def start_requests(self):
formdata = {
'username': '[email protected]',
'password': '12313215',
'login_type': '1',
}
yield FormRequest("https://www.域名.com/login/",formdata=formdata)
def parse(self, response):
price = response.xpath('//span[@class="price_em2"]/text()').get()
print(price)
标签:对象,formdata,FormRequest,表单,响应,Scrapy,dict,response From: https://www.cnblogs.com/jiangjiayun/p/17503220.html