Табличные данные, возвращающие пустые значения после просмотра веб-страниц - PullRequest
3 голосов
/ 23 апреля 2019

Я попытался очистить данные таблицы с сайта двоичных сигналов.Данные обновляются через некоторое время, и я хотел получить данные по мере их обновления.Проблема в том, что когда я очищаю код, он возвращает пустые значения.В таблице есть табличный тег.

Я не уверен, использует ли он что-то еще, кроме html, потому что он обновляется без перезагрузки.Мне пришлось использовать пользовательский агент браузера, чтобы пройти защиту.

Когда я запускаю, он возвращает правильные данные, но я заметил увеличение идентификатора сигнала на 1

<table class="ui stripe hover dt-center table" id="isosignal-table" style="width:100%"><thead><tr><th></th><th class="no-sort">Current Price</th><th class="no-sort">Direction</th><th class="no-sort">Asset</th><th class="no-sort">Strike Price</th><th class="no-sort">Expiry Time</th></tr></thead><tbody><tr :class="[ signal.direction.toLowerCase() == 'call' ? 'call' : 'put' ]" :id="'signal-' + signal.id" :key="signal.id" ref="signals" v-for="signal in signals"><td style="display: none;" v-text="signal.id"></td><td v-text="signal.current_price"></td><td v-html="showDirection(signal.direction)"></td><td v-text="signal.asset"></td><td v-text="signal.strike_price"></td><td v-text="parseTime(signal.expiry)"></td></tr></tbody></table>


table = soup.table
print(table)

Но когда я запускаювесь код возвращает это: [] ['', '', '', '', '', '']

from bs4 import BeautifulSoup
from urllib.request import Request, urlopen

url = "https://signals.investingstockonline.com/free-binary-signal-page"
req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})
page = urlopen(req)
data = page.read()

soup = BeautifulSoup(data, 'html.parser')
table = soup.table
table_rows = table.find_all('tr')

for tr in table_rows:
    td = tr.find_all('td')
    row = [i.text for i in td]
    if len(row) < 1:
         pass
    print(row)

Я думал, что будет отображаться вся таблица, но она просто отображает пустые строки,В чем может быть проблема?

1 Ответ

1 голос
/ 23 апреля 2019

В предоставленном вами HTML-коде нет текстового содержимого в элементах, так что вы получаете это правильно.Когда вы смотрите на действующий веб-сайт, текстовое содержимое, отображаемое в таблице, динамически вставляется с помощью JS, получающего информацию с сервера через ajax.Другими словами, если вы выполните запрос, вы получите скелет (HTML), но не мясо (живые данные).

Вы можете использовать что-то вроде Selenium для извлечения этой информации следующим образом:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()  
chrome_options.add_argument("--headless")  
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("https://signals.investingstockonline.com/free-binary-signal-page")

for tr in driver.find_elements_by_tag_name("tr"):
    for td in tr.find_elements_by_tag_name("td"):
        print(td.get_attribute("innerText"))

Вывод (усеченный):

EURJPY
126.044
22:00:00
1.50318

EURCAD
1.50332
22:00:00
1.12595

EURUSD
1.12604
22:00:00
0.86732

EURGBP
0.86743
22:00:00
1.29825

GBPUSD
1.29841
22:00:00
145.320
...