2017-02-02 2 views
0

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

Например, https://www.amazon.com/best-sellers-books-Amazon/zgbs/books/ref=zg_bs_unv_b_1_173508_2 (< - это список книг), например, есть категории слева (Arts & Фотография, Звуковые аудиокниги, ....) под каждой категорией, например, под Arts & Категория фотографии есть больше категорий (Архитектура, Бизнес Искусство, ...), а затем под Архитектурой есть больше категорий (Здания, Критика, ...) под Зданиями (Ориентиры & Памятники, Религиозные Здания, ..) и как только Вы добираетесь до Ориентиров & Памятники thats корневой узел и это имеет 100 страниц списков. Итак, что я хочу сделать, я хочу пойти в Arts & Фотография и продолжайте работать под каждой подкатегорией, пока я не ударил корневой узел и не очистил все списки для каждой страницы, а затем перейдите к узлам-близнецам, как только я закончу каждый узел для брака. Я хочу откат и пойдите в Религиозные Здания, закончите, что откат перейдите к следующей категории под Зданиями, заканчивая каждую категорию в Откате Отставок зданий в Критике ... и так далее. Так что очень много царапин в каждой книге под каждой подкатегорией, указанной в amazon.

прямо сейчас у меня есть эта логика, чтобы делать каждую страницу в категории, заданной в start_urls .; (примечание: я не могу перечислить каждую категорию в списке начальных URL-адресов, так как их так много). Ниже код работает и сбрасывает каждую страницу, указанную в одной категории, которая указана в начальном URL-адресе. Что мне нужно, это идея о том, как сделать так, чтобы он автоматически переходит к следующей подкатегории и сделать то же самое, как только это закончить возвращение и перейти к следующей подкатегории .... и так далее

name = "my_crawler" 
allowed_domains = ["somewebsite.com"] 
start_urls = [ 
    "someurl.....", 
] 

rules = (Rule(LinkExtractor(allow=(), restrict_xpaths=('//a[@class="pagnNext"]',)), callback="parse_page", follow= True),) 


def parse_page(self, response): 
    asds = Selector(response).xpath('//span[contains(@class,"price")]/text()').extract() 
    for asd in asds: 
     item['fsd'] = asd.xpath('@title').extract()[0] 
     yield item 

кто может помочь ?? Благодаря

+0

Вероятно, вы не получаете никаких ответов, потому что это немного расплывчато. Я не могу запустить ваш код, так как вы сделали его общим. Поэтому я не могу сказать, что работает и не работает. Вы не представили пример ввода или вывода - поэтому я не знаю, что ваш код делает правильно или неправильно. Есть ли способ, которым вы могли бы быть более конкретным? – RobertB

+0

Это работает прямо сейчас, но это только получение всех страниц для категории, указанной в начальном URL-адресе. Мой вопрос в том, как перейти к следующей категории, как только я закончу все страницы в категории, в которой я нахожусь. Я очень новичок в этой платформе -stackoverflow, выход слишком велик, должен ли я сделать небольшой пример, а затем положить ввод, вывод? –

+0

Извините за длину моего поста, я постарался быть как можно более объяснительным. Я был бы признателен за любые предложения =) –

ответ

0

В легком пути, вы могли бы обеспечить URLs каждую категорию, которые вы хотите, чтобы скоблить, и ввести его в start_urls

START_URL = [ «http://url_category1.html,http://url_category2.html,http://url_category3.html»]

это один путь.

или вы можете сделать свой собственный запрос с использованием HREF в каждой категории,

С уважением

0

Один из способов сделать это, чтобы иметь два метода синтаксического анализа: один для извлечения ссылки на приведенную ниже, и другой, чтобы очистить содержимое на этих страницах:

from scrapy import Request 

# start_urls = ... 

def parse(self, response): 
    # use XPath or whatever to get the links to follow 
    for link in links_to_follow: 
    yield Request(link, callback=self.parse_next) 

def parse_next(self, response): 
    # actually do the parsing 

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

Вы можете узнать больше об этом here.

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