2017-05-03 1 views
0

Ich bin ein wenig neu zu scrapy, und ich muss einige Zeitungen Informationen für eine Arbeit zu extrahieren, ich habe einige Tutorial versucht, aber keiner von ihnen arbeitete wie erwartet, das Ziel ist es eine gegebene URL, extrahieren Sie die Informationen über die ersten 4 oder 5 Themen (die Insider-Informationen, wenn wir auf den Link klicken). Ich habe versucht, zuerst durch die Links zu navigieren, Bit ich scheitern, die Ausgabe ist leer und sagt 0 gecrawlte Seiten.scrapy extrat von Zeitungen zu 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

Crawler zur ersten Verbindung geht, und an diesem Link, um die Informationen zu extrahieren, geht dann auf die zweite und die Informationen des zweiten extrahieren. so für die 4 oder 5 ersten Nachrichten.

Log:

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

Können Sie Crawl-Protokoll veröffentlichen? Sie können dies über 'scrapy crawl spider --logfile output.log' oder' scrapy crawl spider &> output.log' Befehle ausführen. – Granitosaurus

+0

Bitte ergänzen Sie Ihre Frage, indem Sie Ihre Frage direkt bearbeiten, nicht indem Sie die Ergänzungen als Frage posten (dies wurde bereits bereinigt). – rrschmidt

Antwort

0

Ich hatte einen kurzen Blick auf http://www.dn.pt/pesquisa.html?q=economia%20empresas und es scheint, der Inhalt nicht mit dem ursprünglichen HTML kommt, die von scrapy erfasst wird.

Stattdessen wird der Inhalt heruntergeladen und durch nachfolgende Javascript/AJAX-Anfragen gerendert, die Scrapy nicht sofort aus der Box aufnimmt.

Mögliche Lösungen:

Entweder Sie verwenden Firebug oder Chrome Developer Tools zu verstehen, wie diejenigen Hintergrund Arbeit fordert und Sie versuchen, diese Hintergrund-Anfragen direkt zu emulieren und kratzen. (Bedeutet mehr Arbeit, aber der resultierende Schaber ist viel schneller).

Oder Sie fügen Splash oder eine Selenium-Instanz hinzu, damit sie das Javascript rendern und die gerenderten Seiten direkt abkratzen.