0

これが私のコードだとします

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector

from dmoz.items import DmozItem

class DmozSpider(BaseSpider):
   domain_name = "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):
       hxs = HtmlXPathSelector(response)
       sites = hxs.select('//ul[2]/li')
       items = []
       for site in sites:
           item = DmozItem()
           item['title'] = site.select('a/text()').extract()
           item['link'] = site.select('a/@href').extract()
           item['desc'] = site.select('text()').extract()
           items.append(item)
       return items

SPIDER = DmozSpider()

もしクロールスパイダーを使用したことがあれば、ルールを使用してリンクエクストラクタを実装できますが、ベーススパイダーでルールについて言及するにはどうすればよいでしょうか。上記の例のように。ルールはベーススパイダーではなくクロールスパイダーでのみ利用できるため

4

1 に答える 1

0

おそらく、ルール基準の応答を解析し、成功した応答を 2 番目のコールバックに渡すことができますか? 以下の疑似コード:

def parse(self, response):
    # check response for rule criteria
    ...
    if rule: 
        # create new request to pass to second callback
        req = Request("http://www.example.com/follow", callback=self.parse2)
        return req

def parse2(self, response):
    hxs = HtmlXPathSelector(response)
    # do stuff with the successful response
于 2012-12-13T02:25:28.833 に答える