使用FormRequest.from_response

时间:2018-12-01 16:13:21

标签: python scrapy

我正在尝试将pdf文件上传到表单ID为文件名的网站(Flask服务器)

id = 1的表单示例,因此我需要将'arquivos / 1.pdf'上传到其中,我试图使用scrapy.FormRequest.from_response,但是当我尝试添加 multipart时/ form-data 作为服务器无法找到或接收文件的Content-Type标头。

<title>Upload 1 new File</title>
    <h1>Upload 1 new File</h1>
    <form id=1 action="" method=post enctype=multipart/form-data>
      <p><input type=file name=file>
        <input type=submit value=Upload>
    </form>

草率代码

filename = '../arquivos/%s.pdf' % 1    

with open(filename, mode='rb') as file:
                yield scrapy.FormRequest.from_response(response, formid=1, formdata={'file': file, }, headers={'Content-Type': 'multipart/form-data'})

烧瓶服务器代码段

if request.method == 'POST':
        print(request.headers)

        print(request.files['file'])
        file = request.files['file']
        if file and allowed_file(file.filename):
            filename = secure_filename(file.filename)
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
            return redirect(url_for('index'))

当我执行Scrapy Spider时,我的服务器日志会给出 server logs

1 个答案:

答案 0 :(得分:1)

该功能为still in PR,根据您的经验,在现有的Scrapy文档中找不到任何对多部分表单数据的引用。

可以对此问题进行投票,但是,假设Scrapy允许发布“原始”请求正文,则您必须手动生成请求:-(