2016-12-22 28 views
1

私はScrapyのチュートリアルを行ったので、チュートリアルに含まれているサイトをスクラップする方法を理解できました。しかし、私は(私にとっては)より複雑なサイトのいくつかに少し問題があります。特定のサイトを適切に掻き集めるのに問題がある

私は、このWebページからインサイダー取引の行と列をこすりしようとしています:

http://finviz.com/insidertrading.ashx

私はこすりすることができるよかどうかをテストするためにscrapyでコマンドプロンプトのコマンドを使用しています必要な情報は、次のコマンドは私がコマンドプロンプトに書いたものです。

scrapy shell "http://finviz.com/insidertrading.ashx" 

私はfirefoxのfirebugを使ってページのhtmlコードを見ました。私はこのコードを経由してリストに情報(株名、インサイダーの名前や日付)の一部を取得することができるよ

response.css('td a.tab-link::text').extract() 

はしかし、情報の残りの部分が欠落しています。私はきれいに一緒にすべての情報を取得する方法を見つけ出すことはできません。このコード

response.css(td::text).extract() 

を経由して行方不明の情報(費用、株式、価値など)の

私は(多分ほとんどの)一部を取得することができますよある擦り傷で

ありがとうございました。

EDIT:もう1つのオプションは、一度に1行ずつ反復してデータを収集することです。そのため、私は好きなように分けることができます。私はこれについてもうんざりしている。

答えて

2

データは表形式なので、表の行と列の位置は予測可能で安定しています。行のすべてのテキストを単純に抽出し、変数に展開することができます:

for row in response.xpath("//tr[@class='insider-option-row']"): 
    items = row.xpath('td/a/text() | td/text()').extract() 
    ticker, owner, relationship, date, transaction, cost, shares, value, shares_total, sec_form_4 = items 
関連する問題