scrapy post请求问题

某网站的表单信息有一个值为 (unable to decode value)
headers中Content-Type: application/x-www-form-urlencoded
我以为是需要编码一下

from urllib.parse import urlencode

data = {
     'name':'查询'}
# 使用scrapy自带的post请求方法,将字典直接传入formdata,如果不设置headers Content-type默认的为'application/x-www-form-urlencoded
yield scrapy.FormRequest(url=url,
                     formdata=data,
                     callback=self.project_item,
                     cookies={
     'ASP.NET_SessionId':sid}
                     )
                     
# 使用普通request方法, 需要将数据的字典进行url编码,传入body
yield scrapy.Request(url=url,
                     method='POST',
                     body=urlencode(data),
                     headers={
     'Content-Type': 'application/x-www-form-urlencoded'},
                     callback=self.project_item,
                     cookies={
     'ASP.NET_SessionId':sid}
                     )

以上两种方式都可
如果headers = {‘Content-Type’: “application/json”}
那么body=json.dumps(data)
scrapy.Request才需提交body

这种方法请求出来的内容不正确.
后来查询发现是因为gbk编码, 改为如下

yield scrapy.FormRequest(url=url,
                     formdata={
     'name':'查询'.encode("GBK")},
                     callback=self.project_item,
                     cookies={
     'ASP.NET_SessionId':sid}
                     )

成功.撒花.结束

你可能感兴趣的:(scrapy)