Scrapy Spider - Как получить начальный URL и увеличить номер страницы, чтобы сканировать, заканчивая значением страницы? - PullRequest
0 голосов
/ 10 февраля 2019

Я пытаюсь сканировать этот сайт и на этой странице внизу есть число 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(),
    }

1 Ответ

0 голосов
/ 12 февраля 2019

world!

Итак, вы хотите разбираться в наборе чисел, добавлять их в запрос и т. Д. Ну, это должно быть довольно просто.

  1. Быстрый хакерский способдля достижения этого было бы включить диапазон в "star_urls", чтобы пройти через ...
start_urls = ["https://www.example.com/search?format=search&page=%s&query=&sort=popular&type=vector"% page for page in xrange(33400)]

Лучшее решение, в этом случае, было бы использовать Crawl Spider со ссылкойнаборы правил экстрактора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...