Scrapy爬取ajax加载页面且post提交参数是Request Payload的方法

1. 怎么发起请求

scrapy.FormRequest()目前还不支持Payload参数提交方法
可以采用request的post方式:

scrapy.Request(url, headers=headers, body=json.dumps(payload_data), callback=self.parse, method='POST')

json.dumps():将dict格式转化成str格式

2. Response

返回来的一般是json数据格式,或者列表形式,亦或者数据中插入了一些字符,比如:“\”等,需要仔细查看,找出规律解析。

  • 可以使用json.loads()转换(和dumps()方法功能相反) 之后遍历取出需要的数据就可以了。
  • 可以使用ast第三方库下的ast.literal_eval(data_list)转化成list,之后遍历取出数据。

一般数据出现乱码,将编码转换为utf-8就可以了。
记录一下一个小坑,编码格式是utf-8但是中文还是乱码,出现url编码。
解码方式:

from urllib import parse
data = parse.unquote(response.text)

这样中文就可以正常显示了

3. 回调函数的传值

  1. item的传递
    scrapy.Request方法里面加上:meta=({'item': item})参数
    函数的获取:response.meta['item']
  2. 参数传递
    可以使用cb_kwargs传值,参数的值是字典格式。

版权声明:本文为Stranger_top原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。