我试图从二进制信号网站上通过网络抓取表格数据。数据会在一段时间后更新,我想在更新时获取数据。问题是,当我抓取代码时,它将返回空值。该表具有一个表标记。
我不确定它是否使用除html之外的其他东西,因为它会更新而无需重新加载。我必须使用浏览器用户代理来通过安全性。
运行时它返回正确的数据,但是我注意到信号ID会增加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)
我认为它会显示整个表格,但只显示空字符串。可能是什么问题?
答案 0 :(得分:1)
在您提供的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