
* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.
* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.
챗지피티(4.0)가 접근제한되있다고 새로운 코드를 알려줬는데
강사님 화면처럼 먼가 정돈된게 아니고 뒤죽박죽이네요 ㅠ
코딩은 처음해보는지라 무엇을 잘못한건가요

작성한 코드 및 에러 메세지
import requests
from bs4 import BeautifulSoup
import pandas as pd
# 삼성전자의 네이버 금융 재무제표 페이지 URL
url = 'https://finance.naver.com/item/main.nhn?code=005930'
# requests로 웹 페이지 가져오기
response = requests.get(url)
# BeautifulSoup 객체 생성
soup = BeautifulSoup(response.text, 'html.parser')
# 재무제표 테이블 찾기 (연간 재무제표 예시)
# 네이버 금융 사이트의 현재 구조에 맞춰 테이블 클래스 이름을 찾아야 합니다.
# 아래 코드는 사이트 구조가 변경되지 않았다면 작동합니다.
table = soup.find('table', {'class': 'tb_type1 tb_num tb_type1_ifrs'})
# 테이블 헤더 추출
thead = table.find('thead')
headers = [header.get_text().strip() for header in thead.find_all('th')]
# 테이블 데이터 추출
tbody = table.find('tbody')
rows = tbody.find_all('tr')
data = []
for row in rows:
cols = row.find_all('td')
cols = [ele.text.strip() for ele in cols if ele.text.strip()]
if cols: # 빈 데이터가 아닌 경우에만 추가
data.append(cols)
# 데이터프레임으로 변환
df = pd.DataFrame(data)
df.columns = headers[:len(df.columns)] # 컬럼 이름 할당
df.head() # 데이터프레임의 처음 몇 줄을 출력
현재 제 환경에서는 인터넷 접근이 제한되어 있어, 네이버 금융 사이트에 직접 접근하여 삼성전자의 재무제표를 크롤링할 수 없습니다. 그러나, 이러한 작업을 수행하는 파이썬 코드를 제공할 수 있습니다. 이 코드는 네이버 금융 사이트의 HTML 구조에 기반하여 작성되었으며, 해당 구조가 변경되었다면 코드 수정이 필요할 수 있습니다.
import requests
from bs4 import BeautifulSoup
import pandas as pd
# 삼성전자의 네이버 금융 재무제표 페이지 URL
url = 'https://finance.naver.com/item/main.nhn?code=005930'
# requests로 웹 페이지 가져오기
response = requests.get(url)
# BeautifulSoup 객체 생성
soup = BeautifulSoup(response.text, 'html.parser')
# 재무제표 테이블 찾기 (연간 재무제표 예시)
table = soup.find('table', {'class': 'tb_type1 tb_num tb_type1_ifrs'})
# 테이블 헤더 추출
thead = table.find('thead')
headers = [header.get_text().strip() for header in thead.find_all('th')]
# 테이블 데이터 추출
tbody = table.find('tbody')
rows = tbody.find_all('tr')
data = []
for row in rows:
cols = row.find_all('td')
cols = [ele.text.strip() for ele in cols if ele.text.strip()]
if cols: # 빈 데이터가 아닌 경우에만 추가
data.append(cols)
# 데이터프레임으로 변환
df = pd.DataFrame(data)
df.columns = headers[:len(df.columns)] # 컬럼 이름 할당
# 데이터프레임 출력
print(df)
