scrapy 框架body/formdata的使用

本文介绍了Scrapy框架中FormRequest的formdata和body的使用,两者区别不大,主要在于formdata需传入dict且值不能为int,body需为str类型。文章通过实例讲解了如何在不同情况下选择使用formdata或body,并提供小技巧利用Fiddler Everywhere观察请求差别,帮助解决请求失败的问题。
摘要由CSDN通过智能技术生成

一、前言

二、scrapy框架中FormRequest请求的formdata和body

两者的区别不大,主要是多尝试使用即可,具体如下:

1.formdata

scrapy源码中

class FormRequest(Request):
    valid_form_methods = ['GET', 'POST']

    def __init__(self, *args, **kwargs):
        formdata = kwargs.pop('formdata', None)
        if formdata and kwargs.get('method') is None:
            kwargs['method'] = 'POST'

        super(FormRequest, self).__init__(*args, **kwargs)

        if formdata:
            items = formdata.items() if isinstance(formdata, dict) else formdata
            querystr = _urlencode(items, self.encoding)
            if self.method == 'POST':
                self.headers.setdefault(b'Content-Type', b'application/x-www-form-urlencoded')
                self._set_body(querystr)
            else:
                self._set_url(self.url + ('&' if '?' in self.url else '?') + querystr)
  • 其中有一行,items = formdata.items() if isinstance(formdata, dict) else formdata,要求的formdata为dict
  • 这下我们知道了,使用formdata时要传入一个dict
  • dict的值传入时需要注意: dict的value,不能为int,例如3要转化为"3"
  • for一个橘子
yield scrapy.FormRequest(
                url=f"http://example.com",
                headers=self.fake_headers(jsessionid),
                callback=self.handle_response,
                formdata=self.fake_data({
   
		            "page": "123",
		            "TimeStr": "2000-01-01,2021-01-30",
		            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值