#python #web-scraping #scrapy
#python #очистка веб-страниц #scrapy
Вопрос:
Привет, я хотел бы очистить 2 разных домена в моем скрипте, я попробовал свое выражение if, но мне кажется, что оно не работает, любая идея, пожалуйста?
Вот мой код
class SalesitemSpiderSpider(scrapy.Spider):
name = 'salesitem_spider'
allowed_domains = ['www2.hm.com']
start_urls = [
'https://www2.hm.com/en_us/sale/shopbyproductladies/view-all.html?sort=stockamp;image-size=smallamp;image=stillLifeamp;offset=0amp;page-size=9999',
'https://www.forever21.com/us/shop/catalog/category/f21/sale',
]
def parse_start_url(response):
if (response.url == 'https://www2.hm.com/en_us/sale/shopbyproductladies/view-all.html?sort=stockamp;image-size=smallamp;image=stillLifeamp;offset=0amp;page-size=9999'):
parse_1(response)
if (response.url == 'https://www.forever21.com/us/shop/catalog/category/f21/sale'):
parse_2(response)
def parse_1(self, response):
for product_item in response.css('li.product-item'):
item = {
'title': product_item.css('h3.item-heading a.link::text').extract_first(),
'regular-price': product_item.css('strong.item-price span.price.regular::text').extract_first(),
'sale-price': product_item.css('strong.item-price span.price.sale::text').extract_first(),
'photo-url': product_item.css('.image-container img::attr(data-src)').extract_first(),
'description-url': "https://www2.hm.com/" product_item.css('h3.item-heading a::attr(href)').extract_first(),
}
yield item
def parse_2(self, response):
#Some code getting item on domain 2
Пожалуйста, помогите, спасибо
Ответ №1:
Проверьте свою allowed_domains
переменную. Вам следует добавить новый домен, лайк ['www2.hm.com', 'forever21.com']
или удалить его вообще. Также у вас нет parse
функции.
Я могу предположить, что нужно удалить ваш start_urls
с if
помощью и использовать start_requests
вместо этого. Ваш код будет более читаемым.
import scrapy
class SalesitemSpiderSpider(scrapy.Spider):
name = 'salesitem_spider'
allowed_domains = ['www2.hm.com', 'forever21.com']
def start_requests(self):
urls = (
(self.parse_1, 'https://www2.hm.com/en_us/sale/shopbyproductladies/view-all.html?sort=stockamp;image-size=smallamp;image=stillLifeamp;offset=0amp;page-size=9999'),
(self.parse_2, 'https://www.forever21.com/us/shop/catalog/category/f21/sale'),
)
for cb, url in urls:
yield scrapy.Request(url, callback=cb)
def parse_1(self, response):
print 111111111
def parse_2(self, response):
print 2222222222
Комментарии:
1. Спасибо @vezunchik, я попробовал ваш данный код, но у меня ошибка «Ошибка при получении запросов на запуск» и «Ошибка атрибута: объект ‘SalesitemSpiderSpider’ не имеет атрибута ‘parse_1′»
2. Вы скопировали свою
parse_1
иparse_2
функцию в класс? Я обновил опечатку в URL-адресах, теперь проверьте код.