2016-03-31 13 views
0

Dosya boru hattını kullanarak bazı dosyaları indirdim ve dosya alanlarının değerlerini almak istiyorum. ['Files'] öğesini yazdırmaya çalıştım ve bana önemli bir hata veriyor. Neden böyle ve nasıl yapabilirim?Scrubda 'files' alanı içindeki değerlere nasıl erişilir?

class testspider2(CrawlSpider): 
name = 'genspider' 
URL = 'flu-card.com' 
URLhttp = 'http://www.flu-card.com' 
allowed_domains = [URL] 
start_urls = [URLhttp] 
rules = (
    [Rule(LxmlLinkExtractor(allow =(),restrict_xpaths = ('//a'),unique = True,),callback='parse_page',follow=True),] 
) 

def parse_page(self, response): 
    List = response.xpath('//a/@href').extract() 
    item = GenericspiderItem() 
    date = strftime("%Y-%m-%d %H:%M:%S")#get date&time dd-mm-yyyy hh:mm:ss 
    MD5hash = '' #store as part of the item, some links crawled are not file links so they do not have values on these fields 
    fileSize = '' 
    newFilePath = '' 
    File = open('c:/users/kevin123/desktop//ext.txt','a') 
    for links in List: 
     if re.search('http://www.flu-card.com', links) is None: 
      responseurl = re.sub('\/$','',response.url) 
      url = urljoin(responseurl,links) 
     else: 
      url = links 
     #File.write(url+'\n') 
     filename = url.split('/')[-1]  
     fileExt = ''.join(re.findall('.{3}$',filename)) 
     if (fileExt != ''): 
      blackList = ['tml','pdf','com','php','aspx','xml','doc'] 
      for word in blackList: 
       if any(x in fileExt for x in blackList): 
        pass #url is blacklisted        
       else:      
        item['filename'] = filename 
        item['URL'] = url 
        item['date'] = date 
        print item['files'] 
        File.write(fileExt+'\n') 
        yield GenericspiderItem(
         file_urls=[url] 
         ) 
        yield item 

cevap

0

sizin örümcek içinde item['files'] erişmek mümkün değildir. Bunun nedeni, dosyaların FilesPipeline tarafından indirilmesi ve öğelerin örümceklerinden çıktıktan sonra boru hatlarına ulaşmasıdır.

Öğeyi ilk önce verdikten sonra FilesPipeline'a gelir, daha sonra dosyalar düşürülür, sadece images alanı istediğiniz bilgi ile doldurulur. Ona erişmek için bir pipeline yazmalı ve FilesPipeline'dan sonra planlamalısınız. Boru hattınızın içinde, files alanına erişebilirsiniz.

Ayrıca, örümcekinizde farklı türden ürünlere sahip olduğunuzu unutmayın!