Ich versuche, die Website eines prominenten britischen Einzelhändler zu kriechen und ein Attribut erhalte wie folgt:Scrapy SitemapSpider nicht funktioniert
nl_env/lib/python3.6/site-packages/scrapy/spiders/sitemap.py", line 52, in _parse_sitemap for r, c in self._cbs:
AttributeError: 'NlSMCrawlerSpider' object has no attribute '_cbs'
Es ist wahrscheinlich ich nicht ganz zu begreifen, wie ein SitemapSpider arbeitet - meinen Code unten:
class NlSMCrawlerSpider(SitemapSpider):
name = 'nl_smcrawler'
allowed_domains = ['newlook.com']
sitemap_urls = ['http://www.newlook.com/uk/sitemap/maps/sitemap_uk_product_en_1.xml']
sitemap_follow = ['/uk/womens/clothing/']
# sitemap_rules = [
# ('/uk/womens/clothing/', 'parse_product'),
# ]
def __init__(self):
self.driver = webdriver.Safari()
self.driver.set_window_size(800,600)
time.sleep(2)
def parse_product(self, response):
driver = self.driver
driver.get(response.url)
time.sleep(1)
# Collect products
itemDetails = driver.find_elements_by_class_name('product-details-page content')
# Pull features
desc = itemDetails[0].find_element_by_class_name('product-description__name').text
href = driver.current_url
# Generate a product identifier
identifier = href.split('/p/')[1].split('?comp')[0]
identifier = int(identifier)
# datetime
dt = date.today()
dt = dt.isoformat()
# Price Symbol removal and integer conversion
try:
priceString = itemDetails[0].find_element_by_class_name('price product-description__price').text
except:
priceString = itemDetails[0].find_element_by_class_name('price--previous-price product-description__price--previous-price ng-scope').text
priceInt = priceString.split('£')[1]
originalPrice = float(priceInt)
# discountedPrice Logic
try:
discountedPriceString = itemDetails[0].find_element_by_class_name('price price--marked-down product-description__price').text
discountedPriceInt = discountedPriceString.split('£')[1]
discountedPrice = float(discountedPriceInt)
except:
discountedPrice = 'N/A'
# NlScrapeItem
item = NlScrapeItem()
# Append product to NlScrapeItem
item['identifier'] = identifier
item['href'] = href
item['description'] = desc
item['originalPrice'] = originalPrice
item['discountedPrice'] = discountedPrice
item['firstSighted'] = dt
item['lastSighted'] = dt
yield item
auch zögern Sie nicht, für weitere Details zu bitten, den Link zum sitemap und einen Link zu der eigentlichen Datei innerhalb des Scrapy Paket sehen den Fehler (link - github) abzuwerfen. Ihre Hilfe wäre herzlich willkommen.
Edit: Ein Gedanke am 2nd link sucht (aus dem Scrapy Paket), kann ich sehen, _cbs in der def __init__(self, *a, **kw):
Funktion initialisiert wird - ist die Tatsache, dass ich meine eigene init Logik habe es weg zu werfen?
danke - das hat funktioniert! Fantastisch! – Philipp