Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法准确拆分_Python_Split_Finance - Fatal编程技术网

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块,这样解释器就会抛出错误,这样你就可以找到它并修复错误。太棒了!做了我想做的事。