>

Lua 스크립트 실행을 거부하는 문제를 겪었습니다. ScrapyRequest 호출에서 반환 된 응답은 HTML 본문 인 것처럼 보이지만 문서 제목을 기대하고 있습니다. 나는 Lua 스크립트가 응답에 명백한 영향을 미치지 않는 것처럼 보이기 때문에 결코 호출되지 않는다고 가정합니다. 나는 문서를 많이 파고 여기에 무엇이 빠져 있는지 알 수없는 것 같습니다. 누구든지 제안이 있습니까?

from urlparse import urljoin
import scrapy
from scrapy_splash import SplashRequest

GOOGLE_BASE_URL = 'https://www.google.com/'
GOOGLE_QUERY_PARAMETERS = '#q={query}'
GOOGLE_SEARCH_URL = urljoin(GOOGLE_BASE_URL, GOOGLE_QUERY_PARAMETERS)
GOOGLE_SEARCH_QUERY = 'example search query'

LUA_SCRIPT = """
function main(splash)
    assert(splash:go(splash.args.url))
    return splash:evaljs("document.title")
end
"""
SCRAPY_CRAWLER_NAME = 'google_crawler'
SCRAPY_SPLASH_ENDPOINT = 'render.html'
SCRAPY_ARGS = {
    'lua_source': LUA_SCRIPT
}

def get_search_url(query):
    return GOOGLE_SEARCH_URL.format(query=query)

class GoogleCrawler(scrapy.Spider):
    name=SCRAPY_CRAWLER_NAME
    search_url = get_search_url(GOOGLE_SEARCH_QUERY)
    def start_requests(self):
        response = SplashRequest(self.search_url,
            self.parse, endpoint=SPLASH_ENDPOINT, args=SCRAPY_ARGS)
        yield response

    def parse(self, response):
        doc_title = response.body_as_unicode()
        print doc_title

  • 답변 # 1

    Lua 스크립트를 실행하려면 SplashRequest의 'endpoint'인수가 'execute'여야합니다. 이 예에서는 'render.html'입니다.

  • 답변 # 2

    LUA_SCRIPT = """
        function main(splash)
          assert(splash:go(splash.args.url))
          return title = splash:evaljs("document.title")
        end
        """
     def start_requests(self):
       SplashRequest(self.search_url,self.parse, endpoint='execute',args=SCRAPY_ARGS)
    
    

    response.data['title'] 로 값을 복구 할 수 있습니다

관련 자료

  • 이전 java - 기기에 현지화가 표시되지 않습니다
  • 다음 swift - 같은 순서로 배열 데이터를받는 방법