繁体   English   中英

Python,刮板BS4

[英]Python, Scraping BS4

关于这个主题有很多帖子,但我仍然无法实现我想要的,所以这是我的问题:

我正在尝试从该站点提取股票价格: https://bors.e24.no/#./instrument/NHY.OSE

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

<div class="number LAST" data-reactid=".g.1.2.0">
57,12</div>

这是我尝试生成“AttributeError”和“NoneType”的代码 object 没有属性“文本”。

我还尝试在 PRICE 行中删除.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))

尝试这个:

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"])

Output:

56.92

发生这种情况是因为您的

requests.get(url)

不会获得页面中的所有信息,包括您要查找的价格,因为所述网页会加载其中的某些部分,然后才会获取更多数据。 因此,尝试 select div 与 className="number LAST"

PRICE= soup.find('div', class_= "number LAST").text

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

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

  1. 您可以尝试使用Selenium 之类的库,通常建议使用它来抓取更多依赖某些 Javascript 和 API 调用来加载内容的动态页面。

  2. 您可以打开您的开发人员工具并检查“网络”选项卡,您可能会在其中找到获取您尝试废弃的价格的请求。

我相信在您的情况下,在自己查看“网络”选项卡后,请求的正确 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',这似乎返回了一个包含您要查找的价格的字典。

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”更改为与您正在寻找的其他股票相匹配的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM