2016-10-21 6 views
0

私は最近、スクラップを使用してデータをスクラブしていますが、最近スクラップを開始したページの1つに2つのテーブルがあります。私はテーブルを別々に掻き分けたいと思っています。私は様々なパス(以下に示す)を使用してみました。そして、両方のテーブルを擦り合わせるか、空のアイテム辞書か、パスを見つけることができないかのいずれかになります。サイトはこちら:ページ上の2つのテーブルで適切なデータが得られない

http://www.faa.gov/data_research/commercial_space_data/licenses/

ノーリターン値で試してみましたクローラresponse.xpath()は以下のとおりです。

(//table)[1]/tbody 

そして、私の場合:空のScrapyアイテムを返し

//*[@id="DataTables_Table_0"] 
    //*[@id="DataTables_Table_1"] 
    /html/body/div[2]/div/div[2]/div[1]/table 
    /html/body/div[2]/div/div[2]/div[2]/table 

のXpath //tbody//trを期待どおりに使用すると、両方のテーブルを含むリストになります。

マイクモコード:

from scrapy.spiders import Spider 
import items as spi  

class ActiveLaunchLicenseSpider(Spider): 
    name = "faa_actlnchlic" 
    allowed_domains = ['faa.gov'] 
    start_urls = ['http://www.faa.gov/data_research/commercial_space_data/licenses/'] 

    def parse(self, response): 
     licenses = response.xpath('//tbody') 
     for license in licenses: 
      license_item = spi.ActiveLaunchLicenseScraperItem() 
      license_item['license'] = license.xpath('//tr/td[1]/a').extract() 
      license_item['company'] = license.xpath('//tr/td[2]').extract() 
      license_item['vehicle'] = license.xpath('//tr/td[3]').extract() 
      license_item['location'] = license.xpath('//tr/td[4]').extract() 
      license_item['expiration'] = license.xpath('//tr/td[5]/span').extract() 
      yield license_item 

誰かは、一度に1つのテーブルを選択するための良い方法で(それらを識別するためにFirebugのを使用)私のIDベースのパスが間違っていたかのどちらか私が理解するのに役立つことはできますか?

+0

うーん、おそらく私は少しでこれを試してみましょうスクラップのために役立つかもしれません。これに関連するセレクター情報を探しているうちに出てこなかったことを指摘していただきありがとうございます。 – Alexander

答えて

0

次のコードは、データ

import scrapy 
from faa_gov.items import FaaGovItem 
class faa_gov(scrapy.Spider): 
    name = "faa_actlnchlic" 
    allowed_domains = ['faa.gov'] 
    start_urls = ['http://www.faa.gov/data_research/commercial_space_data/licenses/'] 

    def parse(self, response): 
     licenses = response.xpath("//caption[text()='Active Launch Licenses']/following-sibling::tbody[1]/tr") 
     for license in licenses: 
      license_item = FaaGovItem() 
      license_item['license'] = license.xpath('.//td[1]/a').extract() 
      license_item['company'] = license.xpath('.//td[2]').extract() 
      license_item['vehicle'] = license.xpath('.//td[3]').extract() 
      license_item['location'] = license.xpath('.//td[4]').extract() 
      license_item['expiration'] = license.xpath('.//td[5]/span').extract() 
      yield license_item 
+0

私はこのコードを少し変更しました。これはコードでパイプラインの行にしか保存されていません。私はパスを 'licenses = response.xpath(" caption [text()= "アクティブ起動ライセンス]/following-sibling :: tbody [1]") 'に変更し、セレクタをtrレベル'license_item ['license'] = license.xpath( '.// tr/td [1]/a')。extract()'はテーブルのすべての行を与えてくれました。 – Alexander

関連する問題