pyspider爬虫 POST Request Payload 请求

pyspider 提交参数请求

在爬取某个网站时,发现post数据格式是Request Payload,不同于之前常见的 Form data格式,使用Form data的数据提交方式请求失败。

1.1 Form data数据格式
get请求的时候,参数是直接url中,格式为key1=value1&key2=value2;
post请求的时候,参数是在请求体中,也是以key1=value1&key2=value2的形式在请求体中。

1.2 Request payload数据格式
请求的Content-Type是application/json。
pyspider爬虫 POST Request Payload 请求_第1张图片
1.3 二者区别
· 如果一个请求的Content-Type设置为application/x-www-form-urlencoded,那么这个Post请求会被认为是Http Post表单请求,那么请求主体将以一个标准的键值对和&的querystring形式出现。
· 其他形式的POST请求,是放到 Request payload 中,请求的Content-Type设置为application/json;charset=UTF-8或者不指定。

1.4 爬取某证券网的历史代码

@every(minutes=24 * 60)
    def on_start(self):
        task_seq = self.gen_task_seq()
        self.init_crawler_log(task_seq)
        meta = {'task_seq': task_seq}

        headers = {'Content-Type': 'application/json'}
        for url, info in list(url_info.items()):
            data = {"seDate": ["", ""], "channelCode": ["bondinfoNotice_disc"], "smallCategoryId": info['params'],"pageSize": 30, "pageNum": 1}
            self.crawl(url, callback=self.index_page, method='POST', data=json.dumps(data), headers=headers,
                       save={'meta': meta, 'info': info, 'url': url, "now_page": 1, 'data':data})

你可能感兴趣的:(pyspider)