2016-11-22 15 views
0

私はScrapy 1.2を使用してオンラインデータベース(http://bddatabase.net/jp/weapon/)をクロールしています。ここで遅延読み込みフォームを処理する方法は?

は私のコードの一目です:

class BdItemSpider(scrapy.Spider): 
    name = "bdspider" 

    start_urls = [ 
     "http://bddatabase.net/jp/weapon/" 
    ] 

    def parse(self, response): 
     item = BdItem() 
     items = response.xpath("//table[@id='WeaponTable']/tbody//tr/td/text()") 
     print(items.extract()) 

そして、ここでは、ログです:

2016-11-22 18:23:14 [scrapy] INFO: Spider opened 
2016-11-22 18:23:14 [scrapy] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 
2016-11-22 18:23:14 [scrapy] DEBUG: Telnet console listening on 127.0.0.1:6023 
2016-11-22 18:23:16 [scrapy] DEBUG: Crawled (200) <GET http://bddatabase.net/jp/weapon/> (referer: None) 
['Loading data from server'] 
2016-11-22 18:23:16 [scrapy] DEBUG: Scraped from <200 http://bddatabase.net/jp/weapon/> 
{} 
2016-11-22 18:23:16 [scrapy] INFO: Closing spider (finished) 

これは、サーバーメッセージからのデータのロードを返しました。 私はそれをリフレッシュした後、1〜1.5秒の間にページをロードします。だから私は静的なものではなく動的なフォームを提供するように見えるので、どのようにしてこのフォームのアイテムを正しく得ることができるのだろうかと思います。

+0

"javascript rendering"と呼ばれるものを検索します。それでもチェックする方法がわからない場合は、[selenium](http://docs.seleniumhq.org/)のようなものを使用してください。 – eLRuLL

答えて

2

私はこの問題を解決するには2つの方法があると思います。

最初のものは、eLRuLLがコメントしたように、実際にJavaScriptレンダリングを行うことです。しかし、セレンは必要以上に複雑かもしれません。 PhantomJSやSplashのようなヘッドレスブラウザを試してみることもできます。これらのヘッドレスブラウザはJavaScriptをレンダリングします。この方法は比較的簡単に実施できますが、スクレーパーの性能に影響を与えます。

2番目のオプションは、実際にはXHR要求のHTTPロケーションをスクラップしています。 FirefoxではFirebug拡張機能を使ってすべてのXHRリクエストをフィルタリングし、正しいリクエストを見つけることができます。一般に、このオプションはパフォーマンスを改善しますが、実装するのがより複雑になる可能性があります。

関連する問題