我一直在使用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来识别它们)一次选择一个表的好方法吗?
答案 0 :(得分:0)
以下代码可能有助于废品数据
var observable = Observable.create(observer => {
observer.next(value);
}
.map(value=>{})
.catch(...)
observable.subscribe(value => {
console.log(value);
})