Получение информации о таблице со страницы, используя Python и BeautifulSoup - PullRequest
0 голосов
/ 13 апреля 2020

Страница, с которой я пытаюсь получить информацию: https://www.pro-football-reference.com/teams/crd/2017_roster.htm.

Я пытаюсь получить всю информацию из таблицы «Ростер», но по какой-то причине могу не получилось через BeautifulSoup. Я пробовал soup.find("div", {'id': 'div_games_played_team'}), но это не работает. Когда я смотрю на страницу HTML, я вижу таблицу внутри очень большого комментария и в обычном div. Как я могу использовать BeautifulSoup, чтобы получить информацию из этой таблицы?

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020

тебе не нужен селен. Что вы могли сделать (и вы правильно его определили), вытащить комментарии и затем проанализировать таблицу из этого.

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


url = 'https://www.pro-football-reference.com/teams/crd/2017_roster.htm'
response = requests.get(url)

soup = BeautifulSoup(response.text, 'html.parser')
comments = soup.find_all(string=lambda text: isinstance(text, Comment))

tables = []
for each in comments:
    if 'table' in each:
        try:
            tables.append(pd.read_html(each)[0])
        except ValueError as e:
            print(e)
            continue

Вывод:

print(tables[0].head().to_string())
    No.           Player   Age  Pos   G   GS     Wt    Ht  College/Univ  BirthDate   Yrs   AV                            Drafted (tm/rnd/yr)      Salary
0  54.0  Bryson Albright  23.0  NaN   7  0.0  245.0   6-5    Miami (OH)  3/15/1994     1  0.0                                            NaN    $246,177
1  36.0    Budda Baker*+  21.0   ss  16  7.0  195.0  5-10    Washington  1/10/1996  Rook  9.0     Arizona Cardinals / 2nd / 36th pick / 2017    $465,000
2  64.0    Khalif Barnes  35.0  NaN   3  0.0  320.0   6-6    Washington  4/21/1982    12  0.0  Jacksonville Jaguars / 2nd / 52nd pick / 2005    $176,471
3  41.0   Antoine Bethea  33.0   db  15  6.0  206.0  5-11        Howard  7/27/1984    11  4.0   Indianapolis Colts / 6th / 207th pick / 2006  $2,000,000
4  28.0    Justin Bethel  27.0  rcb  16  6.0  200.0   6-0  Presbyterian  6/17/1990     5  3.0    Arizona Cardinals / 6th / 177th pick / 2012  $2,000,000
....
0 голосов
/ 13 апреля 2020

Тег, который вы пытаетесь очистить, динамически генерируется JavaScript. Скорее всего, вы используете запросы для очистки вашего HTML. К сожалению, запросы не будут запускаться JavaScript, потому что он вытягивает все HTML в виде необработанного текста. BeautifulSoup не может найти тег, потому что он никогда не создавался в вашей программе очистки.

Я рекомендую использовать Selenium . Это не идеальное решение - просто лучшее для вашей проблемы. Selenium WebDriver выполнит JavaScript, чтобы сгенерировать HTML страницы. Затем вы можете использовать BeautifulSoup для анализа того, что вы ищете. См. Selenium с Python для получения дополнительной информации о том, как начать работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...