Member 14699359 Ответов: 1

Python: использование цикла while для разбора нескольких страниц


Используя URL-адрес внутри функции в нижней части кода, я хочу разобрать все цитаты, которые перечислены на всех страницах. Однако этот код возвращает только кавычки первой страницы и дает URL-адрес на следующую страницу. Я хочу использовать цикл while для анализа цитат со следующей страницы и любых последующих страниц, на которых есть кнопка next.

import requests, bs4, urllib.parse

def process(url):
	page = requests.get(url)
	soup = bs4.BeautifulSoup(page.text, 'html5lib')
	quotes = []
	for quote in soup.select('div[class="quote"] > span[class="text"]'):
		quotes.append(quote.getText())
		next_button = soup.select('li[class="next"] > a')
		if next_button != []:
			next_url = urllib.parse.urljoin(page.url, next_button[0]['href'])
		else:
			next_url = None
	return quotes, next_url

process('http://quotes.toscrape.com/page/1/')


Что я уже пробовал:

Ввод оператора while перед функцией return возвращает тот же код, а ввод оператора while в качестве первой строки после определения функции ничего не возвращает. У меня такое чувство, что это как-то связано с номером страницы, поскольку он поднимается до страницы/10/, но я не могу точно понять, что это такое. http://quotes.toscrape.com/ также возвращает первую страницу.

1 Ответов

Рейтинг:
1

Richard MacCutchan

Видеть 8. составные операторы — документация Python 3.7.6[^]. Вам нужно поместить цикл while в метод process и повторять его каждый раз, когда вы находите новый url-адрес.