Как перейти к следующей странице, во время чистки, если обе страницы имеют одинаковую ссылку? - PullRequest
0 голосов
/ 24 апреля 2018

Я использую скрап для очистки сайта ( ссылка ).Я удалил все данные с этой страницы, используя цикл for и функцию yield как

def parse(self, response):
    self.main_cat=response.xpath('//div[@id="products_content"]/div/text()').extract()
    self.sub_cat=response.xpath('//div[@class="accordion"]/div[@class="title"]/text()').extract()
    Onclick=response.xpath('//div[@class="accordion"]/div[@class="no_title subtitle_chck"]/@onclick').extract()
    for index in range(len(Onclick)):
        sub_sub_cat=response.xpath('//div[@class="accordion"]/div[@class="no_title subtitle_chck"]/label/text()').extract_first()
        removeSearchWord=Onclick[index].replace("submitSearch(","")
        numericData=removeSearchWord.replace(");","").split(',')
        absolute_url="https://portal.orio.com/webapp/wcs/stores/servlet/SearchDisplayView?storeId=11901&catalogId=10051&langId=-150&pageView=detailed&beginIndex=0&sType=SimpleSearch&categoryId="+numericData[0]+"&showResultsPage=true&navCat="+numericData[1]+"_"+numericData[2]+"&urlLangId=-150&removeFiltersOg=ALL&sortField=name&orderBy=7"
        yield Request(absolute_url, callback=self.page)

def page(self,response):
    product_page_url=response.xpath('//td[@class="information"]/a/@href').extract()
    for url in product_page_url:
        yield Request(url, callback=self.product)

После последней функции yield, какая строка кода побуждает меня продолжить очистку всех остальных страниц.Я знаю, что нужны ajax-вызовы, но я не знаю, как их реализовать.Хотели бы вы добавить эту строку кода, потому что я очень старался найти решение, и мой последний вопрос был также об этом, на который очень хорошо ответили, но я не получил этого.

1 Ответ

0 голосов
/ 24 апреля 2018

На самом деле URL следующей страницы прямо здесь.Это <a> узел, который содержит <img> узел с изображением paging_next.png:

. Если вы посмотрите на этот узел, то увидите, что к нему прикреплен скрипт javascript onclick, который меняет URL браузера на URL следующей страницы: enter image description here Вы можете извлечь это с помощью селектора xpath и некоторого регулярного выражения:

url = response.xpath('//a[contains(img/@src,"paging_next")]/@onclick').re("setPage\('(.+?)'")[0]
Out[1]: 'https://portal.orio.com/webapp/wcs/stores/servlet/AjaxCatalogSearchResultView?pageView=detailed&searchTermScope=&orderBy=7&categoryId=146003&beginIndex=25&pageSize=25&maxPrice=&searchType=1002&sortField=name&resultCatEntryType=&searchTerm=&sType=SimpleSearch&filterTerm=&manufacturer=&catalogId=10051&langId=-150&showResultsPage=true&storeId=11901&metaData=YnV5YWJsZToxPE1UQFNQPi1zdXBlcnNlc3Npb246KDEgMyA3KSBBTkQgcHJpY2VfU0VLXzIxOlsqIFRPICpdIEFORCAtcHJpY2VfU0VLXzIxOlsqIFRPIDBdPE1UQFNQPnB1Ymxpc2hlZDox&minPrice='

Это ужасный URL, но он прекрасно работает в scrapy :)

Общая логика разбиения на страницы выглядит кое-чтокак это:

def parse(self, response):
    product_urls = ...
    for url in product_urls:
        yield Request(url, self.parse_product)
    # next page
    next_page = ...  
    if next_page:
        yield Request(next_page, self.parse)
    else:
        self.log('oh no, last page was: {}'.format(response.url), level=logging.INFO)
...