Scrapy доступ к внутренним URL - PullRequest
       9

Scrapy доступ к внутренним URL

0 голосов
/ 06 декабря 2018

У меня есть URL-адрес в массиве start_urls, как показано ниже:

start_urls = [
        'https://www.ebay.com/sch/tp_peacesports/m.html?_nkw=&_armrs=1&_ipg=&_from='
    ]

    def parse(self, response):
        shop_title = self.getShopTitle(response)
        sell_count = self.getSellCount(response)
        self.shopParser(response, shop_title, sell_count)


    def shopParser(self, response, shop_title, sell_count):
        items = EbayItem()
        items['shop_title'] = shop_title
        items['sell_count'] = sell_count
        if sell_count > 0:
            item_links = response.xpath('//ul[@id="ListViewInner"]/li/h3/a/@href').extract()
            for link in item_links:
                items['item_price'] = response.xpath('//span[@itemprop="price"]/text()').extract_first()

        yield items

теперь в shopParser () внутри цикла. У меня другая ссылка, и мне нужно иметь ответ , отличный от исходногоответ от start_urls, как мне этого добиться?

1 Ответ

0 голосов
/ 06 декабря 2018

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

def parse(self, response):
    shop_title = response.meta.get('shop_title', self.getShopTitle(response))
    sell_count = response.meta.get('sell_count', self.getSellCount(response))

    # here you logic with item parsing
    if sell_count > 0:
        item_links = response.xpath('//ul[@id="ListViewInner"]/li/h3/a/@href').extract()
        # yield requests to next pages
        for link in item_links:
            yield scrapy.Request(response.urljoin(link), meta={'shop_title': shop_title, 'sell_count': sell_count})

Эти новые запросы также будут анализироваться функцией parse.Или вы можете установить другой обратный вызов, если это необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...