Scrapy + Selenium Issue

Я пытаюсь почистить сайт известного британского ритейлера, используя как Selenium, так и Scrapy (см. Код ниже). Я получаю [scrapy.core.scraper] ERROR: Spider error processing и понятия не имею, что еще делать (было у него три часа или около того). Спасибо за вашу поддержку!

import scrapy
from selenium import webdriver
from nl_scrape.items import NlScrapeItem
import time

class ProductSpider(scrapy.Spider):
    name = "product_spider"
    allowed_domains = ['newlook.com']
    start_urls = ['http://www.newlook.com/uk/womens/clothing/c/uk-womens-clothing?comp=NavigationBar%7Cmn%7Cwomens%7Cclothing#/?q=:relevance&page=1&sort=relevance&content=false']

def __init__(self):
    self.driver = webdriver.Safari()
    self.driver.set_window_size(800,600)
    time.sleep(4)

def parse(self, response):
    self.driver.get(response.url)
    time.sleep(4)

    # Collect products
    products = driver.find_elements_by_class_name('plp-item ng-scope')

    # Iterate over products; extract data and append individual features to NlScrapeItem
    for item in products:

        # Pull features
        desc = item.find_element_by_class_name('product-item__name link--nounderline ng-binding').text
        href = item.find_element_by_class_name('plp-carousel__img-link ng-scope').get_attribute('href')

        # Price Symbol removal and integer conversion
        priceString = item.find_element_by_class_name('price ng-binding').text
        priceInt = priceString.split('£')[1]
        price = float(priceInt)

        # Generate a product identifier
        identifier = href.split('/p/')[1].split('?comp')[0]
        identifier = int(identifier)

        # datetime
        dt = date.today()
        dt = dt.isoformat()

        # NlScrapeItem
        item = NlScrapeItem()

        # Append product to NlScrapeItem
        item['id'] = identifier
        item['href'] = href
        item['description'] = desc
        item['price'] = price
        item['firstSighted'] = dt
        item['lastSighted'] = dt
        yield item

    self.driver.close()

2017-08-26 15:48:38 [scrapy.core.scraper] ОШИБКА. Обработка ошибок паука http://www.newlook.com/uk/womens/clothing/c/uk-womens-clothing?comp=NavigationBar%7Cmn%7Cwomens%7Cclothing#/? Q =: релевантность &page=1&sort= релевантность &content=false> (реферер: нет)

Трассировка (последний вызов был последним): файл "/Users/username/Documents/nl_scraping/nl_env/lib/python3.6/site-packages/twisted/internet/defer.py", строка 653, в _runCallbacks current.result = callback(current.result, *args, **kw) Файл "/Users/username/Documents/nl_scraping/nl_scrape/nl_scrape/spiders/product_spider.py", строка 18, в parse products = driver.find_elements_by_class_name('plp-item ng-scope') NameError: имя' драйвер 'не определено

1 ответ

Решение

Таким образом, ваш код имеет две проблемы

def parse(self, response):
    self.driver.get(response.url)
    time.sleep(4)

    # Collect products
    products = driver.find_elements_by_class_name('plp-item ng-scope')

Очень удобно ты поменял self.driver чтобы просто driver, Не работает таким образом. Вы должны добавить в верхней части функции

def parse(self, response):
    driver = self.driver
    driver.get(response.url)
    time.sleep(4)

    # Collect products
    products = driver.find_elements_by_class_name('plp-item ng-scope')

Далее вы использовали self.driver.close() в конце функции. Таким образом, вы закроете браузер, как только обработаете один URL. Это не правильно. Так что убери эту строку.

Другие вопросы по тегам