Выход BeautifulSoup4 с фильтрами JS - PullRequest
0 голосов
/ 09 мая 2018

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

#import libraries
from urllib.request import urlopen
from bs4 import BeautifulSoup
import requests

#specify the url
stat_page = 'https://www.premierleague.com/stats/top/players/goals?se=79'

# query the website and return the html to the variable ‘page’
page = urlopen(stat_page)

#parse the html using beautiful soup and store in variable `soup`
soup = BeautifulSoup(page, 'html.parser')

# Take out the <div> of name and get its value
stats = soup.find('tbody', attrs={'class': 'statsTableContainer'})
name = stats.text.strip()
print(name)

Похоже, что происходит некоторая фильтрация данных за кулисами, но я не уверен, как я могу отфильтровать вывод с BeautifulSoup4. Может показаться, что поверх HTML происходит фильтрация Javascript.

Я попытался определить, что это за конкретный фильтр, и похоже, что фильтрация здесь выполнена.

<div class="current" data-dropdown-current="FOOTBALL_COMPSEASON" role="button" tabindex="0" aria-expanded="false" aria-labelledby="dd-FOOTBALL_COMPSEASON" data-listen-keypress="true" data-listen-click="true">2017/18</div>

Я прочитал ссылку ниже, но я не совсем уверен, как применить ее к моему ответу (опять же, новичок здесь).

Проблемы с пониманием фильтрации BeautifulSoup

Я пытался установить, импортировать и применить различные парсеры, но я всегда получаю одну и ту же ошибку (не удается найти построитель деревьев). Любые предложения о том, как я могу извлечь данные с веб-сайта, который, кажется, использует фильтр JS?

Спасибо.

1 Ответ

0 голосов
/ 09 мая 2018

В этих случаях обычно полезно отслеживать сетевые запросы с помощью инструментов разработчика вашего браузера, поскольку данные обычно извлекаются с помощью AJAX и затем отображаются в браузере с помощью JS.

В этом случае, похоже, что данные, которые вы ищете, доступны по адресу:

https://footballapi.pulselive.com/football/stats/ranked/players/goals?page=0&pageSize=20&compSeasons=79&comps=1&compCodeForActivePlayer=EN_PR&altIds=true

Он имеет стандартный формат JSON, поэтому вы сможете анализировать и извлекать данные с минимальными усилиями.

Однако обратите внимание, что для этой конечной точки требуется, чтобы заголовок HTTP Origin был установлен на https://www.premierleague.com, чтобы он мог обработать ваш запрос.

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