我想搜索此页面的表格,但报废的数据只在一列中,在某些情况下数据不会出现。我也使用shell来查看Xpath是否正确(我使用Xpath助手来识别这些xpath)
R.id.etPassword
答案 0 :(得分:0)
从给出的示例网址中,对于包含更多记录的页面,值应该是什么以及提取应该如何推广应该是不明确的。所以我尝试了一个包含多个记录的不同页面,让我们看看结果是否能满足您的需求。这里已准备好运行代码:
# -*- coding: utf-8 -*-
import scrapy
class PhenolExplorerSpider(scrapy.Spider):
name = 'phenol-explorer'
start_urls = ['http://phenol-explorer.eu/contents/food/29?utf8=/']
def parse(self, response):
chromatography = response.xpath('//div[@id="chromatography"]')
title = chromatography.xpath('.//tr/th[@class="outer"]/strong/a/text()').extract_first()
for row in chromatography.xpath('.//tr[not(@class="header")]'):
class_ = row.xpath('./td[@rowspan]/text()').extract_first()
if not class_:
class_ = row.xpath('./preceding-sibling::tr[td[@rowspan]][1]/td[@rowspan]/text()').extract_first()
subclass = row.xpath('./td[not(@rowspan)][1]/a/text()').extract_first()
#content = row.xpath('./td[not(@rowspan)][2]/a[2]/text()').extract_first()
content = row.xpath('./td[not(@rowspan)][2]/text()').extract_first()
yield {
'title': title.strip(),
'class': class_.strip(),
'subclass': subclass.strip(),
'content': content.strip(),
}
基本上,它迭代表的各个行并从相应的字段中提取数据,一旦收集完整的信息就会产生一个项目。
答案 1 :(得分:0)
试试这个:
for row in response.css('#chromatography table tr:not(.header)'):
yield {'titulo': row.xpath('./preceding-sibling::tr/th[contains(@class, "outer")]//a/text()').extract_first().strip(),
'clase': row.xpath('./preceding-sibling::tr/th[contains(@class, "inner")]//text()').extract_first().strip(),
'subclase': row.xpath('./td[2]//text()').extract_first().strip(),
'contenido': row.css('.content_value a::text').extract_first().strip()}
请记住,在你的情况下,内部循环选择器也应该相对于节点flv
,选择//
是一个全局选择器,所以它会抓住所有东西。
检查真正的html代码也更好,因为浏览器可能会渲染一些与收到的实际html不同的其他代码(例如tbody
标签)