Python 无法准确拆分
我正试图进行一些公平性研究。我正试图写一个代码,让我从雅虎金融一些数据 我尝试了这个代码,效果很好:Python 无法准确拆分,python,split,finance,Python,Split,Finance,我正试图进行一些公平性研究。我正试图写一个代码,让我从雅虎金融一些数据 我尝试了这个代码,效果很好: import time import urllib.request from urllib.request import urlopen bsebanks ='HDFCBANK.BO', 'ICICIBANK.BO', 'SBIN.BO' def yahooKeyStats(stock): try: sourceCode = urllib.request.urlop
import time
import urllib.request
from urllib.request import urlopen
bsebanks ='HDFCBANK.BO', 'ICICIBANK.BO', 'SBIN.BO'
def yahooKeyStats(stock):
try:
sourceCode = urllib.request.urlopen('https://in.finance.yahoo.com/quote/'+stock+'/key-statistics?p='+stock+'&.tsrc=fin=srch').read()
sourceCodeR = sourceCode.decode('utf-8')
PB = sourceCodeR.split('Price/book</span><!-- react-text: 61 --> <!-- /react-text --><!-- react-text: 62 -->(mrq)<!-- /react-text --><sup aria-label="" data-reactid="63"></sup></td><td class="Fz(s) Fw(500) Ta(end) Pstart(10px) Miw(60px)" data-reactid="64">')[1].split('</td>')[0]
PE = sourceCodeR.split('Trailing P/E</span><!-- react-text: 31 --> <!-- /react-text --><!-- react-text: 32 --><!-- /react-text --><sup aria-label="" data-reactid="33"></sup></td><td class="Fz(s) Fw(500) Ta(end) Pstart(10px) Miw(60px)" data-reactid="34">')[1].split('</td>')[0]
print ('____________________________________')
print (stock)
print ('P/B',PB)
print ('PE',PE)
except:
print ("NA")
for eachStock in bsebanks:
yahooKeyStats(eachStock)
导入时间
导入urllib.request
从urllib.request导入urlopen
bsebanks='HDFCBANK.BO','ICICIBANK.BO','SBIN.BO'
def YahookeStats(库存):
尝试:
sourceCode=urllib.request.urlopen('https://in.finance.yahoo.com/quote/“+stock+”/key statistics?p=“+stock+”&.tsrc=fin=srch')。read()
sourceCodeR=sourceCode.decode('utf-8')
PB=sourceCodeR.split('Price/book(mrq)')[1]。split(''[0]
PE=sourceCodeR.split('training P/E')[1]。split('')[0]
打印('uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu')
印刷品(库存)
打印('P/B',PB)
打印('PE',PE)
除:
打印(“NA”)
对于bsebanks中的每个库存:
yahooKeyStats(每个股票)
然而,当我尝试添加另一个指标时,比如说支付比率,如下所示:
po = sourceCodeR.split('Payout Ratio</span><!-- react-text: 298 --> <!-- /react-text --><!-- react-text: 299 --><!-- /react-text --><sup aria-label="Data provided by Morningstar, Inc." data-reactid="300">4</sup></td><td class="Fz(s) Fw(500) Ta(end) Pstart(10px) Miw(60px)" data-reactid="301">')[1].split('</td>')[0]
print ('PO',po)
po=sourceCodeR.split('Payout Ratio 4')[1]。split(''[0]
打印('PO',PO)
它似乎不起作用,返回NA
我哪里做错了?请帮忙
附言:我还没有学会python。我正在尝试为我的研究构建一个股票筛选程序。对您的代码进行了一些更改。对于这样的工作,您应该使用html解析器。 在这里,我用漂亮的汤以干净的方式解决了你的问题。 要求:
pip安装美化SOUP4
from urllib.request import urlopen
from bs4 import BeautifulSoup
def yahooKeyStats(name):
url = 'https://in.finance.yahoo.com/quote/{}/key-statistics'.format(name)
page = urlopen(url).read()
soup = BeautifulSoup(page, 'lxml')
pe = soup.find('span', text='Trailing P/E').find_next('td').get_text()
pb = soup.find('span', text='Price/book').find_next('td').get_text()
payout = soup.find('span', text='Payout ratio').find_next('td').get_text()
print("symbol: {}\ntrailing p/e: {}\np/b: {}\npayout: {}\n".format(name, pe, pb, payout))
bsebanks = ['HDFCBANK.BO', 'ICICIBANK.BO', 'SBIN.BO']
for eachStock in bsebanks:
yahooKeyStats(eachStock)
输出:
>> symbol: HDFCBANK.BO
>> trailing p/e: 28.37
>> p/b: 4.32
>> payout: 17.02%
>>
>> symbol: ICICIBANK.BO
>> trailing p/e: 50.00
>> p/b: 2.82
>> payout: 9.78%
>>
>> symbol: SBIN.BO
>> trailing p/e: 24.62
>> p/b: 1.26
>> payout: 0.00%
您最好找到一个以更易于机器读取的格式(如JSON)输出的数据源。如果你一定要抓取HTML,你应该使用类似的东西来处理复杂的解析。我建议删除try-except块,这样解释器就会抛出错误,这样你就可以找到它并修复错误。太棒了!做了我想做的事。