Код:
# -*- coding: utf-8 -*-
import scrapy
from ..items import LowesspiderItem
from scrapy.http import Request
class LowesSpider(scrapy.Spider):
name = 'lowes'
def start_requests(self):
start_urls = ['https://www.lowes.com/search?searchTerm=8654RM-42']
for url in start_urls:
yield Request(url, cookies={'sn':'2333'}) #Added cookie to bypass location req
def parse(self, response):
items = response.css('.grid-container')
for product in items:
item = LowesspiderItem()
#get product price
productPrice = product.css('.art-pd-price::text').get()
#get lowesNum
productLowesNum = response.url.split("/")[-1]
#get SKU
productSKU = product.css('.met-product-model::text').get()
item["productLowesNum"] = productLowesNum
item["productSKU"] = productSKU
item["productPrice"] = productPrice
yield item
Вывод:
{'productLowesNum': '1001440644',
'productPrice': None,
'productSKU': '8654RM-42'}
Теперь у меня будет список SKU, поэтому я буду форматировать start_urls
, поэтому
start_urls = ['https://www.lowes.com/search?searchTerm=('some sku)']
Этот URL перенаправит меня на эту ссылку: https://www.lowes.com/pd/ZLINE-KITCHEN-BATH-Ducted-Red-Matte-Wall-Mounted-Range-Hood-Common-42-Inch-Actual-42-in/1001440644
Это обрабатывается scrapy
Теперь проблема
Когда у меня есть:
start_urls = ['https://www.lowes.com/search?searchTerm=8654RM-42']
Я получаю SKU, но не цену.
Однако, когда я использую фактический URL в start_urls
start_urls = ['https://www.lowes.com/pd/ZLINE-KITCHEN-BATH-Ducted-Red-Matte-Wall-Mounted-Range-Hood-Common-42-Inch-Actual-42-in/1001440644']
тогда мой вывод в порядке:
{'productLowesNum': '1001440644',
'productPrice': '1,449.95',
'productSKU': '8654RM-42'}
Итак, я считаю, что использование URL, который должен быть перенаправлен, приводит к тому, что мой скребок по какой-то причине не получает цену, но я все еще получаю SKU.
Вот мое предположение: мне пришлось предварительно установить местоположение повара ie, потому что веб-сайт Lowes не позволяет вам увидеть цену, если пользователь не предоставит им почтовый индекс / местоположение. поэтому я предполагаю, что мне придется переместить или настроить cookies={'sn':'2333'}
, чтобы моя программа работала так, как ожидалось.