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)