2016-05-17 4 views
1

Scrapyクラスはどのように実行され、どのように追加メソッドをスパイダークラスに組み込むのですか?ドキュメントから例えばScrapyクラスでの追加メソッドの定義

、:私は、ポーリングデータベースまたは何か他のもののためにいくつかのメソッドを定義したい場合は

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) 

は、どのように私はそれについて移動して、なぜでしょうか?

+0

は、あなたがのためにデータベースをポーリングしたいものを詳しく説明していただけますか?ありがとう。 – alecxe

+0

クロールするURL(例: – Adders

答えて

2

次のユースケースを見てみましょう。データベースからクロールするURLを取得します。このため、start_urlsの代わりにstart_requests() methodを使用する必要があります。 (直接MySQLdbドライバを使用して)

サンプルコード:

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

)現在設定しているクラスは、クラスの外部にあります。クラスメソッドは上から実行されただけですか、それとも事前定義されたメソッド、つまりstart_requestsメソッドですか? – Adders

+0

@Addersこの特定のユースケースでは、特別に設計されたstart_requests()メソッドを使用します。特別に、開始URLを動的に提供するために設計されています。しかし、特殊な「組込み」メソッドを除いて、それは普通のPythonクラスです。 – alecxe

+0

ありがとう - ちょっと私の質問に答えました:) – Adders

関連する問題