нумерация страниц с питоном и красивым супом - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь выбрать ссылки href всех школ на всех страницах.Я сделал немного кода на Python, и он работал для первой страницы.

Я хочу, чтобы скрипт печатал ссылки всех школ со всех страниц.в настоящее время печатается первая страница

import requests,re
from bs4 import BeautifulSoup
from urllib.request import urlopen

main_url = urlopen('https://www.maxpreps.com/rankings/football/1/state/florida.htm')
soup = BeautifulSoup(main_url,'lxml')
pages = soup.find('ol',{'class':'pagination btn-bar'})
#
for page in pages:
    url = requests.get('https://www.maxpreps.com/rankings/football/{}/state/florida.htm'.format(page)).text
    sou = BeautifulSoup(url,'lxml')
    My_table = soup.find('table',{'class':'mx-grid sortable rankings-grid'})
    links = My_table.findAll('a')
    print(links)

1 Ответ

1 голос
/ 20 сентября 2019

Вы можете извлечь количество страниц из нумерации страниц, а затем выполнить цикл для сбора всех.

Упорядоченный список нумерации страниц:

enter image description here

Если вы посмотрите выше, вы увидите, что есть элемент упорядоченного списка нумерации страниц (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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...