Yahoo는 일부 데이터에 대해 아래 스크립트에서 URL을 요청합니다. 개발자 도구의 네트워크 탭을보고 NOA 주식에 대한 페이지를 새로 고침하면 'NOA? formatt ...'가 표시됩니다. 이것을 클릭 한 다음 응답 개체를보고 일부 데이터를 확인하십시오. 아래 스크립트의 요청 모듈 (pip install requests
)이 필요합니다.
# get_mean_recs.py
import csv
from datetime import datetime
import requests
import sys
get_date = lambda : datetime.utcnow().strftime('%d-%m-%Y')
lhs_url = 'https://query2.finance.yahoo.com/v10/finance/quoteSummary/'
rhs_url = '?formatted=true&crumb=swg7qs5y9UP&lang=en-US®ion=US&' \
'modules=upgradeDowngradeHistory,recommendationTrend,' \
'financialData,earningsHistory,earningsTrend,industryTrend&' \
'corsDomain=finance.yahoo.com'
def get_mean_rec(ticker):
url = lhs_url + ticker + rhs_url
r = requests.get(url)
if not r.ok:
return -1
result = r.json()['quoteSummary']['result'][0]
return result['financialData']['recommendationMean']['fmt']
def read_from_csv(fn):
with open(fn, 'r') as f:
reader = csv.reader(f)
for line in reader:
for ticker in line:
yield ticker
def write_to_csv(fn, data):
with open(fn, 'a') as f:
fieldnames = data[0].keys()
writer = csv.DictWriter(f, fieldnames=fieldnames)
for item in data:
writer.writerow(item)
def assemble_dict(ticker):
return {
'ticker': ticker,
'mean_rec': get_mean_rec(ticker),
'utc_date': get_date()
}
def main():
in_fn = sys.argv[1]
out_fn = sys.argv[2]
data = [assemble_dict(ticker) for ticker in read_from_csv(in_fn)]
write_to_csv(out_fn, data)
if __name__ == '__main__':
main()
사용법 : 당신은 무엇을
python get_mean_recs.py input.csv output.csv
출처
2017-02-14 23:05:01
Jay
를 시도? [BeautifulSoup] (https://www.crummy.com/software/BeautifulSoup/)를 특히 사용해 보셨습니까? – 9000
lxml을 사용하고 있었는데 BeautifulSoup을 권하고 싶습니까? –
야후에 API가 없습니까? API는 자동 시스템에서 사용하기 때문에 API를 사용하는 것이 훨씬 안전합니다. 일반적으로 웹 사이트는 그렇지 않습니다. 훌륭한 스크레이퍼를 만들고 야후에 의해 막히게 될 것입니다. – halfer