2016-03-31 3 views
0

Ich habe einige Dateien mit der Datei-Pipeline heruntergeladen und ich möchte die Werte des Feldes Dateien erhalten. Ich habe versucht, item ['files'] zu drucken und es gibt mir einen Schlüsselfehler. Warum ist das so und wie kann ich es tun?Wie auf die Werte im Feld 'files' in scrapy zugegriffen werden

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 

Antwort

0

Es ist nicht möglich item['files'] in Ihrer Spinne zuzugreifen. Das liegt daran, dass die Dateien von der FilesPipeline heruntergeladen werden und die Objekte nur Pipelines erreichen, nachdem sie aus Ihrer Spinne herauskommen.

Sie geben zuerst das Element, dann wird es zu FilesPipeline, dann werden die Dateien heruntergeladen, und dann ist das Feld images mit den gewünschten Informationen gefüllt. Um darauf zuzugreifen, müssen Sie eine Pipeline schreiben und nach der FilesPipeline planen. Innerhalb Ihrer Pipeline können Sie auf das Feld files zugreifen.

Beachten Sie auch, dass Sie in Ihrer Spinne verschiedene Arten von Gegenständen nachgeben!

Verwandte Themen