无法使用BeautifulSoup获得纳斯达克100未来的跨度内容

时间:2018-06-13 23:49:48

标签: beautifulsoup

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标记。

enter image description here

第二个截图:如何获得时间?

enter image description here

1 个答案:

答案 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