인프런 커뮤니티 질문&답변

이동창님의 프로필 이미지
이동창

작성한 질문수

[2024 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)

-

강의보기전에 짠코드 질문있습니당

작성

·

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 부분에는 예외 처리가 포함되어 있는데, 이는 예상치 못한 오류가 발생할 수 있는 상황에서 코드 실행을 중단하지 않고 계속 진행하기 위한 용도입니다. 하지만 이는 오류의 실질적인 원인을 파악하기 어렵게 만들 수 있어 추후 유지보수 및 수정 시에 어려움을 겪을 수 있습니다. 따라서 가급적 예외 처리보다는 오류를 명확히 파악하고 적절한 처리를 하는 것이 좋습니다.

강의를 듣기 전에 코드를 작성한 것이라고 하셨는데, 코드 상에 큰 문제는 보이지 않습니다. 다만, 추후 유지보수 및 수정을 고려하여 오류 처리 부분과 가독성을 높이기 위한 리팩토링을 고려하시는 것이 좋을 것 같습니다. 강의를 들으시면서 코드의 이해도와 효율성을 향상시킬 수 있을 것입니다. 감사합니다!

이동창님의 프로필 이미지
이동창

작성한 질문수

질문하기