야후에 올라오는 특정 회사 주식 정보를 자동으로 받아와서 처리하려고 하는데
받아오는 부분을 파이썬으로 해결하려고 urllib 모듈을 익히기 시작했음
먼저 urlopen 불러오고
>>> from urllib.request import urlopen
Alphabet Inc. (GOOGL)의 과거 주가 정보 CSV 파일을 읽어들이고
>>> response = urlopen('http://chart.finance.yahoo.com/table.csv?s=GOOGL&a=7&b=7&c=2016&d=8&e=7&f=2016&g=d&ignore=.csv')
응답된 것의 내용을 한 번 바이트 코드로 화면으로 확인해 봄
>>> response.read()
b'Date,Open,High,Low,Close,Volume,Adj Close\n2016-09-06,798.390015,810.890015,795.429993,808.02002,1983000,808.02002\n2016-09-02,795.27002,797.099976,793.26001,796.869995,1347400,796.869995\n2016-09-01,791.97998,792.890015,786.330017,791.400024,1302000,791.400024\n2016-08-31,789.599976,791.570007,787.200012,789.849976,1066300,789.849976\n2016-08-30,792.880005,798.00,789.469971,791.919983,1166400,791.919983\n2016-08-29,793.049988,798.52002,790.320007,795.820007,766500,795.820007\n2016-08-26,792.48999,799.400024,789.409973,793.219971,1243600,793.219971\n2016-08-25,792.00,794.719971,787.22998,791.299988,1196400,791.299988\n2016-08-24,796.859985,798.460022,790.76001,793.599976,1283600,793.599976\n2016-08-23,800.47998,801.00,795.98999,796.590027,913500,796.590027\n2016-08-22,798.51001,799.299988,794.330017,796.950012,852800,796.950012\n2016-08-19,799.789978,801.22998,796.880005,799.650024,1094400,799.650024\n2016-08-18,805.359985,808.00,801.630005,802.75,864600,802.75\n2016-08-17,800.00,805.630005,796.299988,805.419983,1064500,805.419983\n2016-08-16,803.50,804.26001,797.00,801.190002,1056700,801.190002\n2016-08-15,807.210022,811.359985,804.030029,805.960022,929800,805.960022\n2016-08-12,805.090027,807.190002,803.640015,807.049988,897300,807.049988\n2016-08-11,810.469971,813.880005,806.00,808.200012,1282300,808.200012\n2016-08-10,807.049988,810.880005,806.48999,808.48999,918500,808.48999\n2016-08-09,804.48999,813.330017,804.059998,807.47998,1607700,807.47998\n2016-08-08,806.00,807.599976,801.690002,805.22998,1221300,805.22998\n'
그 다음 이걸 문자열로 디코딩해서 행별로 리스트로 잘라서 csv 파일을 쓰는 식으로 하려는데..
decode()를 이용하니 이딴 식으로 나옴
>>> response.read().decode('UTF-8')
''
인코딩을 뭐로 줘도 안되서 헤메대가 바이트 코드를 다시 출력해봤는데 이따우로 나옴
>>> response.read()
b''
이건 그냥 아무 내용도 없이 바이트코드라는 형식만 덜렁 있는 거잖아?
첫번째로 read()를 실행했을 때는 잘 나오더니 왜 두번째로 실행했을 때는 이렇게 되지??
read()로 한 번 읽고 나면 그냥 사라지는 거임???
어차피 실제 쓸 때는 이런 식으로 화면으로 확인 안하고 바로 다른 변수에 집어넣어서 처리하니까 큰 문제는 없는데
왜 이런 일이 일어나는지 이해가 안가서 질문해 봄
되서->돼서 (되어 = 돼임) [리듬 맞춤법 봇♬]
당연히 사라지는데
왜 안사라질거라고 생각하신거죠?
아 원래 읽고나면 사라지도록 설계되어 있는 건가? 나 파이썬 잘 모름 ㅇㅇ
읽어온걸 저장해놔
ㄴ 그건 글 마지막에 써놨잖아. 그냥 사라진다는 것 자체가 신기해서 ㅇㅇ
The return value from urlopen() gives access to the headers from the HTTP server through the info() method, and the data for the remote resource via methods like read() and readlines().