Ich habe einen einfachen Code in Scrapy -Scrapy Ausbeute Antwortobjekt in start_request Methode
def start_requests(self):
response = scrapy.Request(url,callback=self.parse_response)
response.meta['some_useful_params'] = some_useful_params
yield response
def parse_respone(self,resposne):
some_useful_params = response.meta['some_useful_params']
do_parsing_stuff()
if some_conditon==True:
presponse = scrapy.Request(otherurl,callback=self.parse_response)
presponse.meta['some_useful_params'] = some_useful_params
yield presponse
else:
yield items
Das obige Programm funktioniert gut für mich, aber ich brauche es, um etwas zu ändern, die überprüft, ob die html bereits existiert diese Seite, dann nehmen Sie das als HTML, anstatt Anfrage an die Website.
Jetzt ist der Code für die -
def start_requests(self):
if html_exist:
request = scrapy.Request(url)
request.meta['some_useful_params'] = some_useful_params
response = scrapy.http.Response(url,body=cached_html,request=request)
#the below line doesn't call the method parse_response
self.parse_response(response)
else:
response = scrapy.Request(url,callback=self.parse_response)
response.meta['some_useful_params'] = some_useful_params
yield response
def parse_respone(self,resposne):
some_useful_params = response.meta['some_useful_params']
do_parsing_stuff()
if some_conditon==True:
if html_exist:
request = scrapy.Request(url)
request.meta['some_useful_params'] = some_useful_params
presponse = scrapy.http.Response(url,body=cached_html,request=request)
#the below line doesn't call the method parse_response
self.parse_response(presponse)
else:
presponse = scrapy.Request(otherurl,callback=self.parse_response)
presponse.meta['some_useful_params'] = some_useful_params
yield presponse
else:
yield items
Das Problem, das ich bin vor in dem zweiten Code, wenn HTML-Exits, ruft Methode parse_response nicht geschieht.
Obwohl ich den Grund nicht vollständig verstehe, aber ich denke, es ist etwas mit Python-Generatoren verwandt, wie kann ich dieses Problem beheben.?
ist es eine Möglichkeit, durch die ich die html (Cache-Kopie) auf das Request-Objekt festlegen können stattdessen einen Antrag machen zu Die Webseite? – sagar
können Sie die ['HttpCacheMiddleware'] (https://doc.scrapy.org/en/latest/topics/downloader-middleware.html#module-scrapy.downloadermiddlewares.httpcache) verwenden – eLRuLL