我需要从一个网站(https://www.hiperlibertad.com.ar/),有多个分支/商店提取所有的产品。
我现在的主要问题是,我需要找到一种方法来调整代码,以便能够提取网站上的所有类别>子类别。
这些可以从主页的主菜单中看到:
Main menu with the categories > subcategories
我知道该网站使用JavaScript动态生成内容。我试图使用剧作家与Scrapy得到这个上市,但我不能。
在此任务中,我被指示不要使用Selenium。
任何帮助如何处理这个问题是赞赏!
我已经在Scrapy中有代码可以从特定URL(类别/子类别)中提取产品。代码工作正常。我给予它的网址,它提取所有的产品从所有的网页,我有。:
import scrapy
import json
class HiperSpider(scrapy.Spider):
name = "hiper"
base_url = 'https://www.hiperlibertad.com.ar/api/catalog_system/pub/products/search/hogar/muebles-de-interior'
sc_value = '1' # Default value is 1
def __init__(self, sc_value='1', *args, **kwargs):
super(HiperSpider, self).__init__(*args, **kwargs)
self.sc_value = sc_value
def start_requests(self):
url = f'{self.base_url}?O=OrderByTopSaleDESC&_from=0&_to=23&sc={self.sc_value}'
yield scrapy.Request(url, self.parse)
def parse(self, response):
data = json.loads(response.text)
products = data
for product in products:
name = product['productName']
regular_price = product['items'][0]['sellers'][0]['commertialOffer']['Price']
promotional_price = product['items'][0]['sellers'][0]['commertialOffer']['ListPrice']
category = product['categories'][0]
sku = product['productId']
yield {
'name': name,
'regular_price': regular_price,
'promotional_price': promotional_price,
'category': category,
'sku': sku
}
# Check if there are more products on the current page
has_more_products = len(data) > 0
# Extract current page range from the URL
current_page_from = int(response.url.split('_from=')[1].split('&')[0])
current_page_to = int(response.url.split('_to=')[1].split('&')[0])
# Calculate the next page range
next_page_from = current_page_from + 24
next_page_to = current_page_to + 24
if has_more_products:
# Construct URL for the next page
next_page = f"{self.base_url}?O=OrderByTopSaleDESC&_from={next_page_from}&_to={next_page_to}&sc={self.sc_value}"
yield scrapy.Request(next_page, callback=self.parse)
1条答案
按热度按时间44u64gxh1#
你可以改变这里获取所有产品的方法,只使用scrapy,通过使用站点Map而不是通过类别和子类别。
网站Map:https://www.hiperlibertad.com.ar/sitemap.xml
从那里,您可以从产品页面本身获取数据,或者从页面获取SKU并使用获取的SKU ID调用API。
API页面:https://www.hiperlibertad.com.ar/api/catalog_system/pub/products/search/?fq=productId:(请替换为有效SKU)
使用PlayWright的开销与selenium类似,而且相对来说非常慢。