2017-05-03 9 views
0

私は治療に少し新しく、仕事のための新聞情報をいくつか抽出する必要があります。私はチュートリアルを試しましたが、どれも期待どおりに機能しませんでした。与えられたURL、最初の4つのトピック(私たちがリンクをクリックしたときの内部情報)に関する情報を抽出します。 まず最初にリンクをナビゲートしようとしましたが、ビットiは失敗し、出力は空になり、クロールされたページは0と表示されます。新聞からtxtへの治療のエクストラベッド

import scrapy 

class BlogSpider(scrapy.Spider): 
    name = 'blogspider' 
    start_urls = ['http://www.dn.pt/pesquisa.html?q=economia%20empresas'] 

    def parse(self, response): 
     for title in response.css('div.gs-title'): 
      yield 
      { 
      'title': title.css('a.gs-title::text').extract_first() 
      } 

the title/link for the first news

the div containing all the news

クローラは、最初のリンクに進み、そのリンクに関する情報を抽出し、第二に進み、そして第二の情報を抽出します。 4,5の最初のニュースのようなものです。

ログイン:

2017-05-03 12:46:37 [scrapy.utils.log] INFO: Scrapy 1.3.3 started (bot: scrapybot) 
2017-05-03 12:46:37 [scrapy.utils.log] INFO: Overridden settings: {'SPIDER_LOADER_WARN_ONLY': True, 'LOG_FILE': 'output.log'} 
2017-05-03 12:46:37 [scrapy.middleware] INFO: Enabled extensions: 
['scrapy.extensions.logstats.LogStats', 
'scrapy.extensions.telnet.TelnetConsole', 
'scrapy.extensions.corestats.CoreStats'] 
2017-05-03 12:46:37 [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.stats.DownloaderStats'] 
2017-05-03 12:46:37 [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-05-03 12:46:37 [scrapy.middleware] INFO: Enabled item pipelines: 
[] 
2017-05-03 12:46:37 [scrapy.core.engine] INFO: Spider opened 
2017-05-03 12:46:37 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 
2017-05-03 12:46:37 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023 
2017-05-03 12:46:38 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://www.dn.pt/pesquisa.html?q=economia%20empresas> (referer: None) 
2017-05-03 12:46:38 [scrapy.core.engine] INFO: Closing spider (finished) 
2017-05-03 12:46:38 [scrapy.statscollectors] INFO: Dumping Scrapy stats: 
{'downloader/request_bytes': 242, 
'downloader/request_count': 1, 
'downloader/request_method_count/GET': 1, 
'downloader/response_bytes': 16289, 
'downloader/response_count': 1, 
'downloader/response_status_count/200': 1, 
'finish_reason': 'finished', 
'finish_time': datetime.datetime(2017, 5, 3, 11, 46, 38, 199050), 
'log_count/DEBUG': 2, 
'log_count/INFO': 7, 
'response_received_count': 1, 
'scheduler/dequeued': 1, 
'scheduler/dequeued/memory': 1, 
'scheduler/enqueued': 1, 
'scheduler/enqueued/memory': 1, 
'start_time': datetime.datetime(2017, 5, 3, 11, 46, 37, 873062)} 
2017-05-03 12:46:38 [scrapy.core.engine] INFO: Spider closed (finished) 
+0

クロールログを投稿できますか?これは 'scream crawl spider --logfile output.log'または' scrapy crawl spider&> output.log'コマンドで行うことができます。 – Granitosaurus

+0

追加情報を質問として直接投稿するのではなく、質問を直接編集して質問に追加してください(これはすでに削除済みです)。 – rrschmidt

答えて

0

私はhttp://www.dn.pt/pesquisa.html?q=economia%20empresasで簡単に見ていたし、コンテンツがscrapyによって捕獲された初期のHTMLが付属していないようです。

代わりに、コンテンツはダウンロードされ、次のJavascript/AJAX要求によってレンダリングされ、Scrapyはそれをそのままキャプチャしません。

考えられる解決策:

あなたがそれらのバックグラウンド要求がどのように機能するかを理解するためにFirebugのやChromeデベロッパーツールを使用して、直接これらのバックグラウンド要求をエミュレートし、こすりしようとするのどちらか。 (より多くの仕事を意味するが、得られるスクレーパーはずっと速い)。

また、SplashまたはSeleniumインスタンスを追加してJavascriptをレンダリングし、レンダリングしたページを直接スクレーピングすることもできます。