2015-10-09 3 views
1

Заголовок говорит все, я пытаюсь сделать работу CrawlSpider для некоторых продуктов в Amazon безрезультатно.CrawlSpider не следующие ссылки

Here - это исходная URL-страница, с которой я хочу получить продукцию.

Глядя на HTML код где следующая ссылка, выглядит следующим образом:

<a title="Next Page" id="pagnNextLink" class="pagnNext" href="/s/ref=sr_pg_2?me=A1COIXT69Y8KR&amp;rh=i%3Amerchant-items&amp;page=2&amp;ie=UTF8&amp;qid=1444414650"> 
    <span id="pagnNextString">Next Page</span> 
    <span class="srSprite pagnNextArrow"></span> 
</a> 

Это текущее выражение р я использую:

s/ref=sr_pg_[0-9]\?[^">]+ 

И используя услугу, как Pythex.org , похоже, что это нормально, я получаю эту часть URL-адреса:

s/ref=sr_pg_2?me=A1COIXT69Y8KR&amp;rh=i%3Amerchant-items&amp;page=2&amp;ie=UTF8&amp;qid=1444414650 

Ее e - код моего гусеничного автомобиля:

import scrapy 
from scrapy.linkextractors import LinkExtractor 
from scrapy.spiders import CrawlSpider, Rule 
from amazon.items import AmazonProduct 


class AmazonCrawlerSpider(CrawlSpider): 
    name = 'amazon_crawler' 
    allowed_domains = ['amazon.com'] 
    #allowed_domains = ['stackoverflow.com'] 
    start_urls = ['http://www.amazon.com/s?ie=UTF8&me=A19COJAJDNQSRP&page=1'] 
    #start_urls = ['http://stackoverflow.com/questions?pagesize=50&sort=newest'] 
    rules = [ 
     Rule(LinkExtractor(allow=r's/ref=sr_pg_[0-9]\?[^">]+'), 
      callback='parse_item', follow=True) 
    ] 
    '''rules = [ 
     Rule(LinkExtractor(allow=r'questions\?page=[0-9]&sort=newest'), 
      callback='parse_item', follow=True) 
    ]''' 


    def parse_item(self, response): 
     products = response.xpath('//div[@class="summary"]/h3') 
     for product in products: 
      item = AmazonProduct() 
      print('found it!') 
      yield item 

По неизвестной причине искатель не следует по ссылкам. Этот код основан на учебнике блога от ребят в RealPython, где они сканируют StackOverflow на вопросы. Собственно, просто раскомментируйте прокомментированный код, чтобы увидеть, что это работает.

Любая идея, что мне здесь не хватает? Благодаря!

UPDATE:

На основании ответа от @Rejected, я перешел к раковине, и я мог видеть, что HTML код отличается, как он указал, чем я мог видеть в браузер.

На самом деле, код Scrapy получает, интересные биты, это:

<a title="Next Page" id="pagnNextLink" class="pagnNext" href="/s?ie=UTF8&me=A19COJAJDNQSRP&page=2"> 
    <span id="pagnNextString">Next Page</span> 
    <span class="srSprite pagnNextArrow"></span> 
</a> 

Я изменил свое выражение рег так это выглядит следующим образом:

s[^">&]+&me=A19COJAJDNQSRP&page=[0-9]$ 

Теперь я получаю ссылки в оболочке:

[Link(url='http://www.amazon.com/s?ie=UTF8&me=A19COJAJDNQSRP&page=1', text='\n \n  \n   \n   \n   \n   \n \n ', fragment='', nofollow=False), Link(url='http://www.amazon.com/s?ie=UTF8&me=A19COJAJDNQSRP&page=2', text='2', fragment='', nofollow=False), Link(url='http://www.amazon.com/s?ie=UTF8&me=A19COJAJDNQSRP&page=3', text='3', fragment='', nofollow=False)] 

А также гусеница получает их правильно!

ответ

2

Scrapy предоставляет разные данные HTML, чем то, что вы видите в своем браузере (даже просто запрашивая «источник просмотра: url»).

Почему я не смог определить со 100% уверенностью. Желаемые три (?) Ссылки будут соответствовать r's/ref=sr_pg_[0-9]' в вашем разрешенном пути.

Поскольку Amazon делает что-то, чтобы определить браузер, вы должны проверить, что вы получаете в своем экземпляре Scrapy. Бросьте его в оболочку, и играть с LinkExtractor себя через следующее:

LinkExtractor(allow=r's/ref=sr_pg_[0-9]').extract_links(response) 
+0

Здравствуйте @Rejected, это возвращает нуль в моем случае. Я получаю '[]' к команде, которую вы отправили в оболочке. Но ты указал мне в правильном направлении, спасибо! Я отредактирую вопрос, чтобы увидеть результаты :) – AlejandroVK

+0

Да, у меня была настройка Useragent, которая, скорее всего, отличалась от вашей.Amazon делает что-то *, что заставляет эти динамически сгенерированные ссылки быть разными для каждого из нас. Желаем удачи. – Rejected

 Смежные вопросы

  • Нет связанных вопросов^_^