Я пытаюсь извлечь данные из таблицы на веб-странице в кадр данных pandas. Веб-сайт https://nextgenstats.nfl.com/stats/passing/2019/1 . Я использую селен и веб-драйвер Chrome. Я считаю, что моя проблема в том, что я не могу определить идентификатор элемента таблицы. У меня нет опыта работы с html, поэтому у меня проблемы с устранением неполадок.
Я пытался использовать встроенную функцию pandas read_html (), но столкнулся с ошибкой «No Tables Found». Я переключился на селен и использую Chrome WebDriver, но все еще с той же ошибкой. Я также попытался добавить задержку, чтобы позволить странице загрузиться, но это, похоже, не помогает.
import pandas as pd
from selenium import webdriver
driver= webdriver.Chrome()
# scrap webpage
driver.implicitly_wait(10)
driver.get('https://nextgenstats.nfl.com/stats/passing/2019/1')
html = driver.page_source
tables = pd.read_html(html)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-29-e2e5cae6f0b5> in <module>
1 url = f'https://nextgenstats.nfl.com/stats/passing/2019/1'
----> 2 tats_list = pd.read_html(url)
C:\Python37-32\lib\site-packages\pandas\io\html.py in read_html(io, match, flavor, header, index_col, skiprows, attrs, parse_dates, thousands, encoding, decimal, converters, na_values, keep_default_na, displayed_only)
1103 na_values=na_values,
1104 keep_default_na=keep_default_na,
-> 1105 displayed_only=displayed_only,
1106 )
C:\Python37-32\lib\site-packages\pandas\io\html.py in _parse(flavor, io, match, attrs, encoding, displayed_only, **kwargs)
910 break
911 else:
--> 912 raise_with_traceback(retained)
913
914 ret = []
C:\Python37-32\lib\site-packages\pandas\compat\__init__.py in raise_with_traceback(exc, traceback)
45 if traceback == Ellipsis:
46 _, _, traceback = sys.exc_info()
---> 47 raise exc.with_traceback(traceback)
48
49
ValueError: No tables found
import pandas as pd
from selenium import webdriver
driver= webdriver.Chrome()
# scrap webpage
driver.implicitly_wait(10)
html = driver.page_source
# find table by using suspected table id
tables = driver.find_element_by_id("gs-data-table")
---------------------------------------------------------------------------
NoSuchElementException Traceback (most recent call last)
<ipython-input-31-5596e919e5ff> in <module>
5 html = driver.page_source
6
----> 7 tables = driver.find_element_by_id("gs-data-table")
C:\Python37-32\lib\site-packages\selenium\webdriver\remote\webdriver.py in find_element_by_id(self, id_)
358 element = driver.find_element_by_id('foo')
359 """
--> 360 return self.find_element(by=By.ID, value=id_)
361
362 def find_elements_by_id(self, id_):
C:\Python37-32\lib\site-packages\selenium\webdriver\remote\webdriver.py in find_element(self, by, value)
976 return self.execute(Command.FIND_ELEMENT, {
977 'using': by,
--> 978 'value': value})['value']
979
980 def find_elements(self, by=By.ID, value=None):
C:\Python37-32\lib\site-packages\selenium\webdriver\remote\webdriver.py in execute(self, driver_command, params)
319 response = self.command_executor.execute(driver_command, params)
320 if response:
--> 321 self.error_handler.check_response(response)
322 response['value'] = self._unwrap_value(
323 response.get('value', None))
C:\Python37-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py in check_response(self, response)
240 alert_text = value['alert'].get('text')
241 raise exception_class(message, screen, stacktrace, alert_text)
--> 242 raise exception_class(message, screen, stacktrace)
243
244 def _value_or_default(self, obj, key, default):
NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="gs-data-table"]"}
(Session info: chrome=77.0.3865.120)
Я ожидал, что вывод будет кадром данных таблицы, расположенной на веб-страницено не могу обойти эту ошибку. Любая помощь в альтернативных методах или помощь в идентификации идентификатора элемента таблиц была бы полезной. Спасибо.