Паук Scrapy не получает доступ к ссылке, я хочу - PullRequest
0 голосов
/ 24 декабря 2018

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

def start_requests(self):

    keyword_callback = {

        'Laptop' : self.parse_item
    }


    txtfile = open('productosABuscar.txt', 'r')

    keywords = txtfile.readlines()

    txtfile.close()

    for keyword in keywords:


        yield Request(self.search_url.format(keyword), callback = keyword_callback[keyword])

Проблема, с которой я здесь сталкиваюсь, заключается в том, что, когда я делаю запрос на доходность, мой паук не «ищет» ключевое слово и не вводит ссылку, поэтому парсер получает только 1ссылка и никаких данных.

Если вам нужна дополнительная информация, обязательно спросите!

Редактировать: Добавление дополнительной информации

class PrototipoAmazonV1Spider(CrawlSpider):

    name = 'spiderProtAmazon'

    #Dominio permitido
    allowed_domain = ['www.amazon.com']

    search_url = 'https://www.amazon.com/s?field-keywords={}'

    rules = {

    #Todos los elementos en la pagina
    Rule(LinkExtractor(allow =(), restrict_xpaths = ('//*[contains(@class, "s-access-detail-page")]') ), 
                            callback = 'parse_item', follow = False)
}


#Previous start request goes here

def parse_item(self, response):

    amz_item = Prototipoamazonv1Item()

    #info de producto
    amz_item['nombreProducto'] = response.xpath('normalize-space(//span[contains(@id, "productTitle")]/text())').extract()

    amz_item['urlProducto'] = response.request.url

    yield amz_item

В настоящее время я использую 1 парсер, покаЯ попробую, если это работает.Моя идея состоит в том, чтобы иметь разные парсеры для каждого ключевого слова.

При запуске этой программы я получаю только данные из 'urlProducto'

'urlProducto' = 'https://www.amazon.com/s?field-keywords=Laptop'

Проблема в том, что мой паук не получает "внутри" каждого продукта для получения данных.Если я использую предыдущий URL (urlProducto) в качестве начального, он работает просто отлично.

1 Ответ

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

Scrapy не анализирует автоматически URL для повторного сканирования, либо вам нужно передать правило экстрактора ссылок или получить следующий URL из источника, а затем передать его другому методу

В вашем случае вам необходимополучите ссылку на этот тег привязки каждого элемента, а затем создайте запрос scrapy для анализа содержимого этой страницы.

def parse_item(self, response):
     for item in response.xpath("//div[contains(@class,'s-result-item')]"):
          url = //search for the detail page url
          yield Scrapy.Request(url,self.parse_detail)

def parse_detail(self, response):
     //here you need to define what you want to get from detail page          
...