scrapy爬虫:scrapy.FormRequest中formdata参数详解
1. 背景
在网页爬取的时候,有时候会使用scrapy.FormRequest向目标网站提交数据(表单提交)。参照scrapy官方文档的标准写法是:
但是,当表单提交数据myFormData 是形如字典内嵌字典的形式,又该如何写?
2. 案例 — 参数为字典
在做亚马逊网站爬取时,当进入商家店铺,爬取店铺内商品列表时,发现采取的方式是ajax请求,返回的是json数据。
请求信息如下:
响应信息如下:
如上图所示,From Data中的数据包含一个字典:
在amazon中实际使用的构造方法如下:
3. 原理分析
举例来说,目前有如下一笔数据:
从网页上,可以看到请求数据如下:
Field={"pageIdx":99,"size":"10"}&func=nextPage
第一种,按照如下方式发出请求,结果如下(正确):
第二种,按照如下方式发出请求,结果如下(错误,无法获取到正确的数据):
我们跟踪看一下scrapy中的源码:
分析过程如下:
解决方案: 就是将字典当成普通的字符串,然后编码(转换成bytes),进行传输,到达服务器端之后,服务器会反过来进行解码,得到这个字典字符串。然后服务器按照Dict进行解析。
拓展:对于其他特殊类型的数据,都按照这种方式打包成字符串进行传递。
4. 补充1 ——参数类型
formdata的 参数值 必须是unicode , str 或者 bytes object,不能是整数。
案例:
原理部分(源代码):
5. 补充2 ——参数为中文
formdata的 参数值 必须是unicode , str 或者 bytes object,不能是整数。
以1688网站搜索产品为案例:
搜索信息如下(搜索关键词为:动漫周边):
可以看到 动漫周边 ==
栏目分类
- Klaydice中文网
- Zephyr Protocol中文网
你的位置:Klaydice中文网 > Zephyr Protocol中文网 > scrapy爬虫:scrapy.FormRequest中formdata参数详解