Очистка всех ссылок HREF с помощью нумерации страниц - PullRequest
0 голосов
/ 30 сентября 2019

Я должен выбрать каждое состояние из https://www.maxpreps.com/search/states_by_sport.aspx?gendersport=boys,football&season=fall, а затем щелкнуть по рейтингу команды, и после этого я должен получить ссылки на href каждой команды в рейтинге.

Я выполнил до командыТеперь я хочу получить ссылки на каждую ранжированную команду со всех страниц в панели разбивки на страницы. Сейчас я получаю ссылки на все команды, доступные только на первой странице, я не знаю, как перейти на следующую страницу. (нижеэто код)

запросы на импорт от bs4 импорт BeautifulSoup с urllib.request импорт urlopen импорт re

site = "https://www.maxpreps.com"

url = запросы.get (" https://www.maxpreps.com/search/states_by_sport.aspx?gendersport=boys,football&season=fall") soup = BeautifulSoup (url.content, "html.parser") states = soup.findAll ('div', {'class': 'states'}) для каждого состояния в состояниях: all_states = each_state.find_all ('a', href = True) для a в all_states: домен = site + a ['href'] #domain состоит из ссылок состояний для r в домене: page_link = domain page_response = запросы.get (page_link) суп = BeautifulSoup (page_response.content, "html.parser") для ссылки в soup.findAll('a', attrs = {'href': re.compile ("Rankings")}): Rankings_link = site + link.get ('href') #print (Rankings_link)

for ert in rankings_link:
    team_link = rankings_link
    page_response1 = requests.get(team_link)
    soup = BeautifulSoup(page_response1.content, "html.parser")

    My_table = soup.find('table',{'class':'mx-grid sortable rankings-grid'})
    links = My_table.findAll('a')
print(links)

Эверетт , Метуен ,

1 Ответ

0 голосов
/ 30 сентября 2019

Вы можете просто перебирать страницы в параметрах запроса.

import requests 
from bs4 import BeautifulSoup

site = "https://www.maxpreps.com"

session = requests.Session()
response = session.get("https://www.maxpreps.com/search/states_by_sport.aspx?gendersport=boys,football&season=fall") 
soup = BeautifulSoup(response.content, "html.parser") 
all_states = soup.find('div', {'class': 'states'}) 

states_list = []
for each in all_states.find_all('a'):
    states_list.append(each['href'].split('=')[-1])
states_list = states_list[:-1]    


team_links = []
url = 'https://www.maxpreps.com/m/rankings/list.aspx'
for state in states_list:
    break_loop = False
    page=1
    while break_loop == False:
        print ('%s: Page %s' %(state, page))
        payload = {
                'page': str(page),
                'ssid': '8d610ab9-220b-465b-9cf0-9f417bce6c65',
                'state': state
                }

        response = requests.get(url, params=payload)
        soup = BeautifulSoup(response.text, "html.parser") 
        table = soup.find('table')
        if table == None:
            break_loop = True

        else:
            page+=1
            links = table.find_all('a')
            for link in links:
                team_links.append('https://www.maxpreps.com' + link['href'])

Вывод:

print (team_links[:10])
['https://www.maxpreps.com/m/high-schools/central-red-devils-(phenix-city,al)/football/default.htm', 'https://www.maxpreps.com/m/high-schools/thompson-warriors-(alabaster,al)/football/default.htm', 'https://www.maxpreps.com/m/high-schools/hoover-buccaneers-(hoover,al)/football/default.htm', 'https://www.maxpreps.com/m/high-schools/oxford-yellow-jackets-(oxford,al)/football/default.htm', 'https://www.maxpreps.com/m/high-schools/mountain-brook-spartans-(birmingham,al)/football/default.htm', 'https://www.maxpreps.com/m/high-schools/hewitt-trussville-huskies-(trussville,al)/football/default.htm', 'https://www.maxpreps.com/m/high-schools/mcgill-toolen-yellowjackets-(mobile,al)/football/default.htm', 'https://www.maxpreps.com/m/high-schools/lee-generals-(montgomery,al)/football/default.htm', 'https://www.maxpreps.com/m/high-schools/pinson-valley-indians-(pinson,al)/football/default.htm', 'https://www.maxpreps.com/m/high-schools/vestavia-hills-rebels-(vestavia-hills,al)/football/default.htm']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...