Scrapy Table列和行不起作用

时间:2017-10-26 10:06:33

标签: python web-scraping scrapy

我想搜索此页面的表格,但报废的数据只在一列中,在某些情况下数据不会出现。我也使用shell来查看Xpath是否正确(我使用Xpath助手来识别这些xpath)

R.id.etPassword

2 个答案:

答案 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标签)