首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确保scrapy-splash成功渲染了整个页面?

如何确保scrapy-splash成功渲染了整个页面?
EN

Stack Overflow用户
提问于 2017-03-28 02:03:04
回答 1查看 1.8K关注 0票数 3

当我爬行整个网站时发生的问题,使用splash来渲染整个目标Page.Some页面没有随机成功,所以我是假的,以获取信息,支持存在时,渲染作业有Done.That意味着我只是从渲染结果的一部分信息,虽然我可以从其他渲染结果获得全部信息。

以下是我的代码:

代码语言:javascript
复制
yield SplashRequest(url,self.splash_parse,args = {"wait": 3,},endpoint="render.html")

settings:
SPLASH_URL = 'XXX'  
DOWNLOADER_MIDDLEWARES = {
'scrapy_splash.SplashCookiesMiddleware': 723,
'scrapy_splash.SplashMiddleware': 725,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}

# Enable SplashDeduplicateArgsMiddleware:
SPIDER_MIDDLEWARES = {
'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}

# Set a custom DUPEFILTER_CLASS:
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter

# a custom cache storage backend:
HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'
EN

回答 1

Stack Overflow用户

发布于 2017-05-12 14:37:49

我之所以这么晚才回复,是因为这个问题没有答案,而且它在谷歌搜索中是可见的。

我也遇到过类似的问题,我找到的唯一解决方案(除了增加wait参数,它可能会工作,也可能不会工作,但不可靠)是使用execute端点和自定义lua脚本来等待元素。如果这听起来不必要地复杂,在我看来,Scrapy和Splash的设计不是很好,但我还没有找到更适合我需求的东西。

我的Lua脚本看起来像这样:

代码语言:javascript
复制
lua_base = '''
function main(splash)
  splash:init_cookies(splash.args.cookies)
  splash:go(splash.args.url)

  while not splash:select("{}") do
    splash:wait(0.1)
  end
  splash:wait(0.1)
  return {{
  cookies = splash:get_cookies(),
  html=splash:html()
  }}
end
'''
css = 'table > tr > td.mydata'
lua_script = lua_base.format(css)

我会生成这样的请求:

代码语言:javascript
复制
        yield SplashRequest(link, self.parse, endpoint='execute',
                            args={
                                    'wait': 0.1,
                                    'images': 0,
                                    'lua_source': lua_script,
                                })

它非常丑陋,但它是有效的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43053458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档