Очистить одну ссылку с Scrapy - PullRequest
0 голосов
/ 23 декабря 2018

Я очищаю dior.com для своих продуктов.head / script дает мне все необходимые поля, кроме описания продукта.Чтобы очистить описание, мне нужно перейти по ссылке (переменная url в коде ниже).Единственный способ сделать это, с которым я знаком, это использовать BeautifulSoup.Могу ли я разобрать его, используя только Scrapy?Спасибо ребята.

class DiorSpider(CrawlSpider):
    name = 'dior'
    allowed_domains = ['www.dior.com']
    start_urls = ['https://www.dior.com/en_us/']
    rules = (
        Rule(LinkExtractor(allow=(r'^https?://www.dior.com/en_us/men/clothing/new-arrivals.*',)), callback='parse_file')
    )

    def parse_file(self, response):
        script_text = response.xpath("//script[contains(., 'window.initialState')]").extract_first()
        blocks = extract_blocks(script_text)
        for block in blocks:
            sku = re.compile(r'("sku":)"[a-zA-Z0-9_]*"').finditer(block)
            url = re.compile(r'("productLink":{"uri":)"[^"]*').finditer(block)
            for item in zip(sku, url):
                scraped_info = {
                    'sku': item[0].group(0).split(':')[1].replace('"', ''),
                    'url': 'https://www.dior.com' + item[1].group(0).split(':')[2].replace('"', '')
                }

                yield scraped_info

1 Ответ

0 голосов
/ 16 января 2019

Если вам нужно извлечь дополнительную информацию из второго запроса, вместо того, чтобы указывать там данные, вы должны выдать запрос на URL-адрес, который включает в себя информацию, которую вы уже извлекли в атрибуте Request.meta.

from scrapy import Request

# …

    def parse_file(self, response):
        # …
        for block in blocks:
            # …
            for item in zip(sku, url):
                # …
                yield Request(url, callback=self.parse_additional_information, meta={'scraped_info': scraped_info}

    def parse_additional_information(self, response):
        scraped_info = response.meta['scraped_info']
        # extract the additional information, add it to scraped_info
        yield scraped_info
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...