2016-03-28 6 views
1

セレンのファントムを使って動的なウェブサイトのスクレイピングをscrapyjsに変更しようとしています。しかし、問題は、私たちがスプラッシュでクリックイベントを書くと、それは働くために収穫要求が必要になるということです。 yieldリクエストを与えると、最初のページがレンダリングされます。そのため、クリックイベントのソースコードの変更は表示されません。つまり、Webページを再レンダリングする必要はありません。セレンでも可能です。同じ機能をスプラッシュで利用できますか?yieldイベントなしで、スプラッシュ+ scrapyjs + scrapyからclickイベントの後にhtmlソースコードを取得するにはどうすればよいですか?

答えて

0

lua変数を使用する解決策を得ました。splashメタ引数を使用して変数を渡すことができます。 例:

v = 1 
    yield scrapy.Request(url, meta={'splash': {'endpoint': 'execute','args': {'lua_source': script,'indx':v}},'v':v } , callback=self.parseVariationDetailPage , dont_filter=True) 

私たちは「splash.args.indx」で引数を通過したINDXの値を取得することができます。

以下の関数は、要素のクリックを示します。 ===================以下

script = """ 
function main(splash) 
    splash:autoload("https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js") 
    z = splash.args.indx 
    assert(splash:go(splash.args.url)) 
    assert(splash:wait(1)) 
    assert(splash:runjs("$('#listChipColor li[z]').click()")) 
    assert(splash:wait(1)) 
    return splash:html() 
end """ 

=====================旧答え====

私はscrapyjsクリックイベントでページをレンダリングせずに解決策を見ることができません。

以下はサンプルコードとその動作です。私はjsでlua変数を書くための解決策を得ることができません。ここでは単純なロジックを使用してクリック要素を取得します。

scrapyjsクリック

script = """ 
    function main(splash) 
     splash:autoload("https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js") 
     assert(splash:go(splash.args.url)) 
     assert(splash:runjs("k = window.location.href")) 
     assert(splash:runjs("l = k.length")) 
     assert(splash:wait(1)) 
     assert(splash:runjs("k = k.charAt(l - 1)")) 
     assert(splash:runjs('document.querySelectorAll("ul.colour-swatches-list > li")[k].click();')) 
     assert(splash:wait(1)) 
     return splash:html() 
end """ 

要求

url = url+"vl="+'%s'%v 
yield scrapy.Request(url, self.parseVariationPage,meta={ 
    'splash': { 
     'args': {'lua_source': script},'endpoint': 'execute'}, 
     'url':url,'type':    response.meta['type'],'category':response.meta['category'],'fit':response. meta['fit'],'v':v 
}) 
+0

あなたは、コードのインデントを修正できますか? –

+0

こんにちはPaul、 私はコードの字下げを修正しました。 –

関連する問題