2017-08-16 2 views
-1

Ich habe eine Liste von URLs, die jeweils mit einer eindeutigen ID verbunden sind. Ich möchte Scrapy verwenden, um jede der URLs herunterzuladen und sie in einer Datei zu speichern, die nach ihrer eindeutigen ID benannt ist. Ich ging durch eine grundlegende Tutorial und habe folgenden Code aber nicht sicher, wie kann ich die uid erhalten, während die Datei zu speichern nach dem Parsen -Wählen Sie den Dateinamen in 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

nicht sicher, warum diese Frage abgelehnt wurde. @ tomáš-linhart Ich hatte diese Lösung früher ausprobiert, aber es gab mir einen Schlüsselfehler. Deshalb habe ich meinen obigen Code bearbeitet und die Zeile entfernt, die genau das enthält, was Sie vorgeschlagen haben. Downvotes sind frustrierend, wenn keine Gründe vorliegen :( – comiventor

Antwort

1

Sie die uid von meta Attribute erhalten in parse Methode wie folgt:

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

oder 'f" quotes- {response.meta ['uid']} "' wenn du py3.6 ausführst :) – Granitosaurus

+0

@Granitosaurus [This] (https: // www .python.org/dev/peps/pep-0498 /) ist wirklich cool, wusste das nicht. Wahrscheinlich Zeit um schon von 2.7 zu wechseln ... :-) –

Verwandte Themen