from bs4
import BeautifulSoup
import re
import requests
url = 'www.barchart.com/futures/quotes/NQU18'
r = requests.get("https://" +url)
data = r.text
soup = BeautifulSoup(data)
price = soup.find('span', {'class': 'last-change',
'data-ng-class': "highlightValue('priceChange’)”}).text
print(price)
结果:
[[item.priceChange]]
这不是跨度内容
结果应该是价格。
哪里错了?
以下是页面的span标记。
第二个截图:如何获得时间?
答案 0 :(得分:1)
使用price = soup.find('span', {'class': 'up'}).text
来获取+X.XX
值:
from bs4 import BeautifulSoup
import requests
url = 'www.barchart.com/futures/quotes/NQU18'
r = requests.get("https://" +url)
data = r.text
soup = BeautifulSoup(data, "lxml")
price = soup.find('span', {'class': 'up'}).text
print(price)
目前的输出是:
+74.75
您寻找的tradeTime
似乎不存在于page_source中,因为它是通过JavaScript动态生成的。但是,如果您有点聪明,可以在别处找到它,并使用json
库来解析某个脚本元素中的JSON数据:
import json
trade_time = soup.find('script', {"id": 'barchart-www-inline-data'}).text
json_data = json.loads(trade_time)
print(json_data["NQU18"]["quote"]["tradeTime"])
输出:
2018-06-14T18:14:05
如果这些问题无法解决您的问题,那么您将不得不求助于像Selenium这样可以运行JavaScript来获取您正在寻找的内容:
from selenium import webdriver
driver = webdriver.Chrome()
url = ("https://www.barchart.com/futures/quotes/NQU18")
driver.get(url)
result = driver.find_element_by_xpath('//*[@id="main-content-column"]/div/div[1]/div[2]/span[2]/span[1]')
print(result.text)
目前的输出是:
-13.00