首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python,刮BS4

Python,刮BS4
EN

Stack Overflow用户
提问于 2022-09-23 13:31:08
回答 2查看 58关注 0票数 1

有很多关于这个主题的帖子,但我仍然没有达到我想要的目的,所以这里是我的问题:

我试图从这个网站上提取股票价格:https://bors.e24.no/#!/instrument/NHY.OSE

我想从“检查”文本中提取价格: 57,12:

代码语言:javascript
复制
<div class="number LAST" data-reactid=".g.1.2.0">
57,12</div>

下面是我尝试过的生成"AttributeError“和'NoneType‘对象没有属性'text’的代码。

我还试图删除价格行中的.text,其结果是“价格为:无”

代码语言:javascript
复制
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))
EN

回答 2

Stack Overflow用户

发布于 2022-09-23 13:54:34

试试这个:

代码语言:javascript
复制
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"])

输出:

代码语言:javascript
复制
56.92
票数 0
EN

Stack Overflow用户

发布于 2022-09-23 14:39:40

发生这种事是因为你

代码语言:javascript
复制
requests.get(url)

将不会获得页面中的所有信息,包括您正在寻找的价格,因为该网页将加载其中的某些部分,然后才会获取更多数据。因此,尝试选择带有className="number LAST“的div。

代码语言:javascript
复制
PRICE= soup.find('div', class_= "number LAST").text

会抛出一个错误,因为这还不存在。

有一些方法可以解决这个问题:

  1. 您可以尝试使用像这样的库,这通常被推荐用于抓取更多依赖于某些Javascript和API调用来加载内容的动态页面。
  2. 您可以打开您的开发人员工具,并检查Network,在那里您可能会找到获取要取消的价格的请求。

我相信在你的例子中,在我自己看了一下网络标签后,正确的请求网址可能是'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'‘,它似乎返回了一个字典,其中包含了您想要的价格。

代码语言:javascript
复制
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”改为与您正在寻找的其他股票相匹配的东西。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73828500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档