2017-09-05 2 views
1

私はスプラッシュを使用したスクリーニングを検討していますが、電子商取引サイトgapのいずれかのproductid、名前、価格のすべての製品(パンツ)私はスプラッシュウェブUI splash web UIから見たとき、私は(唯一の16項目は、リクエストごとにかかわらず、ロードされている - 見当もつかない理由)すべての動的製品データがロードされて表示されませんでした 私は、次のオプションを試してみましたが、運スクラップ+スプラッシュ:フルページのJavaScriptデータをレンダリングしない

  • 待ち時間を20秒まで増やす
  • ドッカーを「--disable-pr」で開始するとivateモード
  • ビューレポートフルオプションで
  • スプラッシュスクロールページのlua_scriptを使用することにより:誰でもいくつかの光を当てるてくださいすることができ

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, 
 
        } 
 
       ) 
 

set_viewport_fullを()この行動について? ps:私はscrapyフレームワークを使用しており、render.htmlから商品情報(itemid、name、price)を解析することができます(ただし、render.htmlには16個の情報しかありません)

+0

それを閉じるためのコードを追加したサブスクライブするときにのみ問題がでしたか? "http://www.gap.com/resources/productSearch/v1/search?cid=80799" –

+0

こんにちはタルン、返事をありがとう。しかし、私の目標は、サイトに掲載されている各製品(例えばここではそれぞれのパンツ)にクロールして、すべてのSkusを入手できるようにすることです(例えば、このパンツはビューソース[link] http://www.gap.com/browse/product.do?cid=80868&pcid=80799&vid=1&pid=844309052)私​​はapiを通して見つけられませんでした。私はこのapiアプローチを新しくしました。あなたはいくつかの情報を教えてください。 – Tez

+0

** splash:set_viewport_full()**を使用しようとしましたが、運が悪く、 のようにscrpayで試してみました** splashRequest(url、self.parse_product_contents、args = {'wait':10、 'viewport': 'full' 'render_all':1}、エンドポイント= 'render.html')** まだ運 しかし、私は、ビュー・レポート・サイズ大きな寸法 'スプラッシュ設定すると:私が見たset_viewport_size(1980、8020)' をコンテンロードされましたが、依然として制限があります。'ビューポートが範囲外です(20000x20000、エリア= 16000000)。 – Tez

答えて

1

スクリプトを下記

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

01を持っています

電子メールは、ポップアップはそれがスクロールしないであろうがあり、私はデータを取得するためのAPIを使用して、直接の代わりに、そんなに努力についてどう

+0

thats great!私のローカルスプラッシュで同じスクリプトを実行しようとすると、私は間違ったリクエストエラーを受け取りました。私はそれを働かせるために必要なものはありますか?"ScriptError"、 "エラー":400、 "説明": "Luaのスクリプトを実行中にエラーが起こった"、 "情報":{ "LINE_NUMBER":私 ' { "タイプ" を教えてください"文字列"機能: "文字列"関数メイン(スプラッシュ)\ r ... \ "]" "メッセージ": "Luaエラー:[文字列\"関数\\]]:9:network3 "、 "エラー ":" network3 " } – Tez

+0

私はスプラッシュの最新のドッカー画像を引っ張った、古いものを使用している可能性がありますか? –

+0

私は3日前にドッカー画像を引っ張ってしまった(**ドッカープルスクレイビングハブ/スプラッシュ**)私はそれが最新のものだと信じています。私は** main(スプラッシュ、args)**と同じネットワーク問題を試してみました。ドッカーをもう一度チェックしましょう。万が一あなたが引っ張ってしまった**スクラップハブ/スプラッシュを引く:マスター**? – Tez

関連する問題