Scrapy - анализ информации о продукте && обзоры продуктов - PullRequest
1 голос

Я создаю сканер, чтобы получать информацию о продукте и обзоры продуктов, а также экспортировать их в CSV-файлы из указанной категории c. Например, мне нужно получить всю информацию из категории штанов, поэтому мое сканирование начинается именно там.

Я могу легко извлечь ссылку на каждый продукт оттуда. Но тогда мне нужен сканер, чтобы открыть эту ссылку и получить всю необходимую информацию для каждого продукта. Мне также нужно, чтобы получить все отзывы о продукте, но проблема в том, что обзоры тоже имеют нумерацию страниц.

Я начинаю отсюда:

класс SheinSpider (scrapy.Spider):

name = "shein_spider"
start_urls = [
    "https://www.shein.com/Men-Pants-c-1978.html?icn=men-pants&ici=www_tab02navbar02menu01dir06&scici=navbar_3~~tab02navbar02menu01dir06~~2_1_6~~real_1978~~~~0~~0"
]

def parse(self, response):
    for item in response.css('.js-good'):
        yield {"product_url": item.css('.category-good-name a::attr(href)').get()}

Я знаю, как анализировать информацию из списка каталога, но не знаю, как заставить сканер переходить по каждой ссылке в списке.

1 Ответ

0 голосов
/ 11 марта 2020

Способ перехода по ссылкам в scrapy - просто получить объект scrapy.Request с URL-адресом и анализом, который вы хотите использовать для обработки этой ссылки. Из учебника по документации Scrapy «Механизм Scrapy по следующим ссылкам: когда вы выдаете запрос в методе обратного вызова, Scrapy запланирует отправку этого запроса и зарегистрирует метод обратного вызова, который будет выполнен после завершения этого запроса».

Я бы порекомендовал проверить учебник в документации по Scrapy здесь , особенно в разделе "По ссылкам".

В вашем конкретном примере c это код, который заставит его работать. Помните, что URL-адрес вашего продукта должен быть полным, и, возможно, адрес, по которому вы его получаете, имеет только относительный URL-адрес.

name = "shein_spider"
start_urls = [
    "https://www.shein.com/Men-Pants-c-1978.html?icn=men-pants&ici=www_tab02navbar02menu01dir06&scici=navbar_3~~tab02navbar02menu01dir06~~2_1_6~~real_1978~~~~0~~0"
]

def parse(self, response):
    for item in response.css('.js-good'):
        product_url = item.css('.category-good-name a::attr(href)').get()
        yield scrapy.Request(product_url, callback=self.parse_item)

def parse_item(self, response):
    # Do what you want to do to process the product details page #

...