python - 使用 BeautifulSoup 从 yahoo Finance 抓取期权价格并找到
问题描述
我正在构建一个 MS Excel 文档以从 Yahoo Finance、ariva 等获取股票和期权价格。我正在使用 xlwings 和 BeautifulSoup 来获取数据。
一切正常,我从雅虎获得股票价格,我还从 ariva 直接获得股票/德国期权价格到 Excel。不幸的是,期权价格(不是股票价格)更难获得。
我正在使用此代码(例如,股票代码是“NVDA”,日期是“44211”(2021 年 15 月 1 日),option_name 是“NVDA210115C00210000”):
import xlwings as xw
import bs4 as bs
import requests
@xw.func
def get_stock(ticker,date,option_name):
url_base = 'http://finance.yahoo.com/quote/'
new_date = str(86400*(date-25569))
src_base = requests.get(url_base+ticker+'/options?date='+new_date).text
soup = bs.BeautifulSoup(src_base,'lxml')
这导致加载https://finance.yahoo.com/quote/NVDA/options?date=1610668800(工作正常)。
我如何获得此选项的选项价格:NVDA210115C00210000?我试过了:
price = soup.find_all('div',attrs={'id':'Col1-1-OptionContracts-Proxy'})[0].find(attrs={'class':'data-col2'}).get_text()
return[price]
但它只返回此页面上第一个选项的价格。
见图:雅虎财经代码和期权价格我要的是324,37。
不知何故,我必须找到“NVDA210115C00210000”的位置,然后获取 data-col2 的文本。两天前我刚开始使用 Python,我不是程序员,但我认为这应该不难。
我如何使用“查找”来找到那个地方然后得到价格?
解决方案
You have many errors,
soup = bs.BeautifulSoup(src_base,'lxml')
should be:
soup = bs.BeautifulSoup(src_base.content,'lxml')
It's .content
you are missing.
What I done was instead find the the table row: table_data = soup.find('tr',{'data-reactid':'200'})
then found the data in that row option_price = table_data.find('td', {'data-reactid':'206'}).text
def get_stock(ticker,date,option_name):
url_base = 'http://finance.yahoo.com/quote/'
new_date = str(86400*(date-25569))
src_base = requests.get(url_base+ticker+'/options?date='+new_date)
soup = bs.BeautifulSoup(src_base.content,'lxml')
table_data = soup.find('tr',{'data-reactid':'200'})
option_price = table_data.find('td', {'data-reactid':'206'}).text
print(option_price)
get_stock('NVDA',44211,'NVDA210115C00210000')
>>> 407.35
HTML Code
<tr class="data-row7 Bgc($hoverBgColor):h BdT Bdc($seperatorColor) H(33px) in-the-money Bgc($hoverBgColor)" data-reactid="200">
<td class="data-col3 Ta(end) Pstart(7px)" data-reactid="206">407.35</td>
推荐阅读
- node.js - mongodb异步操作因express nodejs而失败
- elasticsearch - 弹性搜索:创建或稍后添加与“_id”或“_source”平行的新字段(来自新手的问题)
- python - 如何在我的 react js 应用程序中集成自制的 TensorFlow 模型
- arrays - 一个在固定长度编码记录中的字段之间插入空格而没有分隔符的 sed 脚本?
- webpack - Angular12 cli 选项缓存
- python - 在 Google Cloud Build 中使用 python 插件编译 protobuf 消息
- python - 惊讶于 f'{enum}' != str(enum) 对于具有 str mixin 的枚举,这是怎么回事?
- javascript - 为什么我的作用域 css 在我的页面 nuxtjs 上不起作用
- docker - 如何为 docker 创建本地 nuget 包?
- javascript - 从 Json 读取数据并存储在变量 javascript 中