2012-12-28 31 views
9

Scrapy ile siteler arasında nasıl yineliyorum? NUMBER 1 ile 400 arasında olan http://www.saylor.org/site/syllabus.php?cid=NUMBER ile eşleşen tüm sitelerin gövdesini çıkarmak istiyorum.Python Scrapy ile siteler arasında yineleme

bu örümcek yazdık:

from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
from scrapy.selector import HtmlXPathSelector 
from syllabi.items import SyllabiItem 

class SyllabiSpider(CrawlSpider): 

    name = 'saylor' 
    allowed_domains = ['saylor.org'] 
    start_urls = ['http://www.saylor.org/site/syllabus.php?cid='] 
    rules = [Rule(SgmlLinkExtractor(allow=['\d+']), 'parse_syllabi')] 

    def parse_syllabi(self, response): 
     x = HtmlXPathSelector(response) 

     syllabi = SyllabiItem() 
     syllabi['url'] = response.url 
     syllabi['body'] = x.select("/html/body/text()").extract() 
     return syllabi 

Ama çalışmıyor. Anladığım kadarıyla bu start_url'deki linkleri arıyor. Siteler boyunca yinelemek istiyorum. Mantıklı olmak?

Yardımlarınız için teşekkürler.

+1

bunu önceden istenen URL'lerin listesini oluşturmak mümkün mü? ex. xls aralığında (1, 401)] 'urls = [" example.com?cid={}".format(x) Yasal Uyarı: Hiç Scrapy kullanmamıştım. – Kevin

cevap

11

bu deneyin:

from scrapy.spider import BaseSpider 
from scrapy.http import Request 
from syllabi.items import SyllabiItem 

class SyllabiSpider(BaseSpider): 
    name = 'saylor' 
    allowed_domains = ['saylor.org'] 
    max_cid = 400 

    def start_requests(self): 
     for i in range(self.max_cid): 
      yield Request('http://www.saylor.org/site/syllabus.php?cid=%d' % i, 
        callback=self.parse_syllabi) 

    def parse_syllabi(self, response): 
     syllabi = SyllabiItem() 
     syllabi['url'] = response.url 
     syllabi['body'] = response.body 

     return syllabi 
+0

Teşekkürler. Şimdi çıktıyı her web sitesi için dosyalara nasıl ayırabilirim? Parse_syllabi'de yazmak için değişken ismiyle bir dosya açtığımda, her sitenin çıktısı son dosyaya gider ve diğeri boş kalır. Sahnelerin arkasında ne olduğundan emin değil. –

+0

Perde arkasında neler oluyor [Twisted] (http://twistedmatrix.com/) denen sihir. Bu cevabı kabul etmeniz sizin için en iyisi olacaktır, eğer yardımcı olduysa ve sonra yeni bir soru açın. –

+0

Çok yardımcı oldu. Yeni bir soruya başladım: Neden Scrapy döngüden geçiyor? Yardım için teşekkürler. –