Обычное решение этой проблемы - не использовать цикл, который повторяет «все страницы» (потому что вы не знаете, сколько их заранее), а скорее иметь какую-то очередь, гдеочистка одной страницы при желании добавляет последующие страницы в очередь для последующего удаления.
В вашем конкретном примере во время очистки каждой страницы вы можете найти ссылку на «следующую страницу» и, если она есть, добавить URL-адрес следующей страницы в очередь, чтобы он был удален послетекущая страница;как только вы нажмете на страницу без ссылки «следующая страница», очередь опустеет и очистка прекратится.Более сложный пример может включать очистку страницы категории и добавление каждой из ее подкатегорий в качестве последующей страницы в очередь очистки, каждая из которых, в свою очередь, может добавить несколько страниц элементов в очередь и т. Д.
Взятьвзгляните на скребковые фреймворки, такие как Scrapy , которые легко включают в себя этот вид функциональности.Вы также можете найти некоторые другие его функции полезными, например, возможность поиска элементов на странице с помощью селекторов XPath или CSS.
Первый пример на домашней странице Scrapy показывает именно ту функциональность, которую вы пытаетесь реализовать:
class BlogSpider(scrapy.Spider):
name = 'blogspider'
start_urls = ['https://blog.scrapinghub.com']
def parse(self, response):
for title in response.css('.post-header>h2'):
yield {'title': title.css('a ::text').get()}
for next_page in response.css('a.next-posts-link'):
yield response.follow(next_page, self.parse)
Одно важное замечание о Scrapy: в нем не используется Selenium (по крайней мере,не из коробки), а скорее загружает исходный код страницы и анализирует его.Это означает, что он не запускает JavaScript, что может быть проблемой для вас, если ваш сайт создается клиентом.В этом случае вы можете найти решения, сочетающие Scrapy и Selenium (быстрое поиск в Google показывает кучу из них, а также ответы StackOverflow относительно этой проблемы), или вы можете придерживаться своего кода очистки Selenium и реализовать механизм организации очередей самостоятельно, безScrapy.