2016-07-16 16 views
2

Ich habe Probleme mit der Anmeldung in scrapy, und das meiste von dem, was ich finden kann, ist veraltet.Anmelden Scrapy

Ich habe LOG_FILE="log.txt" in der settings.py Datei und der Dokumentation zu setzen, sollte diese Arbeit:

Scrapy bietet einen Logger innerhalb jeder Instanz Spinne, die und verwendet wie folgt zugegriffen werden kann:

import scrapy 

class MySpider(scrapy.Spider): 

    name = 'myspider' 
    start_urls = ['http://scrapinghub.com'] 

    def parse(self, response): 
     self.logger.info('Parse function called on %s', response.url) 

Aber wenn ich tun:

class MySpider(CrawlSpider): 
    #other code 
    def parse_page(self,response): 
     self.logger.info("foobar") 

Ich bekomme nichts. Wenn ich

logger = logging.basicConfig(filename="log.txt",level=logging.INFO) 

An der Spitze meiner Datei festgelegt, nach meinen Importen, erstellt es eine Protokolldatei, und die Standard-Ausgabe wird gerade fein angemeldet, aber

class MySpider(CrawlSpider): 
    #other code 
    def parse_page(self,response): 
     logger.info("foobar") 

schlägt fehl, einen Auftritt zu machen. Ich habe auch versucht, es in der Klasse setzen __init__, als solche:

def __init__(self, *a, **kw): 
    super(FanfictionSpider, self).__init__(*a, **kw) 
    logging.basicConfig(filename="log.txt",level=logging.INFO) 

ich wieder einmal keine Ausgabe an die Datei, nur um auf die Konsole und foobar nicht angezeigt. Kann mir bitte jemand sagen, wie man sich Scrapy richtig anmeldet?

+0

Haben Sie [offizielle Dokumentation zur Protokollierung?] (Http://doc.scrapy.org/en/latest/topics/logging.html#logging-settings) überprüft. Sie sollten den Protokolldateinamen und andere Details in der Datei 'settings.py' einstellen . – Granitosaurus

+0

@Granitosaurus Ja, ich sagte dies am Anfang der Frage und referenzierte die Dokumente überall –

Antwort

4

Für die Protokollierung ich dies nur auf der Spinne Klasse setzen:

class SomeSpider(scrapy.Spider): 
    configure_logging(install_root_handler=False) 
    logging.basicConfig(
     filename='log.txt', 
     format='%(levelname)s: %(message)s', 
     level=logging.INFO 
    ) 

Dies setzt alle scrapy Ausgabe in das Projekt Stammverzeichnis als log.txt Datei

Wenn Sie etwas protokollieren wollen manuell shouldn Sie benutze den scrapy logger nicht, er ist veraltet. Verwenden Sie einfach den Python ein

import logging 
logging.error("Some error") 
1

Es scheint, dass Sie Ihre parse_page Methode zu keiner Zeit anrufen. Versuchen Sie, Ihre parse Methode zu kommentieren, und Sie werden eine NotImplementedError erhalten, weil Sie es beginnen, und Sie sagen, dass es nichts tut.

Vielleicht ist Ihr parse_page Methode, wenn Sie implementieren wird es funktionieren

def parse(self, response): 
    self.logger.info('Parse function called on %s', response.url) 
    self.parse_page(response) 

Hoffe, dass es Ihnen hilft.

0

Hier ist ein Beispielcode, wie mit Scrapy anzumelden:

# -*- coding: utf-8 -*- 
from scrapy import Spider 
from scrapy.http import FormRequest 
from scrapy.utils.response import open_in_browser 


class QuotesSpider(Spider): 
    name = 'quotes' 
    start_urls = ('http://quotes.toscrape.com/login',) 

    def parse(self, response): 
        token = response.xpath('//*[@name="csrf_token"]/@value').extract_first() 
        return FormRequest.from_response(response, 
                                         formdata={'csrf_token': token, 
                                                   'password': 'foobar', 
                                                   'username': 'foobar'}, 
                                         callback=self.scrape_pages) 

    def scrape_pages(self, response): 
        open_in_browser(response) 

        # Complete your code here to scrape the pages that you are redirected to after logging in 

        # .... 
        # .... 

Sie können die vollständigen Tutorial und Scrapy Code erläuterte detailliert lesen: https://python.gotrained.com/scrapy-formrequest-logging-in/