2016-07-12 12 views
0

Ich habe eine Spinne gemacht, um Bewertungen von einer Seite wie dieser here mit scrapy zu erhalten. Ich möchte Produktbewertungen nur bis zu einem bestimmten Datum (2. Juli 2016 in diesem Fall). Ich möchte meine Spinne schließen, sobald das Datum der Überprüfung vor dem angegebenen Datum liegt, und die Liste der Gegenstände zurückgeben. Spider funktioniert gut, aber mein Problem ist, dass ich meine Spinne nicht schließen kann, wenn die Bedingung erfüllt ist..wenn ich eine Ausnahme aushege, schließt sich die Spinne, ohne etwas zurückzugeben. Bitte schlagen Sie die beste Möglichkeit vor, die Spinne manuell zu schließen. Hier ist mein Code:Schließen Sie eine Scrapy-Spinne, wenn eine Bedingung erfüllt ist, und geben Sie das Ausgabeobjekt zurück

from scrapy.spiders import CrawlSpider, Rule 
from scrapy.linkextractors import LinkExtractor 
from scrapy import Selector 
from tars.items import FlipkartProductReviewsItem 
import re as r 
import unicodedata 
from datetime import datetime 

class Freviewspider(CrawlSpider): 
    name = "frs" 
    allowed_domains = ["flipkart.com"] 
    def __init__(self, *args, **kwargs): 
     super(Freviewspider, self).__init__(*args, **kwargs) 
     self.start_urls = [kwargs.get('start_url')] 


    rules = (
     Rule(LinkExtractor(allow=(), restrict_xpaths=('//a[@class="nav_bar_next_prev"]')), callback="parse_start_url", follow= True), 
) 


    def parse_start_url(self, response): 

     hxs = Selector(response) 
     titles = hxs.xpath('//div[@class="fclear fk-review fk-position-relative line "]') 

     items = [] 

     for i in titles: 

      item = FlipkartProductReviewsItem() 

      #x-paths: 

      title_xpath = "div[2]/div[1]/strong/text()" 
      review_xpath = "div[2]/p/span/text()" 
      date_xpath = "div[1]/div[3]/text()" 



      #field-values-extraction: 

      item["date"] = (''.join(i.xpath(date_xpath).extract())).replace('\n ', '') 
      item["title"] = (''.join(i.xpath(title_xpath).extract())).replace('\n ', '') 

      review_list = i.xpath(review_xpath).extract() 
      temp_list = [] 
      for element in review_list: 
       temp_list.append(element.replace('\n ', '').replace('\n', '')) 

      item["review"] = ' '.join(temp_list) 

      xxx = datetime.strptime(item["date"], '%d %b %Y ') 
      comp_date = datetime.strptime('02 Jul 2016 ', '%d %b %Y ') 
      if xxx>comp_date: 
       items.append(item) 
      else: 
       break 

     return(items) 

Antwort

1

Spinne zu zwingen, in der Nähe können Sie CloseSpider Ausnahme erhöhen verwenden, wie here in scrapy docs beschrieben. Achten Sie darauf, Ihre Artikel zurückzugeben, bevor Sie die Ausnahme auslösen.

Verwandte Themen