【问题标题】:Scrapy: Get specific part of a URL before redirectionScrapy:在重定向之前获取 URL 的特定部分
【发布时间】:2020-04-17 19:08:39
【问题描述】:

这是我将使用的代码(我正在使用 scrapy)

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

这是我存储所有网址的地方


这是我尝试仅在“=”之后打印所有内容的方式

            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}

这就是为什么我想使用 {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

【问题讨论】:

  • 拥有完整的代码有助于提出一个好的解决方案。不能直接提取start_requests中的产品skus吗?
  • @QuantumLicht 对不起!我马上更新我的程序。

标签: python string scrapy request


【解决方案1】:

你需要像这样使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-26
    • 2023-04-04
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多