2017-05-18 16 views
0

팬더를 사용하여 주가를 가져 오려고합니다. 지난 주까지 나는 w was 거리고 있었다. 그러나 나는 지금 데이터를 가져올 수 없다. 제 질문은 야후 URL이나 팬더에 문제가 있습니까?yahoo 역사 url에 직면 한 문제

raise PandasError ('DataFrame 생성자가 제대로 호출되지 않았습니다') pandas.core.common.PandasError : DataFrame 생성자가 제대로 호출되지 않았습니다!

브라우저에서 URL을 시도했지만 작동하지 않습니다.

+1

문제의 원인이되는 코드를 보여줘야합니다. –

답변

1

그들은 자신의 URL을 변경하고 지금 쿠키 보호 (그리고 아마도 자바 스크립트)를 사용했습니다 나는 쿠키가 CookieJar을 찾아 어디에서나 얻을 수 없었다 그래서 나는이 "가짜"사용자 다운로드 dryscrape를 사용하여 종료

import dryscrape 
from bs4 import BeautifulSoup 
import time 
import datetime 
import re 

#we visit the main page to initialise sessions and cookies 
session = dryscrape.Session() 
session.set_attribute('auto_load_images', False) 
session.set_header('User-agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95  Safari/537.36')  
session.visit("https://finance.yahoo.com/quote/AAPL/history?p=AAPL") 
response = session.body() 


#get the dowload link 
soup = BeautifulSoup(response, 'lxml') 
for taga in soup.findAll('a'): 
    if taga.has_attr('download'): 
     url_download = taga['href'] 
print(url_download) 

#now replace the default end date end start date that yahoo provides 
s = "2017-02-18" 
period1 = '%.0f' % time.mktime(datetime.datetime.strptime(s, "%Y-%m-%d").timetuple()) 
e = "2017-05-18" 
period2 = '%.0f' % time.mktime(datetime.datetime.strptime(e, "%Y-%m-%d").timetuple()) 

#now we replace the period download by our dates, please feel free to improve, I suck at regex 
m = re.search('period1=(.+?)&', url_download) 
if m: 
    to_replace = m.group(m.lastindex) 
    url_download = url_download.replace(to_replace, period1)   
m = re.search('period2=(.+?)&', url_download) 
if m: 
    to_replace = m.group(m.lastindex) 
    url_download = url_download.replace(to_replace, period2) 

#and now viti and get body and you have your csv 
session.visit(url_download) 
csv_data = session.body() 

#and finally if you want to get a dataframe from it 
import sys 
if sys.version_info[0] < 3: 
    from StringIO import StringIO 
else: 
    from io import StringIO 

import pandas as pd 
df = pd.read_csv(StringIO(csv_data), index_col=[0], parse_dates=True) 
df 
+0

dryscrape는 Windows에서 작동합니까? 아니면 Linux에서만 사용할 수 있습니까? – SMeznaric

+0

dryscrape는 [cygwin] (https://www.cygwin.com/)과 함께 작동해야하지만 공식적으로 Windows는 지원되지 않습니다. – Scilear

+0

감사합니다. 유령과 함께 작동하게 만들었습니다. 불행히도 수정 된 가격은 더 이상 조정되지 않으므로 별도로 기업 활동을 제공하지 않으면 더 이상 유용하지 않습니다. – SMeznaric