问题描述:
碰到了使用
data = {"pageNo":1,"pageSize":100,"tableName":equal,"projectType":"G1","publishTimeStart":"","areaCode":"","title":"","publishTimeEnd":"","mode":""}
response = requests.post(url, json=data)
print(response.text)
json_list = json.loads(response.text)
data = json_list.get('data')
rows = data.get('list')
这种情况,scrapy写post请求的时候 一时未成功取值
问题解决:
在使用 Scrapy 的时候,很多人都知道怎么提交 GET 请求,但却不太清楚怎么提交 POST 请求。如果你在网上搜索,那么,你会看到有两种回答:
第一种回答,会建议你使用scrapy.FormRequest。但这个方法提交的数据是form-data格式,如果网站需要接收 JSON 格式的数据,那么提交就会失败。
yield scrapy.FormRequest(
url,
formdata=data,
callback=self.parse
)
第二种回答,会建议你使用scrapy.Request(url, method=‘POST’, body=json.dumps(xxx))。这种方式确实可以成功提交 JSON 数据,但写起来比较麻烦。
yield scrapy.Request(
url,
method='POST',
body=json.dumps(data),
callback=self.parse
)
但如果你看过 Scrapy 的官方文档(https://doc.scrapy.org/en/latest/topics/request-response.html#jsonrequest),你就会知道,实际上 Scrapy 原本就提供了一个专门用来POST 提交 JSON 数据的方式——JsonRequest。它的位置在scrapy.http.JsonRequest。并且使用起来跟 scrapy.Request一样简单:
ata = {
'name1': 'value1',
'name2': 'value2',
}
yield JsonRequest(
url='http://www.example.com/post/action',
data=data
)
实际实现写法
data = {
"pageNo": i,
"pageSize": 100,
"tableName": equal,
"projectType": "G1",
"publishTimeStart": "",
"areaCode": "",
"title": "",
"publishTimeEnd": "",
"mode": ""
}
yield JsonRequest(
url,
callback=self.parse,
data=data,
meta={
'equal': equal
}
)