2017-05-07 5 views
0

Es zeigt keine Fehler während der Ausführung, aber ich bin eine leere Datei output.My Code für Spinne bekommen ist wie folgt: istWie löse ich den folgenden Python-Scrapy-Fehler?

from scrapy.spider import BaseSpider 
    from scrapy.selector import HtmlXPathSelector 
    from example.items import exampleItem 
    class MySpider(BaseSpider): 
    name = "eg" 
    allowed_domains = ["timeanddate.com"] 
    start_urls = ["https://www.timeanddate.com/worldclock/"] 
    def parse(self, response): 
      titles = response.selector.xpath("/html/body/div[1]/div[8]/section[2]/div[1]/table/tbody") 
    items = [] 
    for titles in titles: 
     item = exampleItem() 
     item["title"] = titles.xpath("//tr/td[@a]/text()").extract() 
     item["link"] = titles.xpath("//tr/td[@class=rbi]").extract() 
     items.append(item) 
    return items 

-Code für Scraper.item wie folgt:

from scrapy.item import Item, Field 

    class exampleItem(Item): 
    title = Field() 
    link = Field() 

LogFile Ausgang ist wie folgt, die nur Fehler displayedin dies: )>: HTTP-Statuscode ist nicht behandelt oder nicht

 [scrapy.utils.log] INFO: Scrapy 1.3.3 started (bot: example) 
     [scrapy.utils.log] INFO: Overridden settings: {'NEWSPIDER_MODULE': 
     'example.spiders', 'FEED_URI': 'items.csv', 'SPIDER_MODULES': 
     ['example.spiders'], 'BOT_NAME': 'example', 'ROBOTSTXT_OBEY': True, 
     'FEED_FORMAT': 'csv'} 
     [scrapy.middleware] INFO: Enabled extensions: 
     ['scrapy.extensions.feedexport.FeedExporter', 
     'scrapy.extensions.logstats.LogStats', 
     'scrapy.extensions.telnet.TelnetConsole', 
     'scrapy.extensions.corestats.CoreStats'] 
     [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.stats.DownloaderStats'] 
    [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'] 
     [scrapy.middleware] INFO: Enabled item pipelines: 
     [] 
     [scrapy.core.engine] INFO: Spider opened 
     [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), 
     scraped 0 items (at 0 items/min) 
     [scrapy.extensions.telnet] DEBUG: Telnet console listening on 
     127.0.0.1:6023 
     [scrapy.core.engine] DEBUG: Crawled (200) <GET 
     https://www.timeanddate.com/robots.txt> (referer: None) 
     [scrapy.core.engine] DEBUG: Crawled (404) <GET 
     https://www.timeanddate.com/worldclock/)> (referer: None) 
    [scrapy.spidermiddlewares.httperror] INFO: Ignoring response 
    <404 https://www.timeanddate.com/worldclock/)>: HTTP status code is not 
    handled or not allowed 
    [scrapy.core.engine] INFO: Closing spider (finished) 
    [scrapy.statscollectors] INFO: Dumping Scrapy stats: 
    {'downloader/request_bytes': 456, 
    'downloader/request_count': 2, 
    'downloader/request_method_count/GET': 2, 
    'downloader/response_bytes': 6109, 
    'downloader/response_count': 2, 
    'downloader/response_status_count/200': 1, 
    'downloader/response_status_count/404': 1, 
    'finish_reason': 'finished', 
    'finish_time': datetime.datetime(2017, 5, 7, 14, 2, 24, 993404), 
     'log_count/DEBUG': 3, 
    'log_count/INFO': 8, 
    'response_received_count': 2, 
    'scheduler/dequeued': 1, 
    'scheduler/dequeued/memory': 1, 
     'scheduler/enqueued': 1, 
    'scheduler/enqueued/memory': 1, 
    'start_time': datetime.datetime(2017, 5, 7, 14, 2, 23, 158763)} 
    [scrapy.core.engine] INFO: Spider closed (finished) 
erlaubt

Antwort

0

Der Grund ist Ihre XPath selectors stimmen nicht mit der Seitenquelle überein.

Ein bekanntes Problem mit Webbrowser-Entwicklertools ist, dass sie tbody Elemente anzeigen, in denen keine solchen Elemente in Antwortdaten vorhanden sind. Es lohnt sich also immer, sie nicht einzubeziehen oder zu umgehen.

Dann gibt es auch einige Code-Probleme. Es gibt eine for titles in titles:. Sieht irgendwie falsch aus für mich.

Dann stimmen die XPath-Anweisungen in der Schleife auch nichts mit meinen Entwicklertools überein. Es gibt keine Übereinstimmung für //tr/td[@a]. Es sollte sein. Aber letzteres passt alle Anker auf einmal, was es schwierig macht, einzelne Elemente zu extrahieren. So

Ich habe versucht, den Code neu zu schreiben und kam mit dem folgenden:

import scrapy 

class MyItem(scrapy.Item): 
    title = scrapy.Field() 
    link = scrapy.Field() 


class MySpider(scrapy.Spider): 
    name = "eg" 
    allowed_domains = ["timeanddate.com"] 
    start_urls = ["https://www.timeanddate.com/worldclock/"] 

    def parse(self, response): 

     for sel_row in response.xpath('//table//tr'): 
      for sel_td in sel_row.xpath('./td[a]'): 

       item = MyItem() 
       item["title"] = sel_td.xpath('./a/text()').extract_first() 
       item["link"] = sel_td.xpath('./following::td[@class="rbi"][1]').extract_first() 
       yield item 

Dieser Code mit scrapy 1.3.2/Python 2.7.11 getestet wird.

+0

Ich habe versucht, diesen Code mit dem Befehl "scrapy crawl eg -o items.csv -t csv" auszuführen, aber es gibt immer noch eine leere Datei als Ausgabe – Priyanka

+0

Hmmm ... Ich bekomme eine Datei mit 144 Zeilen. Wie sieht die Ausgabe des Befehls aus? Irgendwelche Fehler? –

+0

Nein, beim Ausführen des Befehls werden keine Fehler angezeigt. Ich habe gerade meine items.py Kodierung auch aktualisiert. – Priyanka

Verwandte Themen