Как вытащить ссылки из тега «а» - PullRequest
0 голосов
/ 25 сентября 2019

Я попытался несколькими способами получить ссылки со следующей веб-страницы, но не могу найти нужные ссылки.С этой веб-страницы (https://www.espn.com/collegefootball/scoreboard//year/2019/seasontype/2/week/1) я пытаюсь извлечь все ссылки для кнопки "gamecast". Вот пример первой, которую я хотел бы получить, это: https://www.espn.com/college-football/game//gameId/401110723

Когда я пытаюсь просто перетащить все ссылки на странице, мне даже кажется, что я не получаю нужные ссылки вообще, поэтому я запутался, когда я ошибаюсьздесь. Несколько попыток, которые я предпринял ниже, которые, кажется, не вытягивают то, что я хочу. Первый метод, который я попробовал ниже.

import requests
import csv
from bs4 import BeautifulSoup
import pandas as pd

page = requests.get('https://www.espn.com/college-football/scoreboard/_/year/2019/seasontype/2/week/1')
soup = BeautifulSoup(page.text, 'html.parser')
# game_id = soup.find(name_='&lpos=college-football:scoreboard:gamecast')
game_id = soup.find('a',class_='button-alt sm')

Вот второй метод, который я попробовал. Любая помощь очень ценится.

for a in soup.find_all('a'):
if 'college-football' in a['href']:
print(link['href'])

Редактировать: в качестве пояснения я пытаюсь получить все ссылки, содержащие идентификатор игры, как в примере ссылки.

1 Ответ

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

Кнопка со ссылкой, которую вы пытаетесь получить, загружается с помощью JavaScript.Модуль запросов не загружает JavaScript в HTML-код, который он просматривает.Таким образом, вы не можете нажать кнопку напрямую, чтобы найти нужные ссылки (без симулятора веб-страниц, такого как Selenium).Однако я нашел данные json в html, который содержит данные табло, в которых находится ссылка. Если вы также хотите получить дополнительную информацию (время и т. Д.) С этой страницы, я настоятельно рекомендую просмотреть данные json впеременная json_scoreboard в коде.

код

import requests, re, json
from bs4 import BeautifulSoup

r = requests.get(r'https://www.espn.com/college-football/scoreboard/_/year/2019/seasontype/2/week/1')
soup = BeautifulSoup(r.text, 'html.parser')

scripts_head = soup.find('head').find_all('script')
all_links = {}
for script in scripts_head:
    if 'window.espn.scoreboardData' in script.text:
        json_scoreboard = json.loads(re.search(r'({.*?});', script.text).group(1))
        for event in json_scoreboard['events']:
            name = event['name']
            for link in event['links']:
                if link['text'] == 'Gamecast':
                    gamecast = link['href']
            all_links[name] = gamecast

print(all_links)

выход

{'Miami Hurricanes at Florida Gators': 'http://www.espn.com/college-football/game/_/gameId/401110723', 'Georgia Tech Yellow Jackets at Clemson Tigers': 'http://www.espn.com/college-football/game/_/gameId/401111653', 'Texas State Bobcats at Texas A&M Aggies': 'http://www.espn.com/college-football/game/_/gameId/401110731', 'Utah Utes at BYU Cougars': 'http://www.espn.com/college-football/game/_/gameId/401114223', 'Florida A&M Rattlers at UCF Knights': 'http://www.espn.com/college-football/game/_/gameId/401117853', 'Tulsa Golden Hurricane at Michigan State Spartans': 'http://www.espn.com/college-football/game/_/gameId/401112212', 'Wisconsin Badgers at South Florida Bulls': 'http://www.espn.com/college-football/game/_/gameId/401117856', 'Duke Blue Devils at Alabama Crimson Tide': 'http://www.espn.com/college-football/game/_/gameId/401110720', 'Georgia Bulldogs at Vanderbilt Commodores': 'http://www.espn.com/college-football/game/_/gameId/401110732', 'Florida Atlantic Owls at Ohio State Buckeyes': 'http://www.espn.com/college-football/game/_/gameId/401112251', 'Georgia Southern Eagles at LSU Tigers': 'http://www.espn.com/college-football/game/_/gameId/401110725', 'Middle Tennessee Blue Raiders at Michigan Wolverines': 'http://www.espn.com/college-football/game/_/gameId/401112222', 'Louisiana Tech Bulldogs at Texas Longhorns': 'http://www.espn.com/college-football/game/_/gameId/401112135', 'Oregon Ducks at Auburn Tigers': 'http://www.espn.com/college-football/game/_/gameId/401110722', 'Eastern Washington Eagles at Washington Huskies': 'http://www.espn.com/college-football/game/_/gameId/401114233', 'Idaho Vandals at Penn State Nittany Lions': 'http://www.espn.com/college-football/game/_/gameId/401112257', 'Miami (OH) RedHawks at Iowa Hawkeyes': 'http://www.espn.com/college-football/game/_/gameId/401112191', 'Northern Iowa Panthers at Iowa State Cyclones': 'http://www.espn.com/college-football/game/_/gameId/401112085', 'Syracuse Orange at Liberty Flames': 'http://www.espn.com/college-football/game/_/gameId/401112434', 'New Mexico State Aggies at Washington State Cougars': 'http://www.espn.com/college-football/game/_/gameId/401114228', 'South Alabama Jaguars at Nebraska Cornhuskers': 'http://www.espn.com/college-football/game/_/gameId/401112238', 'Northwestern Wildcats at Stanford Cardinal': 'http://www.espn.com/college-football/game/_/gameId/401112245', 'Houston Cougars at Oklahoma Sooners': 'http://www.espn.com/college-football/game/_/gameId/401112114', 'Notre Dame Fighting Irish at Louisville Cardinals': 'http://www.espn.com/college-football/game/_/gameId/401112436'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...