2017-03-29 7 views
1

私は掻きするウェブページを持っています。このページには、<table>のリンクのリストがあります。ルールセクションを使用して、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/> 

答えて

1

あなたは仕事へのリンク抽出のためCrawlSpiderクラスから継承する必要があります:あなたはrestrict_xpaths値を修正する必要が

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) 

注 - それは@hrefaの要素を指すとはなりません要素の属性。そして、タプルではなく文字列として定義することができます。

また、allow引数はオプションです。

+0

ありがとうございました!これは完璧に動作し始めました.... – arcee123

+0

残念ですが、アップデート#1を見ると、いくつかのページがクロールされ、他のページが掻き分けられます。なぜか教えてくれますか? – arcee123

+0

私はそれが行くすべてのページを掻き集めることを探しています – arcee123