Я пытаюсь сканировать этот сайт и на этой странице внизу есть число 33 400, которое вы можете получить через response.css ('span.pagination__pages :: text'). Extract_first ()Я хочу сначала преобразовать это значение в 33400, а затем в start_urls в моем коде, которое я хочу увеличить со страницы = 1 до страницы = 33400, и это значение будет извлечено из диапазона CSS, указанного выше.В настоящее время мой код ниже ищет ссылку на следующую страницу и получает этот href, но у меня возникают проблемы с этим, когда он проходит через все 33 400 страниц, он получает только около 100 шагов и останавливается.Я подумал, что это может быть лучшее решение, но мне нужна помощь, как написать это в моем коде.
import scrapy
class QuotesSpider(scrapy.Spider):
name = "exampleurls"
allowed_domains = ["example.com"]
start_urls = ["https://www.example.com/search?format=search&page=1&query=&sort=popular&type=vector"]
def parse(self, response):
# self.log('I just visited: ' + response.url)
# for quote in response.css('div.showcase__content'):
# item = {
# 'url': quote.css('a::attr(href)').extract_first(),
# }
# yield item
urls = response.css('div.showcase__content > a::attr(href)').extract()
for url in urls:
url = response.urljoin(url)
yield scrapy.Request(url=url, callback=self.parse_details)
# follow pagination link
next_page_url = response.xpath("//a[contains(concat(' ', @class, ' '), ' pagination__next ')]/@href").extract_first()
if next_page_url:
next_page_url = response.urljoin(next_page_url)
yield scrapy.Request(url=next_page_url, callback=self.parse)
def parse_details(self, response):
yield {
'name': response.css('h1.mg-none::text').extract_first(),
'creation-date': response.xpath('//@data-creation-date').extract_first(),
'downloads': response.xpath('//@data-downloads').extract_first(),
'image-small': response.xpath('//@data-image-small').extract_first(),
'main-keyword': response.xpath('//@data-main-keywords-label').extract_first(),
'url': response.xpath("//meta[@property='og:url']/@content").extract(),
'is-premium': response.xpath('//@data-premium').extract_first(),
'is-selection': response.xpath('//@data-selection').extract_first(),
}