2017-05-17 61 views
1

使用splash:select選擇一個元素之後,您如何選擇所有在它下面作爲子元素的錨元素?如何從已經選擇的元素對象中選擇元素並進行初始化

我已經試過這lua腳本scrapy /防濺:

function main(splash) 
    assert(splash:go(splash.args.url)) 
    assert(splash:wait(0.9)) 

    local classlist = splash:select('.class-list')   
    local alinks = classlist:select_all('a') 

    return {alinks=alinks} 

end 

,但我得到了以下錯誤的請求的Splash錯誤:

{ 
    u'info':{ 
     u'line_number':12, 
     u'message':  u'Lua error:[ 
      string "..." 
     ]:12:attempt to call method \'select_all\' (a nil value)', 
     u'type':u'LUA_ERROR', 
     u'source':u'  [ 
      string "..." 
     ]  ', u'  error':u"attempt to call method 'select_all' (a nil value)" 
    }, 
    u'type':u'ScriptError', 
    u'description':u'Error happened while executing Lua script', 
    u'error':400 
} 

我已經證實,splash:select('.class-list')返回一個有效的元素目的。

回答

1

正如你所說,splash:select('.class-list')返回一個有效的元素對象。你的問題是元素對象don't have a select_all method;只有splash object does。相反,您需要使用splash:select_all和不同的選擇器。嘗試以下(儘管要小心,因爲它未經測試)。

function main(splash) 
    assert(splash:go(splash.args.url)) 
    assert(splash:wait(0.9)) 
    local alinks = splash:select_all('.class-list a')   
    return {alinks=alinks} 
end