scrapy + splash:不渲染整页javascript数据

时间:2017-09-05 15:26:01

标签: python-3.x scrapy scrapy-splash

我正在探索带有飞溅的scrapy,我正试图用电子商务网站之一的productid,名称和价格来收集所有产品(裤子)数据 gap但是当我从splash web UI splash web UI看到时,我没有看到加载的所有动态产品数据(每个请求只加载了16个项目 - 没有任何线索的原因) 我尝试了以下选项,但没有运气

  • 等待时间延长至20秒
  • 使用“ - 禁用私有模式
  • 启动泊坞窗
  • 使用lua_script进行页面滚动
  • 使用查看报告完整选项 splash:set_viewport_full()

lua_script2 = """ function main(splash)
    local num_scrolls = 10
    local scroll_delay = 2.0

    local scroll_to = splash:jsfunc("window.scrollTo")
    local get_body_height = splash:jsfunc(
        "function() {return document.body.scrollHeight;}"
    )
    assert(splash:go(splash.args.url))
    splash:wait(splash.args.wait)

    for _ = 1, num_scrolls do
        scroll_to(0, get_body_height())
        splash:wait(scroll_delay)
    end        
    return splash:html()
end"""                 
                              
            yield SplashRequest(
                url,
                self.parse_product_contents,
                endpoint='execute', 
                args={
                        'lua_source': lua_script2,
                        'wait': 5,
                    }
                )
 

任何人都可以对这种行为有所了解吗? p.s:我正在使用scrapy框架,我能够从render.html解析产品信息(itemid,名称和价格)(但render.html只有16项信息)

1 个答案:

答案 0 :(得分:2)

我将脚本更新到下面

function main(splash)
    local num_scrolls = 10
    local scroll_delay = 2.0
    splash:set_viewport_size(1980, 8020)
    local scroll_to = splash:jsfunc("window.scrollTo")
    local get_body_height = splash:jsfunc(
        "function() {return document.body.scrollHeight;}"
    )
    assert(splash:go(splash.args.url))
--    splash:set_viewport_full()
    splash:wait(10)
    splash:runjs("jQuery('span.icon-x').click();")
    splash:wait(1)
    for _ = 1, num_scrolls do
        scroll_to(0, get_body_height())
        splash:wait(scroll_delay)
    end      

      splash:wait(30)

    return { 
        png = splash:png(),
        html = splash:html(),
        har = splash:har()
       }
end

然后在我的本地版本中运行它,png不能正常工作,但HTML有最后一个产品

Last Image on page

Splash Rendered HTML

唯一的问题是电子邮件订阅弹出窗口在那里它不会滚动,所以我添加了代码来关闭它