Scrapy: получите указанную c часть URL перед перенаправлением - PullRequest
0 голосов
/ 17 апреля 2020

Вот код, с которым я буду работать (я использую скрапу)

def start_requests(self):
        start_urls = ['https://www.lowes.com/search?searchTerm=8654RM-42']

Здесь я храню все свои URL


Вот как Я пытаюсь распечатать все после '='

            productSKU = response.url.split("=")[-1]
            item["productSKU"] = productSKU

Вот вывод:

{'productPrice': '1,449.95',
 'productSKU': 'https://www.lowes.com/pd/ZLINE-KITCHEN-BATH-Ducted-Red-Matte-Wall-Mounted-Range-Hood-Common-42-Inch-Actual-42-in/1001440644'}

Итак, вот проблема:

URL-адреса, которые я ввожу, будут в конечном итоге заполнены

https://www.lowes.com/search?searchTerm = {something}

, и поэтому я хотел бы использовать {что-то}, чтобы убедиться, что у меня будет каждый элемент, который я попытался очистить на CSV (для сортировки и сопоставления).

Используемый мной URL перенаправляет мне этот URL:

(вход) https://www.lowes.com/search?searchTerm=8654RM-42

->

(Перенаправление) https://www.lowes.com/pd/ZLINE-KITCHEN-BATH-Ducted-Red-Matte-Wall-Mounted-Range-Hood-Common-42-Inch-Actual-42-in/1001440644

Итак, мой вывод для productSKU - это полный URL перенаправления, а не все, что находится после знака «=». Я хотел бы получить 8654RM-42.

А вот и вся моя программа

# -*- 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()
        productSKU = response.url.split("=")[-1]


        item["productSKU"] = productSKU
        item["productPrice"] = productPrice


        yield item

1 Ответ

3 голосов
/ 21 апреля 2020

вам нужно использовать meta для передачи во входном URL, как это

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'},meta={'url':url)
def parse(self,response):
    url = response.meta['url'] #your input url
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...