2017-11-21 17 views
3

次のコードが実行され、エラーなしでファイルが作成されます。ただし、jsonファイルには保存されません。CrawlerProcessがCrawlSpiderでデータを保存しない

データのダウンロードを妨害していたオートスロットルをオフにしましたが、問題は解決しませんでした。

Scrapy == 1.4.0

class MySpider(CrawlSpider): 
    name = "spidy" 
    allowed_domains = ["cnn.com"] 
    start_urls = ["http://www.cnn.com"]  

    rules = [Rule(LinkExtractor(allow=['cnn.com/.+']), callback='parse_item', follow=True)]  

    def parse_item(self, response): 

     print('went to: {}'.format(response.url)) 

     yield {'url': response.url}   

FILE_NAME = 'my_data.json' 
SETTINGS = { 
      'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)', 
      'FEED_FORMAT': 'json', 
      'FEED_URI': FILE_NAME,   
      } 

process = CrawlerProcess(SETTINGS) 
process.crawl(MySpider) 
process.start() 

EDIT:ログに見られるよう

スクレーパーがデータを取得している:

2017-11-21 11:07:55 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: scrapybot) 
2017-11-21 11:07:55 [scrapy.utils.log] INFO: Overridden settings: {'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)', 'FEED_URI': 'my_data.json', 'FEED_FORMAT': 'json'} 
2017-11-21 11:07:55 [scrapy.middleware] INFO: Enabled extensions: 
['scrapy.extensions.memusage.MemoryUsage', 
'scrapy.extensions.telnet.TelnetConsole', 
'scrapy.extensions.corestats.CoreStats', 
'scrapy.extensions.logstats.LogStats', 
'scrapy.extensions.feedexport.FeedExporter'] 
2017-11-21 11:07:55 [scrapy.middleware] INFO: Enabled downloader middlewares: 
['scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware', 
'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware', 
'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware', 
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware', 
'scrapy.downloadermiddlewares.retry.RetryMiddleware', 
'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware', 
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware', 
'scrapy.downloadermiddlewares.redirect.RedirectMiddleware', 
'scrapy.downloadermiddlewares.cookies.CookiesMiddleware', 
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware', 
'scrapy.downloadermiddlewares.stats.DownloaderStats'] 
2017-11-21 11:07:55 [scrapy.middleware] INFO: Enabled spider middlewares: 
['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware', 
'scrapy.spidermiddlewares.offsite.OffsiteMiddleware', 
'scrapy.spidermiddlewares.referer.RefererMiddleware', 
'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware', 
'scrapy.spidermiddlewares.depth.DepthMiddleware'] 
2017-11-21 11:07:55 [scrapy.middleware] INFO: Enabled item pipelines: 
[] 
2017-11-21 11:07:55 [scrapy.core.engine] INFO: Spider opened 
2017-11-21 11:07:55 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 
2017-11-21 11:07:55 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6041 
2017-11-21 11:07:55 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://www.cnn.com> (referer: None) 
2017-11-21 11:07:56 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://www.cnn.com/us> (referer: http://www.cnn.com) 
2017-11-21 11:07:56 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://www.cnn.com/specials/politics/congress-capitol-hill> (referer: http://www.cnn.com) 
2017-11-21 11:07:56 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://www.cnn.com/specials/politics/president-donald-trump-45> (referer: http://www.cnn.com) 
2017-11-21 11:07:56 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://www.cnn.com/specials/politics/us-security> (referer: http://www.cnn.com) 
2017-11-21 11:07:56 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://www.cnn.com/specials/politics/trumpmerica> (referer: http://www.cnn.com) 
2017-11-21 11:07:56 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://www.cnn.com/specials/politics/state-cnn-politics-magazine> (referer: http://www.cnn.com) 
2017-11-21 11:07:56 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://www.cnn.com/specials/opinion/opinion-social-issues> (referer: http://www.cnn.com) 
2017-11-21 11:07:56 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://www.cnn.com/specials/opinions/cnnireport> (referer: http://www.cnn.com) 
2017-11-21 11:07:56 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://www.cnn.com/specials/vr/vr-archives> (referer: http://www.cnn.com) 
2017-11-21 11:07:56 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://www.cnn.com/middle-east> (referer: http://www.cnn.com) 
2017-11-21 11:07:56 [scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (302) to <GET http://imagesource.cnn.com> from <GET http://www.cnn.com/collection> 
2017-11-21 11:07:56 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://www.cnn.com/specials/politics/supreme-court-nine> (referer: http://www.cnn.com) 
2017-11-21 11:07:56 [scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (302) to <GET http://transcripts.cnn.com/TRANSCRIPTS/> from <GET http://www.cnn.com/transcripts> 
2017-11-21 11:07:56 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://money.cnn.com/pf/> (referer: http://www.cnn.com) 
2017-11-21 11:07:56 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://money.cnn.com/luxury/> (referer: http://www.cnn.com) 
2017-11-21 11:07:56 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://money.cnn.com/data/markets/> (referer: http://www.cnn.com) 
2017-11-21 11:07:56 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://money.cnn.com/technology/> (referer: http://www.cnn.com) 
went to: http://www.cnn.com/us 
2017-11-21 11:07:56 [scrapy.core.scraper] DEBUG: Scraped from <200 http://www.cnn.com/us> 
{'url': 'http://www.cnn.com/us'} 
2017-11-21 11:07:56 [scrapy.dupefilters] DEBUG: Filtered duplicate request: <GET http://www.cnn.com/us> - no more duplicates will be shown (see DUPEFILTER_DEBUG to show all duplicates) 
2017-11-21 11:07:56 [scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (302) to <GET http://www.cnn.com/email/subscription> from <GET http://www.cnn.com/newsletters> 
... 

私たちは、スクレーパーを訪問して見ることができますURLには、ページ上の追加のURLをクロールし、レスポンスURLを取得して(「行き先」を参照)、「{'url':}、たとえば{'url': 'http://www.cnn.com/us'}のデータを返します

+0

@eLRuLL編集を参照してください。私はログを追加しました。 – ethanenglish

+0

@ethanenglish 'FEED_URI'に絶対パス'/directory/subdirectory/file.json'や実際のURI 'file:/// directory/subdirectory/file.json'を作成してみてください。 –

+0

@JonClementsご提案いただきありがとうございます。私はそれを追加しましたが、悲しいことに違いはありません。 – ethanenglish

答えて

0

あなたのコードはうまくいきますが、2回停止するか、またはkillしてjsonを空白にすると仮定します。私は2つのことを変えるだろう。

jsonの代わりにjsonlinesを1回使用します。これは、私がスパイダーを殺したとしても、あまりにも多くのアイテムを緩めないようにするでしょう。次に、各行自体が有効なJSONであるため、同じファイルに追加できます。あなたは無効なJSONに

セカンドを取得する間にプログラムを破るもあれば、私は項目が(デフォルト値は100である)

from scrapy.crawler import CrawlerProcess 
from scrapy.spiders import CrawlSpider, Rule 

from scrapy.linkextractor import LinkExtractor 

class MySpider(CrawlSpider): 
    name = "spidy" 
    allowed_domains = ["cnn.com"] 
    start_urls = ["http://www.cnn.com"] 

    rules = [Rule(LinkExtractor(allow=['cnn.com/.+']), callback='parse_item', follow=True)] 

    def parse_item(self, response): 

     print('went to: {}'.format(response.url)) 

     yield {'url': response.url} 

FILE_NAME = 'my_data.jsonl' 
SETTINGS = { 
      'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)', 
      'FEED_FORMAT': 'jsonlines', 
      'FEED_URI': FILE_NAME, 
      'CONCURRENT_ITEMS': 1 
      } 

process = CrawlerProcess(SETTINGS) 
process.crawl(MySpider) 
process.start() 

後より頻繁に輸出されているように、低い値に同時の項目を設定しますあなたは、データが細かいエクスポートされますないことが判明すること

items exported

+0

これは本当に奇妙です。あなたのコードはうまくいくはずですが、scrapyはファイルを作成してデータを取得しますが、ファイルには保存しません。私はここで完全に迷っています。私はアンインストールし、モジュールをインストールした、別のインポート方法を試して、まだ何もしていない。 – ethanenglish

+0

どのOSをお使いですか? –

+0

Mac Sierraの最新バージョン – ethanenglish

関連する問題