Как очистить заданную таблицу c, если на сайте несколько таблиц? - PullRequest
0 голосов
/ 23 марта 2020

Недавно я создал скрипт для сбора финансовых данных с веб-сайта (https://www.cmegroup.com/trading/interest-rates/cleared-otc.html), чтобы можно было отслеживать изменения объемов торгов для проекта.

Однако, похоже, они немного изменили HTML и мой скрипт больше не работает.

Я использовал это, чтобы получить значения из 'table20'.

#Options for Chrome Driver (Selenium)
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\Program Files\Anaconda\chromedriver\chromedriver.exe')
driver.get("https://www.cmegroup.com/trading/interest-rates/cleared-otc.html")

current_page = driver.page_source

#Grab all the information from website HTML

soup = BeautifulSoup(current_page, 'html.parser')
tbl = soup.find("div", {"id": "table20"})

Однако, tbl теперь является "NoneType", в котором ничего нет.

Я также попробовал следующее, но безрезультатно:

table_2 = soup.find(lambda tag: tag.name == 'table' and tag.has_attr('id') and tag['id'] == 'table20')

Итак, вопрос в том, как мне очистить все эти значения валюты для таблицы20?

1 Ответ

2 голосов
/ 23 марта 2020

Ну, я вижу, что нет смысла использовать selenium для такого случая, так как это замедлит вашу задачу.

Сайт загружен событием JavaScript, которое динамически отображает данные после загрузки страницы. .

requests библиотека не сможет отображать JavaScript на лету. так что вы можете использовать selenium или requests_html. и действительно, есть много модулей, которые могут сделать это.

Теперь у нас есть еще одна опция в таблице, чтобы отследить, откуда данные отображаются. Мне удалось найти запрос XHR , который используется для извлечения данных из back-end API и их рендеринга на стороне пользователя.

Вы можете получить XHR запрос открытым Developer-Tools и проверка Сеть и проверка XHR/JS запросов, сделанных в зависимости от типа вызова, таких как fetch

import requests
import pandas as pd


r = requests.get("https://www.cmegroup.com/CmeWS/mvc/xsltTransformer.do?xlstDoc=/XSLT/md/irs_settlement_TOTALS.xsl&url=/md/Clearing/IRS?date=03/20/2020&exchange=XCME")
df = pd.read_html(r.content, header=0)[1][:-1]

df.iloc[:, :5].to_csv("data.csv", index=False)

Выход: Просмотр в режиме онлайн

Пример вывода:

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