Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ch.4.1.2, 4.4.3, 4.4.4 오류 #177

Open
coreaplate opened this issue Sep 23, 2023 · 4 comments
Open

Ch.4.1.2, 4.4.3, 4.4.4 오류 #177

coreaplate opened this issue Sep 23, 2023 · 4 comments

Comments

@coreaplate
Copy link

coreaplate commented Sep 23, 2023

안녕하세요,

4.1.2 pd.read_html('상장법인목록.xls'), .read_excel('상장법인목록.xlsx') 을 이행할 경우 책과 다르게 아래와 같은 비정렬된 데이터가 나옵니다.

image
image

또한 pd.read_html('url')[0] 를 할 경우
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbb in position 144: invalid start byte 해당 오류 메세지가 송출됩니다.

image

4.4.3 항목에서는 AttributeError: 'NoneType' object has no attribute 'a' 해당 오류 메세지가 송출됩니다.

image

4.4.4는 아래와 같습니다.

image

해결 방안이 있을까요? 감사합니다.

현재 윈도우 11, Mozilla/5.0을 사용중입니다.

@coreaplate coreaplate changed the title Ch.4.1.2, 4.4.3 오류 Ch.4.1.2, 4.4.3, 4.4.4 오류 Sep 23, 2023
@Eligae
Copy link

Eligae commented Sep 23, 2023

 def read_krx_code(self):
        """KRX로부터 상장기업 목록 파일을 읽어와서 데이터프레임으로 반환"""
        url = 'http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13'
        krx = pd.read_html(url, header=0, encoding='cp949')[0]
        krx = krx[['종목코드', '회사명']]
        krx = krx.rename(columns={'종목코드': 'code', '회사명': 'company'})
        krx.code = krx.code.map('{:06d}'.format)
        return krx

나중에 5장에 나오면 krx 상장기업 data 가져오는 건데, 아마 encoding이 'cp949'가 아니어서 그런것 같네요.

그리고, dataframe을 terminal에서 열면 깨져보이는 듯 할 수 있지만, 따로 df.to_csv('test.csv') 로 저장해서 확인해보세요.

@Eligae
Copy link

Eligae commented Sep 23, 2023

참고로, 국가 관련 데이터들을 크롤링 또는 다운받아서 사용하려할 때, utf-8이 아닌 cp949형식이 대부분이었습니다.

@coreaplate
Copy link
Author

coreaplate commented Sep 23, 2023 via email

@Eligae
Copy link

Eligae commented Sep 23, 2023

from bs4 import BeautifulSoup as bs
from urllib.request import urlopen, Request
url = 'https://finance.naver.com/item/sise_day.nhn?code=000020'
HEADERS = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}
request = Request(url, headers=HEADERS)
with urlopen(request) as doc:
    html = bs(doc, 'lxml')
    pgrr = html.find('td', class_='pgRR')
    print(pgrr.a['href'])

똑같이 해보았는데, 저도 None을 return하더라구요. 코드는 맞는데, Header추가를 안하셔서 그런 듯 합니다. 그런데, 이게 좀 귀찮아지는 부분이 있어서 차라리 request만 쓰는 방법을 추천드립니다.

url = f"https://finance.naver.com/item/sise_day.nhn?code={code}&page=1"
html = BeautifulSoup(requests.get(url, headers={'User-agent': 'Mozilla/5.0'}).text, "lxml")
pgrr = html.find("td", class_="pgRR")
s = str(pgrr.a["href"]).split('=')
lastpage = s[-1] 

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants