Я пытаюсь получить информацию о продукте: http://biancogres.com.br/produtos, и для каждого продукта мне нужно получить информацию об этом на соответствующей странице. Каждый селектор xpath был протестирован в Scrapy Shell, чтобы убедиться, что данные собираются правильно, однако данные вообще не удаляются. Код даже нумеруется правильно.
Вот код:
import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.http.request import Request
from scrapy.selector import Selector
from biancospider.items import BiancospiderItem
class BiancoSpider(CrawlSpider):
name = 'BiancoSpider'
start_urls = ['https://www.biancogres.com.br/produtos/']
allowed_domains = ["biancogres.com.br"]
rules = (
Rule(LinkExtractor(restrict_xpaths="//a[@class='next page-numbers']"), follow=True),
Rule(LinkExtractor(allow=r"/produto/[-a-zA-Z]"), callback='parse_products')
)
def parse_products(self, response):
sel = Selector(response)
products = sel.xpath("//ul/li[contains(@class, 'product')]")
items = []
#productNames = sel.xpath("//ul/li[contains(@class, 'product')]/a/h2/text()").getall()
#productImages = sel.xpath("//ul/li[contains(@class, 'product')]/a/img/@src").getall()
#productURLs = sel.xpath("//ul/li[contains(@class, 'product')]/a/@href").getall()
for product in products:
item = BiancospiderItem()
item['url'] = product.xpath("./a/@href").extract()
item['nome'] = product.xpath("./a/h2/text()").extract()
item['imagem'] = product.xpath("./a/img/@src").extract()
items.append(item)
for i in items:
yield Request(i['url'], callback=self.parse_details)
def parse_details(self, response):
#if (len(response.xpath('//table[@id="variacoes"]//tr'))-1) > 1):
#response.xpath('//table[@id="variacoes"]//tr/td/text()').getall()
sel = Selector(response)
item = BiancospiderItem()
item['tamanho'] = sel.xpath('//table[@id="variacoes"]//tr/td[1]/text()').get()
item['categoria'] = sel.xpath('//table[@id="variacoes"]//tr/td[2]/text()').get()
yield item