3

我只是在用splash探索scrapy,我正在尝试从电子商务网站的 差距之一中抓取所有带有productid、名称和价格的产品(裤子)数据,但是当我看到时我没有看到加载的所有动态产品数据从splash web UI splash web UI(每个请求只加载16个项目 - 不知道为什么)我尝试了以下选项但没有运气

  • 将等待时间增加到 20 秒
  • 通过使用“ --disable-private-mode ”启动 docker
  • 通过使用 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,
                    }
                )
 

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

4

1 回答 1

3

我将脚本更新到下面

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 有最后一个产品

页面上的最后一张图片

飞溅呈现的 HTML

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

于 2017-09-07T07:29:45.187 回答