Scrapy 刮花赢了';不执行lua脚本
我遇到了一个问题,我的Lua脚本拒绝执行。ScrapyRequest调用返回的响应似乎是一个HTML正文,而我期望的是一个文档标题。我假设Lua脚本从未被调用,因为它似乎对响应没有明显的影响。我在文档中翻了很多遍,似乎不太明白这里缺少了什么。有人有什么建议吗Scrapy 刮花赢了';不执行lua脚本,scrapy,scrapy-splash,splash-js-render,Scrapy,Scrapy Splash,Splash Js Render,我遇到了一个问题,我的Lua脚本拒绝执行。ScrapyRequest调用返回的响应似乎是一个HTML正文,而我期望的是一个文档标题。我假设Lua脚本从未被调用,因为它似乎对响应没有明显的影响。我在文档中翻了很多遍,似乎不太明白这里缺少了什么。有人有什么建议吗 from urlparse import urljoin import scrapy from scrapy_splash import SplashRequest GOOGLE_BASE_URL = 'https://www.goo
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
SplashRequest的“endpoint”参数必须为“execute”,才能执行Lua脚本;在本例中是“render.html”
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']
在启动端口的浏览器中尝试LUA脚本时,它是否工作?@rafaelalmeda是的@拉斐拉梅达:这是从例子中提取出来的