私は最近、スクラップを使用してデータをスクラブしていますが、最近スクラップを開始したページの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ベースのパスが間違っていたかのどちらか私が理解するのに役立つことはできますか?
うーん、おそらく私は少しでこれを試してみましょうスクラップのために役立つかもしれません。これに関連するセレクター情報を探しているうちに出てこなかったことを指摘していただきありがとうございます。 – Alexander