有很多关于这个主题的帖子,但我仍然没有达到我想要的目的,所以这里是我的问题:
我试图从这个网站上提取股票价格:https://bors.e24.no/#!/instrument/NHY.OSE
我想从“检查”文本中提取价格: 57,12:
<div class="number LAST" data-reactid=".g.1.2.0">
57,12</div>下面是我尝试过的生成"AttributeError“和'NoneType‘对象没有属性'text’的代码。
我还试图删除价格行中的.text,其结果是“价格为:无”
from bs4 import BeautifulSoup
import requests
url = 'https://bors.e24.no/#!/instrument/NHY.OSE'
page = requests.get(url)
soup = BeautifulSoup(page.text, 'lxml')
PRICE= soup.find('div', class_= "number LAST").text
print('Price is:',(PRICE))发布于 2022-09-23 13:54:34
试试这个:
import requests
headers = {
'user_agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36',
}
api_url = "https://bors.e24.no/server/components?columns=ITEM, LAST, BID, ASK, CHANGE, CHANGE_PCT, TURNOVER, LONG_NAME&itemSector=NHY.OSE&type=table"
data = requests.get(api_url, headers=headers).json()
print(data["rows"][0]["values"]["LAST"])输出:
56.92发布于 2022-09-23 14:39:40
发生这种事是因为你
requests.get(url)将不会获得页面中的所有信息,包括您正在寻找的价格,因为该网页将加载其中的某些部分,然后才会获取更多数据。因此,尝试选择带有className="number LAST“的div。
PRICE= soup.find('div', class_= "number LAST").text会抛出一个错误,因为这还不存在。
有一些方法可以解决这个问题:
我相信在你的例子中,在我自己看了一下网络标签后,正确的请求网址可能是'https://bors.e24.no/server/components?columns=TIME,+PRICE,+VOLUME,+BUYER,+SELLER,+ID&filter=ITEM%3D%3DsNHY&limit=5&source=feed.ose.trades.EQUITIES%2BPCC&type=history'‘,它似乎返回了一个字典,其中包含了您想要的价格。
import requests
url = 'https://bors.e24.no/server/components?columns=TIME,+PRICE,+VOLUME,+BUYER,+SELLER,+ID&filter=ITEM%3D%3DsNHY&limit=5&source=feed.ose.trades.EQUITIES%2BPCC&type=history'
page = requests.get(url)
print(page.json()["rows"][0]["values"]["PRICE"])如果您希望取消各种链接,您将需要找到一种方法来动态地将前面的链接更改为与您试图爬行的其他链接相匹配的链接。我猜这将意味着将"NHY“和"ose”改为与您正在寻找的其他股票相匹配的东西。
https://stackoverflow.com/questions/73828500
复制相似问题