Python 如何按照链接列表从scrapy中的页面获取数据?

Python 如何按照链接列表从scrapy中的页面获取数据?,python,web-scraping,scrapy,scrapy-spider,Python,Web Scraping,Scrapy,Scrapy Spider,我有一个网页要浏览。页面上是中的链接列表。我试图使用规则部分让Scrapy浏览链接,并获取链接目标页面上的数据。下面是我的代码: class ToScrapeSpiderXPath(scrapy.Spider): name = 'coinmarketcap' start_urls = [ 'https://coinmarketcap.com/currencies/views/all/' ] rules = ( Rule(LinkE

我有一个网页要浏览。页面上是
中的链接列表。我试图使用规则部分让Scrapy浏览链接,并获取链接目标页面上的数据。下面是我的代码:

class ToScrapeSpiderXPath(scrapy.Spider):
    name = 'coinmarketcap'
    start_urls = [
        'https://coinmarketcap.com/currencies/views/all/'
    ]

    rules = (
        Rule(LinkExtractor(allow=(), restrict_xpaths=('//tr/td[2]/a/@href',)), callback="parse", follow= True),
    )

    def parse(self, response):
        print("TEST TEST TEST")
        BTC = BTCItem()
        BTC['source'] = str(response.request.url).split("/")[2]
        BTC['asset'] = str(response.request.url).split("/")[4],
        BTC['asset_price'] = response.xpath('//*[@id="quote_price"]/text()').extract(),
        BTC['asset_price_change'] = response.xpath('/html/body/div[2]/div/div[1]/div[3]/div[2]/span[2]/text()').extract(),
        BTC['BTC_price'] = response.xpath('/html/body/div[2]/div/div[1]/div[3]/div[2]/small[1]/text()').extract(),
        BTC['Prct_change'] = response.xpath('/html/body/div[2]/div/div[1]/div[3]/div[2]/small[2]/text()').extract()
        yield (BTC)
我的问题是,Scrapy没有跟随链接。它只是在尝试从该链接提取数据时获取该链接。我错过了什么

更新#1: 为什么要爬还是刮

2017-03-28 23:10:33 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://coinmarketcap.com/currencies/pivx/> (referer: None)
2017-03-28 23:10:33 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://coinmarketcap.com/currencies/zcash/> (referer: None)
2017-03-28 23:10:33 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://coinmarketcap.com/currencies/bitcoin/> (referer: None)
2017-03-28 23:10:33 [scrapy.core.scraper] DEBUG: Scraped from <200 https://coinmarketcap.com/currencies/nem/>
2017-03-28 23:10:33[scrapy.core.engine]调试:爬网(200)(参考:无)
2017-03-28 23:10:33[刮屑核心引擎]调试:爬网(200)(参考:无)
2017-03-28 23:10:33[刮屑核心引擎]调试:爬网(200)(参考:无)
2017-03-28 23:10:33[scrapy.core.scraper]调试:从

您需要从类继承链接提取器才能工作:

from scrapy.spiders import CrawlSpider
from scrapy.spiders import Rule
from scrapy.contrib.linkextractors import LinkExtractor


class ToScrapeSpiderXPath(CrawlSpider):
    name = 'coinmarketcap'
    start_urls = [
        'https://coinmarketcap.com/currencies/views/all/'
    ]

    rules = (
        Rule(LinkExtractor(restrict_xpaths='//tr/td[2]/a'), callback="parse_table_links", follow= True),
    )

    def parse_table_links(self, response):
        print(response.url)
请注意,您需要修复
restrict\xpaths
值-它应该指向
a
元素,而不是元素的
@href
属性。而且,您可以将其定义为字符串而不是元组


另外,
allow
参数是可选的。

很抱歉稍后再问,但是如果您查看update#1,它会抓取一些页面,刮取其他页面。你能告诉我为什么吗?我想把它的每一页都刮掉to@arcee123我认为您应该获得所有这些信息-请重新检查控制台输出-您应该看到每个url的“crawled”和“scrawed from”日志消息。谢谢,好的。我不是。有超过670个链接需要通过,但并不是所有链接都能通过。来源在这里:@arcee123等等,我刚刚将所有结果转储到一个json文件中,并在那里获得890个链接。如果这个问题仍然可以再现,你能在另一个问题中详细说明一下吗?通过这种方式,更多的人可能会提供帮助,而且,在描述问题时,您可能会看到问题:)谢谢。