我尝试使用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)。所有其他表单数据都被隐藏。
1条答案
按热度按时间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
。请注意,JsonRequest需要参数
data
,而不是formdata
。英语不是我的母语,如果有什么错误,对不起。