2017-10-25 86 views
0

私はSplashRequestを以下のコードでエンドポイント= '実行'と使用してポストリクエストを送信しようとしましたが、結果は成功しなかったことを示しています。splashRequestで投稿要求をscrapy_splashに送信する方法

import re 
import sys 
import os 
import scrapy 
from scrapy_splash import SplashRequest 
from crawler.items import CrawlerItem 


class Exp10itSpider(scrapy.Spider): 
    name = "test" 
    lua_script = """ 
    function main(splash, args) 
     assert(splash:go(args.url)) 
     assert(splash:wait(0.5)) 
     return splash:html() 
    end 
    """ 

    def start_requests(self): 
     urls = [ 
      'https://httpbin.org/post^sss=lalala' 
     ] 
     for url in urls: 
      if "^" in url: 
       post_url_list = url.split("^") 
       post_url = post_url_list[0] 
       post_data = post_url_list[1] 
       yield SplashRequest(post_url, self.parse, endpoint='execute', magic_response=True, meta={'handle_httpstatus_all': True}, args={'lua_source': self.lua_script, 'http_method': 'POST', 'body': post_data}) 

    def parse(self, response): 
     input("body is:") 
     print(response.body) 

しかし、私はsuccessullyそれを投稿することができない、リターンコンテンツが私を示し、私はそれはあなたがscrapy_splashにSplashRequestでPOSTリクエストで私を助けてwell.Can投稿しませんか? documentationから

答えて

2

スプラッシュ1.8+は、POSTリクエストを処理するために必要とされます。以前のスプラッシュバージョンではhttp_methodbody引数は無視されます。 /executeエンドポイントで作業していて、POST要求をサポートしたい場合は、Luaスクリプトでhttp_methodbody引数を手動で処理する必要があります。

また、ドキュメントにはPOSTリクエストの例があります。すぐに実行できる最小限の例に適応:

import scrapy 
from scrapy_splash import SplashRequest 

class SplashPostSpider(scrapy.Spider): 
    name = "splash_post" 

    lua_script = """ 
    function main(splash, args) 
     assert(splash:go{ 
     splash.args.url, 
     http_method=splash.args.http_method, 
     body=splash.args.body, 
     }) 
     assert(splash:wait(0.5)) 
     return { 
     html = splash:html(), 
     } 
    end 
    """ 

    def start_requests(self): 
     post_url = 'https://httpbin.org/post' 
     post_data = 'foo=bar' 
     yield SplashRequest(post_url, self.parse, endpoint='execute', 
          magic_response=True, meta={'handle_httpstatus_all': True}, 
          args={'lua_source': self.lua_script, 'http_method': 'POST', 'body': post_data}) 

    def parse(self, response): 
     print(response.body) 
+0

ありがとうございます。 –

関連する問題