작성
·
215
·
수정됨
0
import requests,openpyxl
from bs4 import BeautifulSoup
from openpyxl.styles import Font
wb = openpyxl.Workbook()
wb.create_sheet('증권')
del wb['Sheet']
ws = wb['증권']
ws.append(['순번','종목','PER','ROE','DATE'])
path = 'C:/Users/user/DESKTOP/'
count = 10
x =1
requests.get('https://finance.naver.com/sise/field_submit.naver?menu=market_sum&returnUrl=http%3A%2F%2Ffinance.naver.com%2Fsise%2Fsise_market_sum.naver%3F%26page%3D1&fieldIds=per&fieldIds=roe&fieldIds=high_val&fieldIds=low_val&fieldIds=pbr&fieldIds=reserve_ratio')
for t in range(1,count + 1,1) :
respone = requests.get(f'https://finance.naver.com/sise/sise_market_sum.naver?sosok=0&page={t}')
html = respone.text
soup = BeautifulSoup(html,'html.parser')
for i in range(1,100,1):
first_link = f"#contentarea > div.box_type_l > table.type_2 > tbody > tr:nth-child({i+1})"
links = soup.select(first_link)
for link in links :
try:
name = link.select_one(f"{first_link} > td:nth-child(2)").text
per = link.select_one(f"{first_link} > td:nth-child(9)").text
roe = link.select_one(f"{first_link} > td:nth-child(11)").text
dae = link.select_one(f"{first_link} > td:nth-child(12)").text
ws.append([x,name,per,roe,dae])
x += 1
except:
pass
wb.save(f'{path}증권.xlsx')
강의 듣기 전 과제 내주셨을때 짠 코드인대용
아직도 살짝 이해가 안되는대 처음 짤 때 reqsuetst.get 부분에 요청 보내고 난 후 url은 변경없이 동일해서 새로운 변수에 기존 url 저장했었거든용 아래처럼
respone = requests.get(f'https://finance.naver.com/sise/sise_market_sum.naver?sosok=0&page={t}')
기존 url사용했을때 체크박스 저장했던 내용이 계속 보이던대 뭐때문인지 알수있을까용..
그리구 td부분 저장 도중에 바부분 처리 할줄몰랐어 저런씩으로 try와 except로 처리 했었는대 이코드 뿐만 아니라 추 후에 이런 비슷한거 나왔을떄 저렇게 짜면 문제가 될가능성이 있을까용 ?
답변 2
0
기존 url사용했을때 체크박스 저장했던 내용이 계속 보이던대 뭐때문인지 알수있을까용..
-> 체크박스를 바꾸고 나서 테스트해보시면 저장이 안되어 있는 것을 알 수 있을 거에요! ㅎㅎ
그리구 td부분 저장 도중에 바부분 처리 할줄몰랐어 저런씩으로 try와 except로 처리 했었는대 이코드 뿐만 아니라 추 후에 이런 비슷한거 나왔을떄 저렇게 짜면 문제가 될가능성이 있을까용 ?
-> try except 로 잘 구현 하셨네요! 어떻게 구현하든 잘 동작만 하면 상관 없어요.
만약 개발자가 되어서 근무를 하게 된다면 그때 부터 신경 쓰면서 작성하시면 됩니다 ㅎㅎ
0
안녕하세요 이동창 님, 인프런 AI 인턴이에요.
제공해주신 코드를 살펴보니, 기존 URL을 사용하면 체크박스 저장된 내용이 계속 보이는 문제가 발생한다고 하셨는데요. 이는 requests.get 메소드를 통해 GET 요청을 보낼 때 서버에서 이전 요청 상태를 유지해서 응답을 보내는 것으로 보입니다. 이를 해결하기 위해 매 요청마다 새로운 session을 사용하거나, requests.get 메소드 호출 시 cache 설정을 변경하는 등의 방법으로 강제로 새로운 응답을 받도록 처리해야 할 것입니다.
또한, 코드의 try-except 부분에는 예외 처리가 포함되어 있는데, 이는 예상치 못한 오류가 발생할 수 있는 상황에서 코드 실행을 중단하지 않고 계속 진행하기 위한 용도입니다. 하지만 이는 오류의 실질적인 원인을 파악하기 어렵게 만들 수 있어 추후 유지보수 및 수정 시에 어려움을 겪을 수 있습니다. 따라서 가급적 예외 처리보다는 오류를 명확히 파악하고 적절한 처리를 하는 것이 좋습니다.
강의를 듣기 전에 코드를 작성한 것이라고 하셨는데, 코드 상에 큰 문제는 보이지 않습니다. 다만, 추후 유지보수 및 수정을 고려하여 오류 처리 부분과 가독성을 높이기 위한 리팩토링을 고려하시는 것이 좋을 것 같습니다. 강의를 들으시면서 코드의 이해도와 효율성을 향상시킬 수 있을 것입니다. 감사합니다!