У меня есть базовый скрипт scrapy, который делает следующее:
- Посещение веб-сайта
Использование правила для получения всех страниц:
rules = ( Rule(LinkExtractor(allow=(), restrict_xpaths=('//*[@id="pagination_top"]/a',)), callback="parse_page", follow= True), )
Внутри каждой страницы получение всех ссылок на prod страницы:
def parse_page(self, response): for href in response.css("#prod_category > ul > li > a::attr('href')"): url = response.urljoin(href.extract()) yield scrapy.Request(url, callback=self.parse_dir_contents)
и посещение каждой из страниц продукта, чтобы получить подробную информацию о продукте. Затем я получаю дополнительную информацию по другой ссылке
def parse_dir_contents(self, response): # select xpath here print '________________________BEGIN PRODUCT________________________' item = detailedItem() item['title'] = sites.xpath('//*[@id="product-name"]/text()').extract() # get url_2 from this page request = scrapy.Request(url_2, callback=self.parse_detailed_contents) request.meta['item'] = item yield request
- #P5# <блочная цитата> #P6# блочная цитата>
def parse_detailed_contents(self, response): item = response.meta['item'] sel = Selector(response) sites = sel.xpath('//*[@id="prod-details"]') print '________________________GETTING DETAILS________________________' item['prod_details'] = sites.xpath('//*[@id="prod-details"]/div/text()').extract() return item
Проблема в том, что мой скрипт возвращает item['prod_details'] для первой ссылки, но не возвращает никаких элементов для последующих ссылок.
Это потому, что url_2 передается одинаково для всех продуктов?
Может кто-нибудь, пожалуйста, помогите. Заранее большое спасибо!