我正在从这个网站中提取表格。虽然我匹配了xpath并发现了表的字段,但是我无法从网站中提取任何内容,这就是我的蜘蛛的样子:
# -*- coding: utf-8 -*-
import scrapy
from table.items import TableItem
class Table(scrapy.Spider):
name = "table1"
start_urls = (
'wesite.com',
)
#//div[4]//div[1]//div[1]//table[1]
#
def parse(self, response):
sites = response.xpath('//*[@id="tabs-1"]/table//tr')[1:-2]
print('\n***********************************\n',sites)
for site in sites:
item = TableItem()
item['col1'] = site.xpath('td[1]/text()').extract()
item['col2'] = site.xpath('td[2]/text()').extract()
yield item
print('\n**********\n',item)
我想我的主要问题是这一行:
sites = response.xpath('//*[@id="tabs-1"]/table[1]/tr')
我实际上可以检索内容。但是,它有一个非常大的重复不正确的格式(它格式不正确)。知道如何获得表格吗?。
答案 0 :(得分:1)
有时浏览器在渲染时会添加自己的DOM元素。对于您的指定站点,正确的xpath选择器为response.xpath('//*[@id="tabs-1"]/table//tr')
以查找表行。
已编辑:已添加代码以从表格中获取正确的元素
# -*- coding: utf-8 -*-
import scrapy
from table.items import TableItem
class Table(scrapy.Spider):
name = "table1"
start_urls = (
'http://www.accessdata.fda.gov/scripts/drugshortages/default.cfm#tabs-1',
)
def parse(self, response):
sites = response.xpath('//*[@id="tabs-1"]/table//tr')
for site in sites:
item = TableItem()
item['col1'] = site.xpath('td/a/text()').extract_first()
col2 = site.xpath('td/em/strong/text()')
if col2:
item['col2'] = site.xpath('td/em/strong/text()')[0].extract().strip()
else:
item['col2'] = 'Not Available'
yield item