2017-08-16 6 views
-1

J'ai une liste d'URL, chacune associée à un ID unique. Je veux utiliser scrapy pour télécharger chacune des URL et les enregistrer dans un fichier nommé d'après leur identifiant unique. Je suis passé par un tutoriel de base et avoir le code suivant, mais ne sais pas comment puis-je obtenir le uid lors de l'enregistrement du fichier après l'analyse syntaxique -Choisissez un nom de fichier dans scrapy

import scrapy 
import json 

class QuotesSpider(scrapy.Spider): 
    name = "quotes" 

    def start_requests(self): 
     urls = json.load(open('url_info.json')) 
     for entity in urls: 
      url = entity['url'] 
      uid = entity['uid'] # unique id 
      request_object = scrapy.Request(url=url, callback=self.parse) 
      request_object.meta['uid'] = uid 
      yield request_object 

    def parse(self, response): 
     filename = 'quotes-unique-id.html' # % can I access uid here 
     with open(filename, 'wb') as f: 
      f.write(response.body) 
+0

Vous ne savez pas pourquoi cette question a été mise en baisse. @ tomáš-linhart J'avais essayé cette solution plus tôt mais cela m'a donné une erreur clé. C'est pourquoi j'ai modifié mon code ci-dessus et supprimé la ligne contenant exactement ce que vous avez suggéré. Les downvotes sont frustrants si les raisons ne sont pas présentes :( – comiventor

Répondre

1

Vous obtenez le uid de meta attribut dans parse méthode comme ceci:

filename = 'quotes-{}.html'.format(response.meta['uid']) 
+1

ou 'f" quotes- {response.meta ['uid']} "' si vous utilisez py3.6 :) – Granitosaurus

+0

@Granitosaurus [This] (https: // www .python.org/dev/peps/pep-0498 /) est vraiment cool, je ne le savais pas. Probablement le temps de passer de 2.7 déjà ... :-) –