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. Это не правильно. Так что убери эту строку.