2016-05-17 11 views
1

Wie wird eine Scrapy-Klasse ausgeführt und wie fügt man einer Spider-Klasse zusätzliche Methoden hinzu?Definieren zusätzlicher Methoden in einer Scrapy-Klasse

Zum Beispiel aus der Dokumentation:

import scrapy 

class DmozSpider(scrapy.Spider): 
    name = "dmoz" 
    allowed_domains = ["dmoz.org"] 
    start_urls = [ 
     "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/", 
     "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/" 
    ] 

    def parse(self, response): 
     filename = response.url.split("/")[-2] + '.html' 
     with open(filename, 'wb') as f: 
      f.write(response.body) 

Wenn ich ein paar Methoden für die Abfrage einer Datenbank oder etwas anderes definieren wollte, wie könnte ich darüber gehen, und warum?

+0

Könnten Sie bitte erarbeiten, was wollen Sie für die Datenbank abzufragen? Vielen Dank. – alecxe

+0

URLs zu crawlen, zum Beispiel – Adders

Antwort

2

Werfen wir einen Blick auf den folgenden Anwendungsfall - Ermitteln der URLs aus einer Datenbank. Verwenden Sie statt start_urlsstart_requests() method.

Beispielcode (mit MySQLdb Treiber direkt):

import MySQLdb 
import scrapy 

class DmozSpider(scrapy.Spider): 
    name = "dmoz" 
    allowed_domains = ["dmoz.org"] 

    def start_requests(self): 
     db = MySQLdb.connect(host="host", user="user" ...) 
     cursor = db.cursor() 

     cursor.execute("SELECT url from url_table") 
     requests = [scrapy.Request(url=row[0]) for row in cursor.fetchall()] 

     cursor.close() 

     return requests 

    def parse(self, response): 
     filename = response.url.split("/")[-2] + '.html' 
     with open(filename, 'wb') as f: 
      f.write(response.body) 
+0

Wie ich es derzeit eingerichtet habe, ist außerhalb der Klasse vollständig, sind die Klassenmethoden gerade von oben nach unten ausgeführt oder sind es nur vordefinierte Methoden, die erlaubt sind, d. H. Die start_requests-Methode? – Adders

+0

@Adders dieser spezielle Anwendungsfall beinhaltet die 'start_requests()' Methode, die eine besondere ist - speziell für die Bereitstellung der Start-URLs dynamisch. Aber abgesehen von speziellen "eingebauten" Methoden ist es nur eine reguläre Python-Klasse. – alecxe

+0

ok, danke - irgendwie hat meine Frage beantwortet :) – Adders

Verwandte Themen