2017-10-25 8 views
0

SplashRequest를 사용하여 아래 코드와 함께 'execute'를 실행하여 게시 요청을 보내려고했지만 그 결과로 성공하지 못한 것으로 나타납니다.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으로 게시 요청에 도와 well.Can 게시하지 않습니다 보여줍니다? documentation에서

답변

2

:

스플래쉬는 1.8 이상 POST 요청을 처리하는 데 필요합니다; 이전의 Splash 버전에서는 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

고마워요. 잘 작동합니다. –