Вы можете извлечь количество страниц из нумерации страниц, а затем выполнить цикл для сбора всех.
Упорядоченный список нумерации страниц:
![enter image description here](https://i.stack.imgur.com/3Het8.png)
Если вы посмотрите выше, вы увидите, что есть элемент упорядоченного списка нумерации страниц (ol
) с классом 'pagination btn-bar';В этом случае я могу использовать селектор класса css , чтобы изолировать этот элемент путем передачи одного значения класса из пары с несколькими значениями, т.е. .pagination
.Это дает мне родительский элемент ol
.Затем я добавляю в потомок комбинатор и a
селектор типа , что означает, что я хочу выбрать все дочерние теги a
в этом родительском классе ol
.soup.select('.pagination a')
возвращает мне список всех этих детей - нумерация страниц, которую вы видите внизу слева на изображении 1,2,3, .....->.Общее количество страниц задается предпоследним тегом a
, т. Е. 7;Таким образом, я могу использовать индексирование списка, чтобы извлечь этот элемент из списка, получить доступ к свойству .text
и преобразовать в int
, чтобы я мог использовать цикл по всем страницам.
int(soup.select('.pagination a')[-2].text)
Py:
import requests
from bs4 import BeautifulSoup as bs
links = []
def get_links(r, links, first_link = False):
soup = bs(r.content,'lxml')
if first_link:
return int(soup.select('.pagination a')[-2].text)
links+=[i['href'] if i['href'].startswith('http') else 'https://www.maxpreps.com' + i['href'] for i in soup.select('[href*=high-schools]')]
with requests.Session() as s:
r = s.get('https://www.maxpreps.com/rankings/football/1/state/florida.htm')
pages = get_links(r, links, True)
for page in range(2, pages+1):
get_links(s.get(f'https://www.maxpreps.com/rankings/football/{page}/state/florida.htm'), links)