Scrapy-xpath-提取返回null

时间:2018-11-03 04:25:44

标签: python-3.x xpath scrapy

我的目标是建立一个从this site的表中提取数据的抓取器。

最初,我遵循tutorial of Scrapy,在这里我成功地从测试站点中提取了数据。当我尝试为Bitinfocharts复制它时,第一个问题是我需要使用xpath,本教程没有详细介绍(仅使用css)。我已经能够通过外壳抓取所需的特定数据。

  • 我当前的问题是了解如何从代码中抓取它们,同时将结果写入.csv / .json文件?

我可能缺少一些显而易见的东西。如果您可以看一下我的代码并让我知道我做错了,我将深表感谢。

谢谢!

第一次尝试:

import scrapy

class RichlistTestItem(scrapy.Item):
    # overview details
    wallet = scrapy.Field()
    balance = scrapy.Field()
    percentage_of_coins = scrapy.Field()

class QuotesSpider(scrapy.Spider):
    name = "quotes"
    allowed_domain = ['https://bitinfocharts.com/']
    start_urls = [
        'https://bitinfocharts.com/top-100-richest-vertcoin-addresses.html'
    ]

    def parse(self, response):
        for sel in response.xpath("//*[@id='tblOne']/tbody/tr/"):            
            scrapy.Item in RichlistTestItem()
            scrapy.Item['wallet'] = sel.xpath('td[2]/a/text()').extract()[0]
            scrapy.Item['balance'] = sel.xpath('td[3]/a/text').extract()[0]
            scrapy.Item['percentage_of_coins'] = sel.xpath('/td[4]/a/text').extract()[0]

            yield('wallet', 'balance', 'percentage_of_coins')

第二次尝试:(可能接近50次尝试)

import scrapy

class RichlistTestItem(scrapy.Item):
    # overview details
    wallet = scrapy.Field()
    balance = scrapy.Field()
    percentage_of_coins = scrapy.Field()

class QuotesSpider(scrapy.Spider):
    name = "quotes"
    allowed_domain = ['https://bitinfocharts.com/']
    start_urls = [
        'https://bitinfocharts.com/top-100-richest-vertcoin-addresses.html'
    ]

    def parse(self, response):
        for sel in response.xpath("//*[@id='tblOne']/tbody/tr/"):            
            wallet = sel.xpath('td[2]/a/text()').extract()
            balance = sel.xpath('td[3]/a/text').extract()
            percentage_of_coins = sel.xpath('/td[4]/a/text').extract()

            print(wallet, balance, percentage_of_coins)

1 个答案:

答案 0 :(得分:0)

我已修复您的第二个试用版,尤其是下面的代码段

print (df1.head())
           Date  count
66   02-05-2014     54
594  13-05-2014     56
294  07-02-2014     57
877  19-04-2013     58
162  04-05-2014     59

df1.to_csv('file.csv', index=False)

我发现的问题是

  • 表行选择器后面有一个“ /”。
  • 为了平衡 值位于td内,而不位于td内的链接内
  • 再次用于percetag .. 该值在td内。

每个td都有一个data-val属性。刮除这些内容可能比从td内部获取价值要容易得多。