2016-03-31 3 views
0

Я загрузил несколько файлов, используя конвейер файла, и я хочу получить значения поля файлов. Я попытался напечатать элемент ['files'], и это дает мне ключевую ошибку. Почему это так и как я могу это сделать?Как получить доступ к значениям внутри поля «файлы» в scrapy

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 

ответ

0

Недоступен item['files'] в вашем пауке. Это потому, что файлы загружаются с помощью FilesPipeline, и элементы просто достигают конвейеров после того, как они выходят из вашего паука.

Сначала вы получаете товар, затем он получает файлы Filespipeline, затем файлы загружаются, а затем поле images заполняется информацией, которую вы хотите. Чтобы получить доступ к нему, вам нужно написать конвейер и запланировать его после FilePipeline. Внутри вашего трубопровода вы можете получить доступ к полю files.

Также обратите внимание, что в вашем пауке вы уступаете различным предметам!

 Смежные вопросы

  • Нет связанных вопросов^_^