Заголовок говорит все, я пытаюсь сделать работу CrawlSpider для некоторых продуктов в Amazon безрезультатно.CrawlSpider не следующие ссылки
Here - это исходная URL-страница, с которой я хочу получить продукцию.
Глядя на HTML код где следующая ссылка, выглядит следующим образом:
<a title="Next Page" id="pagnNextLink" class="pagnNext" href="/s/ref=sr_pg_2?me=A1COIXT69Y8KR&rh=i%3Amerchant-items&page=2&ie=UTF8&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&rh=i%3Amerchant-items&page=2&ie=UTF8&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)]
А также гусеница получает их правильно!
Здравствуйте @Rejected, это возвращает нуль в моем случае. Я получаю '[]' к команде, которую вы отправили в оболочке. Но ты указал мне в правильном направлении, спасибо! Я отредактирую вопрос, чтобы увидеть результаты :) – AlejandroVK
Да, у меня была настройка Useragent, которая, скорее всего, отличалась от вашей.Amazon делает что-то *, что заставляет эти динамически сгенерированные ссылки быть разными для каждого из нас. Желаем удачи. – Rejected