scrapy post提交json内容

文章目录


scrapy 发送post时,如何发送json内容。查看实列就清楚了。

编写测试接口 post_api.py

# -*- coding:utf-8 -*-
# @FileName  :post_api.py
# @Time      :2020/8/7 9:25
# @Author    :pylemon


from flask import Flask, request

app = Flask(__name__)


@app.route('/', methods=['POST'])
def insert():
    r = request
    info = request.data.decode('utf-8')

    return {'success': True, 'msg': info}


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=80)

首先使用 requests 编写测试看看

# -*- coding:utf-8 -*-
# @FileName  :requests_test.py
# @Time      :2020/8/7 9:29
# @Author    :pylemon
import json

import requests

# json 格式
data = {"name": 'pylemon'}
response = requests.post(url='http://127.0.0.1', data=json.dumps(data))
print(response.text)
# 结果: {"msg":"{\"name\": \"pylemon\"}","success":true}
# dict 格式
data = {"name": 'pylemon'}
response = requests.post(url='http://127.0.0.1', data=data)
print(response.text)
# 结果:{"msg":"","success":true}

运行结果 发现 requests post 请求时,data值设置为dict类型 api 接口就无法获取,需要json格式化

那么scrapy 如何post 提交 json 呢

错误示例

import json

import scrapy


class ATSpider(scrapy.Spider):
    name = '_t'
    allowed_domains = []
    start_urls = ['http://127.0.0.1']

    def start_requests(self):
        data = {"ww": 'aaa'}

        yield scrapy.FormRequest(url="http://127.0.0.1", formdata=json.dumps(data))

    def parse(self, response):
        pass

scrapy.FormRequest的 方法不支持json 的格式,必须时dict。

scrapy 错误提示:
ValueError: not enough values to unpack (expected 2, got 1)

但是 改成 yield scrapy.FormRequest(url="http://127.0.0.1", formdata=data) 接口又获取不到,所以只能用scrapy.Request 编写post 的请求

正确示例

import json

import scrapy


class ATSpider(scrapy.Spider):
    name = '_t'
    allowed_domains = []
    start_urls = ['http://127.0.0.1']

    def start_requests(self):
        data = {"name": 'pylemon'}
        request = scrapy.Request('http://127.0.0.1', method='POST',
                          body=json.dumps(data),
                          headers={'Content-Type': 'application/json'})
        yield request

    def parse(self, response):
        pass

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Scrapy提供了多种方式来进行POST请求。其中一种方式是使用scrapy.Request,并将数据以JSON格式进行编码后作为请求体进行提交。这种方式需要手动编码JSON数据,并在请求中指定请求方法为POST。例如,可以使用以下代码进行POST请求: yield scrapy.Request(url, method='POST', body=json.dumps(data), callback=self.parse) \[1\] 另一种方式是使用scrapy.http.JsonRequest,它是Scrapy专门用于提交JSON数据的请求类。使用这种方式,你只需要将数据以字典形式传递给JsonRequest,并指定请求的URL即可。以下是使用JsonRequest进行POST请求的示例代码: yield JsonRequest(url='http://www.example.com/post/action', data=data) \[2\] 还有一种方式是使用scrapy.FormRequest,它用于提交form-data格式的数据。但是如果目标网站需要接收JSON格式的数据,使用这种方式提交可能会失败。以下是使用scrapy.FormRequest进行POST请求的示例代码: yield scrapy.FormRequest(url, formdata=data, callback=self.parse) \[3\] 根据你的需求和目标网站的要求,你可以选择适合的方式来进行POST请求。 #### 引用[.reference_title] - *1* *2* *3* [Scrapy 如何正确发送 POST请求 获取到响应数据的三种写法](https://blog.csdn.net/weixin_44532999/article/details/129263189)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pylemon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值