Я написал Scrapy-паук для сбора данных о продуктах с веб-сайта. Паук перемещается по нескольким страницам, чтобы найти конкретный продукт, и извлекает такие детали, как название продукта, цена, цвет, размер и отзывы. Буду очень признателен, если вы просмотрите мой код и поделитесь отзывами по следующим аспектам:
Правильное использование функций платформы Scrapy.
Я написал Scrapy-паук для сбора данных о продуктах с веб-сайта. Паук перемещается по нескольким страницам, чтобы найти конкретный продукт, и извлекает такие детали, как название продукта, цена, цвет, размер и отзывы. Буду очень признателен, если вы просмотрите мой код и поделитесь отзывами по следующим аспектам: [list] [*]Правильное использование функций платформы Scrapy. [*]Соблюдение лучших практик парсинга веб-страниц. [*]Эффективность и читабельность кода. [*]Обработка ошибок и надежность.[*] br />Общая структура и дизайн. [/list] Вот мой код: [code] import scrapy import json
class MarksAndSpencerSpider(scrapy.Spider): name = "marksandspencer" allowed_domains = ["marksandspencer.com"] start_urls = ["https://www.marksandspencer.com"]
def parse(self, response): option = response.css('#country-selector-country option[value="BG"]') if option: value = option.css('::attr(value)').get().lower() bg_url = f"https://www.marksandspencer.com/{value}" self.logger.info(f"BG URL found: {bg_url}") yield response.follow(bg_url, callback=self.parse_bg_page) else: self.logger.warning("BG option not found on the homepage.")
def parse_bg_page(self, response): men_link = response.css('.nav-item.dropdown.order-lg-3 .subcategory a::attr(href)').get() if men_link: self.logger.info(f"Men's link found: {men_link}") yield response.follow(men_link, callback=self.parse_mens_page) else: self.logger.warning("Men's section link not found on the BG page.")
def parse_mens_page(self, response): casual_shirts_link = response.xpath('//a[contains(text(), "Casual shirts")]/@href').get() if casual_shirts_link: self.logger.info(f"Casual shirts link found: {casual_shirts_link}") yield response.follow(casual_shirts_link, callback=self.parse_casual_shirts) else: self.logger.warning("Casual shirts link not found on the Men's page.")
def parse_casual_shirts(self, response): product_link = response.css('div.pdp-link a:contains("Easy Iron Geometric Print Shirt")::attr(href)').get() if product_link: self.logger.info(f"Product link found: {product_link}") yield response.follow(product_link, callback=self.parse_product_page) else: self.logger.warning("Product link not found in the Casual Shirts section.")
color = '' for button in selected_colour: color = button.attrib.get('data-defaultcolor', '')
sizes = [] if size: select_element = scrapy.Selector(text=size, type="html") option_tags = select_element.css('option') for option in option_tags: option_text = option.xpath('normalize-space(text())').get() if option_text != "Select Size": sizes.append(option_text)
product_data = { "name": product_name or '', "price": price or '', "colour": color, "size": sizes, "reviews_count": int(review_count), "reviews_score": float(avg_rating), }
yield product_data
[/code] Я стремлюсь учиться и совершенствоваться, поэтому любые ваши предложения и советы будут очень полезны. Заранее благодарим вас за ваше время и опыт!
Прочитав несколько часов решений, я так и не смог найти ответ на свою проблему.
Я пытаюсь очистить веб-страницу супермаркета, думаю, ошибка в функции синтаксического анализа. Пожалуйста, если кто-то может мне помочь.
import scrapy
from bs4 import...
I know this is a common question and I've read several answers but they're all very subjective and I'm trying to get an answer on best common practice (i.e what to use a majority of the time).
My background is in C# .net and I'm re-writing an...
В настоящее время я работаю над улучшением глобального веб-приложения и сталкиваюсь с некоторыми проблемами, связанными с аутентификацией и управлением API, о которых я надеюсь получить некоторое представление. Вот обзор архитектуры приложения:...
У меня есть специальное устройство, которое можно подключить к различным SoC с помощью двух SPI и пары проводов GPIO (один из них функционирует как провод запроса прерывания). Было бы приемлемо ожидать, что оба SPI будут подключены к одной и той же...
Structuring a .NET Core 9 Blazor API Architecture for Microservices and Secure Account Management Best Practices
Hello everyone,
I’m working on a content management application (wiki-style) developed in .NET Core 9 , designed to be...