Scrapy 无法通过页面上的两个表格获取正确的数据

Scrapy not getting correct data with two tables on the page

我一直在使用 scrapy 来抓取一些数据,我最近开始抓取的其中一个页面与正常页面相比有两个 table。我想分别抓取 tables 并且确实有 ID。我已经尝试使用各种路径(如下所示),但我最终要么将两个 table 拼凑在一起,要么是一个空白的项目字典,要么是 scrapy 找不到路径。网站在这里:

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

我试过没有 return 的爬虫 response.xpath() 值是:

    //*[@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 return 是一个空的 Scrapy 项目:

    (//table)[1]/tbody

如果我按预期使用 //tbody//tr,我最终会得到一个包含两个 table 的列表。

我的蜘蛛代码:

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

有人可以帮助我了解我的基于 ID 的路径是如何错误的(使用 Firebug 来识别它们)以及一次 select 一个 table 的好方法吗?

以下代码可能有助于废料数据

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