Scrapy没有通过页面上的两个表获得正确的数据

时间:2016-10-21 02:20:38

标签: python xpath scrapy scrapy-spider

我一直在使用scrapy来抓取一些数据,而我最近开始刮的其中一个页面与正常表格相比有两个表格。我想分开刮表,并且确实有ID。我尝试过使用各种路径(如下所示),我最终将两个表格拼凑在一起,一个空白的项目字典,或scrapy没有找到路径。该网站在这里:

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

我尝试过但没有返回值的抓取工具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

返回空Scrapy项的Xpath:

    (//table)[1]/tbody

如果我按预期使用//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

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

1 个答案:

答案 0 :(得分:0)

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

var observable = Observable.create(observer => {
  observer.next(value);
}
.map(value=>{})
.catch(...)
observable.subscribe(value => {
  console.log(value);
})