2017-10-06 6 views
0

Versuchen, herauszufinden, wie Scrapy funktioniert und damit Informationen in Foren zu finden.Scrapy liefert kein Ergebnis (crawled 0 Seiten)

items.py

import scrapy 


class BodybuildingItem(scrapy.Item): 
    # define the fields for your item here like: 
    title = scrapy.Field() 
    pass 

spider.py

from scrapy.spider import BaseSpider 
from scrapy.selector import Selector 
from bodybuilding.items import BodybuildingItem 

class BodyBuildingSpider(BaseSpider): 
    name = "bodybuilding" 
    allowed_domains = ["forum.bodybuilding.nl"] 
    start_urls = [ 
     "https://forum.bodybuilding.nl/fora/supplementen.22/" 
    ] 

    def parse(self, response): 
     responseSelector = Selector(response) 
     for sel in responseSelector.css('li.past.line.event-item'): 
      item = BodybuildingItem() 
      item['title'] = sel.css('a.data-previewUrl::text').extract() 
      yield item 

Das Forum Ich versuche, die Post-Titel von in diesem Beispiel zu bekommen, ist dies: https://forum.bodybuilding.nl/fora/supplementen.22/

Allerdings bekomme ich keine Ergebnisse:

class BodyBuildingSpider(BaseSpider): 2017-10-07 00:42:28 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: bodybuilding) 2017-10-07 00:42:28 [scrapy.utils.log] INFO: Overridden settings: {'NEWSPIDER_MODULE': 'bodybuilding.spiders', 'SPIDER_MODULES': ['bodybuilding.spiders'], 'ROBOTSTXT_OBEY': True, 'BOT_NAME': 'bodybuilding'} 2017-10-07 00:42:28 [scrapy.middleware] INFO: Enabled extensions: ['scrapy.extensions.memusage.MemoryUsage', 'scrapy.extensions.logstats.LogStats', 'scrapy.extensions.corestats.CoreStats'] 2017-10-07 00:42:28 [scrapy.middleware] INFO: Enabled downloader middlewares: ['scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware', '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-10-07 00:42:28 [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-10-07 00:42:28 [scrapy.middleware] INFO: Enabled item pipelines: [] 2017-10-07 00:42:28 [scrapy.core.engine] INFO: Spider opened 2017-10-07 00:42:28 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 2017-10-07 00:42:28 [scrapy.core.engine] DEBUG: Crawled (404) https://forum.bodybuilding.nl/robots.txt> (referer: None) 2017-10-07 00:42:29 [scrapy.core.engine] DEBUG: Crawled (200) https://forum.bodybuilding.nl/fora/supplementen.22/> (referer: None) 2017-10-07 00:42:29 [scrapy.core.engine] INFO: Closing spider (finished) 2017-10-07 00:42:29 [scrapy.statscollectors] INFO: Dumping Scrapy stats: {'downloader/request_bytes': 469, 'downloader/request_count': 2, 'downloader/request_method_count/GET': 2, 'downloader/response_bytes': 22878, 'downloader/response_count': 2, 'downloader/response_status_count/200': 1, 'downloader/response_status_count/404': 1, 'finish_reason': 'finished', 'finish_time': datetime.datetime(2017, 10, 6, 22, 42, 29, 223305), 'log_count/DEBUG': 2, 'log_count/INFO': 7, 'memusage/max': 31735808, 'memusage/startup': 31735808, 'response_received_count': 2, 'scheduler/dequeued': 1, 'scheduler/dequeued/memory': 1, 'scheduler/enqueued': 1, 'scheduler/enqueued/memory': 1, 'start_time': datetime.datetime(2017, 10, 6, 22, 42, 28, 816043)} 2017-10-07 00:42:29 [scrapy.core.engine] INFO: Spider closed (finished)

Ich verfolge die Führung hier: http://blog.florian-hopf.de/2014/07/scrapy-and-elasticsearch.html

Update 1:

Als jemand sagte mir, ich brauchte, um meinen Code zu den neuen Standards zu aktualisieren, was ich auch tat, aber es hat nicht ändern das Ergebnis:

from scrapy.spider import BaseSpider 
from scrapy.selector import Selector 
from bodybuilding.items import BodybuildingItem 

class BodyBuildingSpider(BaseSpider): 
    name = "bodybuilding" 
    allowed_domains = ["forum.bodybuilding.nl"] 
    start_urls = [ 
     "https://forum.bodybuilding.nl/fora/supplementen.22/" 
    ] 

    def parse(self, response): 
     for sel in response.css('li.past.line.event-item'): 
      item = BodybuildingItem() 
      yield {'title': title.css('a.data-previewUrl::text').extract_first()} 
      yield item 

Letztes Update mit fix

Nach einiger guten Hilfe habe ich es endlich mit dieser Spinne arbeiten:

import scrapy 

class BlogSpider(scrapy.Spider): 
    name = 'bodybuilding' 
    start_urls = ['https://forum.bodybuilding.nl/fora/supplementen.22/'] 

    def parse(self, response): 
     for title in response.css('h3.title'): 
      yield {'title': title.css('a::text').extract_first()} 
      next_page_url = response.xpath("//a[text()='Volgende >']/@href").extract_first() 
      if next_page_url: 
       yield response.follow(next_page_url, callback=self.parse) 
+0

Sie sollte 'response.css ('li.past.line.event-item')' verwenden und es gibt keine Notwendigkeit für 'responseSelector = Selector (response)'. Auch das CSS, das du verwendest, ist nicht mehr gültig, also musst du diese zuerst auf der neuesten Webseite aktualisieren –

+0

Ich denke, ich habe es jetzt alles aktualisiert, immer noch nichts. Siehe Aktualisierung. – Nerotix

+0

Das Problem ist, es gibt nichts auf der Seite, die 'li.past.line.event-item' entspricht –

Antwort

1

Sie response.css('li.past.line.event-item') verwenden sollen, und es besteht keine Notwendigkeit für responseSelector = Selector(response).

Auch die CSS Sie li.past.line.event-item, verwenden, ist nicht mehr gültig, so müssen Sie die zuerst auf der Grundlage der neuesten Web-Seite aktualisieren

Um die nächste Seite URL erhalten Sie

>>> response.css("a.text::attr(href)").extract_first() 
'fora/supplementen.22/page-2' 

verwenden können, und dann response.follow verwenden diese relative url

Bearbeiten-2 zu folgen: Korrektur Nächste Seite Verarbeitung

Die vorherige bearbeiten es die URL vorherigen Seite passt nicht, weil auf der nächsten Seite arbeiten, so müssen Sie unter

next_page_url = response.xpath("//a[text()='Volgende >']/@href").extract_first() 
if next_page_url: 
    yield response.follow(next_page_url, callback=self.parse) 

Bearbeiten-1 verwenden: Nächste Seite Verarbeitung

next_page_url = response.css("a.text::attr(href)").extract_first() 
if next_page_url: 
    yield response.follow(next_page_url, callback=self.parse) 
+0

das ist, wie es jetzt aussieht: für next_page in response.css ("a.text :: attr (href)") extract_first():. Ausbeute response.follow (next_page, self.parse) aber Fehler erhalten "TypeError: 'NoneType' -Objekt ist nicht iterierbar". Was mir sagt, Zeile 11 hat ein Problem, das ist die for-Schleife, die ich gerade gezeigt habe. – Nerotix

+0

@Nerotix, bitte überprüfen Sie die Bearbeitung –

+0

hmm etwas Seltsames passiert, wenn ich das hinzufügen .. es macht zuerst die erste Seite, dann die zweite und dann die erste wieder, aber es springt nie weiter als Seite 2. – Nerotix

Verwandte Themen