Итак, вот мой код:
# -*- coding: utf-8 -*-
import scrapy
from ..items import LowesspiderItem
from scrapy.http import Request
import requests
import pandas as pd
class LowesSpider(scrapy.Spider):
name = 'lowes'
def start_requests(self):
start_urls = ['https://www.lowes.com/pd/ZLINE-KITCHEN-BATH-Alpine-Brushed-Nickel-2-Handle-Widespread-Bathroom-Sink-Faucet-with-Drain/1002623090']
for url in start_urls:
yield Request(url,
headers={'Cookie': 'sn=2333;'}, #Preset a location
meta={'dont_merge_cookies': True, #Allows location cookie to get through
'url':url}) #Using to get the product SKU
def parse(self, response):
item = LowesspiderItem()
#get product price
productPrice = response.css('.sc-kjoXOD iNCICL::text').get()
item["productPrice"] = productPrice
yield item
Так что это работало на прошлой неделе, но потом мой паук устарел, потому что я предполагаю, что сайт был изменен, поэтому все мои селекторы сломались. Я пытаюсь найти новый селектор по цене, но мне не повезло.
Сначала я проверил, были ли эти данные созданы динамически (это не так), поэтому я думаю, что использование обычной скрапировки должно быть хорошо, поправьте меня, если я ошибаюсь. Вот скриншот страницы, когда JavaScript отключен
Итак, я проверил источник страницы и просто CTRL + F цена чтобы найти тот селектор, который я бы хотел / нужен.
и вот скриншот в виде текста (если это поможет)
left"><svg data-test="arrow-left" color="interactive" viewBox="0 0 24 24" class="sc-jhAzac boeLhr"><path d="M16.88 5.88L15 4l-8 8 8 8 1.88-1.88L10.773 12z"></path></svg></button><button class="arrowNav right"><svg data-test="arrow-right" color="interactive" viewBox="0 0 24 24" class="sc-jhAzac boeLhr"><path d="M8.88 4L7 5.88 13.107 12 7 18.12 8.88 20l8-8z"></path></svg></button></div></div></div></div></div><div class="sc-iQKALj jeIzsl"><div class="sc-gwVKww kbEspX"><div class="sc-esOvli jhvGZy"><div tabindex="0" class="styles__PriceWrapper-sc-1ezid1y-0 cgqauT"><span class="finalPrice"><div class="sc-kjoXOD iNCICL">$314.96 </div><span class="aPrice large" aria-hidden="true"><sup itemProp="PriceCurrency" content="USD" aria-hidden="true">$</sup><span aria-hidden="true">314</span><sup aria-hidden="true">.<!-- --
и вот ссылка на страницу source: view-source: https://www.lowes.com/pd/ZLINE-KITCHEN-BATH-Alpine-Brushed-Nickel-2-Handle-Widespread-Bathroom-Sink-Faucet-with-Drain/1002623090
Редактировать *
Просматривая веб-сайт, я подумал, что этот селектор будет иметь больше смысла:
productPrice = response.css('.primary-font jumbo strong art-pd-contractPricing::text').get()
потому что:
цена вложена в этот селектор, но я все еще не получаю. Первоначально я думал, что это потому, что это «продажная» цена, поэтому я проверил, была ли она каким-то образом сгенерирована через JavaScript, а это не так.
РЕДАКТИРОВАТЬ: Так что, если кто-нибудь когда-нибудь решит очистить На этом сайте цены на их продукцию будут различаться в зависимости от местоположения. Повар ie, который я установил, был не для того места, которое я выбрал для своего местного магазина.