Scrapy:如何在FormRequest.from_response{}的表单数据属性中发送空值?

6yjfywim  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(123)

我尝试使用FormRequest.From_response()方法发送表单数据。但问题是表单数据中有一些伪值和一些空值。因此,对于空值,我发送了“”或None和“space”,但似乎没有任何效果。

form_dta = {
                    'term_in': '202130',
                    'sel_subj': 'dummy',
                    'sel_subj': 'CS',
                    'SEL_CRSE': '100',
                    'SEL_TITLE': '',
                    'BEGIN_HH': '0',
                    'BEGIN_MI': '0',
                    'BEGIN_AP': 'a',
                    'SEL_DAY': 'dummy',
                    'SEL_PTRM': 'dummy',
                    'END_HH': '0',
                    'END_MI': '0',
                    'END_AP': 'a',
                    'SEL_CAMP': 'dummy',
                    'SEL_SCHD': 'dummy',
                    'SEL_SESS': 'dummy',
                    'SEL_INSTR': 'dummy',
                    'SEL_INSTR': '%',
                    'SEL_ATTR': 'dummy',
                    'SEL_ATTR': '%',
                    'SEL_LEVL': 'dummy',
                    'SEL_LEVL': '%',
                    'SEL_INSM': 'dummy',
                    'sel_dunt_code': '',
                    'sel_dunt_unit': '',
                    'call_value_in': '',
                    'rsts': 'dummy',
                    'crn': 'dummy',
                    'path': '1',
                    'SUB_BTN': 'View+Sections'
        }
        yield scrapy.FormRequest.from_response(
            response,
            formcss='div.pagebodydiv form',
            formdata=form_dta,
            callback=self.course_scrap)

将“"作为建议空值发送到表单请求不起作用。表单实际上只在前端包含1个选择标记,我必须在前端选择课程名称(name=sel_subj)。所有其他表单数据都被隐藏。

xwmevbvl

xwmevbvl1#

我也遇到同样的问题。
一开始,我和你一样尝试了'',失败了,然后我使用了None,但是python告诉我to_bytes必须接收一个str或bytes。
在检查源代码后,我发现默认情况下FormRequest将使用to_bytes()函数对formdata进行编码,然后将头文件“Content-Type”设置为“application/x-www-form-urlencoded”。
你正在寻找的是JsonRequest,它使用json.dumps作为它的编码函数。python中的None将按照你的意愿转换为javascript中的null

from scrapy.http.request.json_request import JsonRequest

请注意,JsonRequest需要参数data,而不是formdata
英语不是我的母语,如果有什么错误,对不起。

相关问题