kuri
kuri
🏅 AI 마스터
📹 SNS 찐친

[문과생도AI]사례4: 삽질을 줄여줄 포스팅 크롤링


안녕하세요, B급감성 야매킹 kuri입니다.

[문과생도AI]사례3: 어맛, 이건 꼭 사야해: 자동매매 플그램 이후, 그동안 계속 시도하던 리밸런싱 코드가 에러의 끝없는 축복을 받으며 아직 헤매고 있네요.
새 리스트를 가져다가 기존 포트폴리오에서 퇴출된 종목들을 매도하는 것까지는 구현했는데, 다시 포트폴리오 전체의 value를 계산해서 새로 추가된 종목까지 감안해서 비중을 조절하는 부분에서 그냥 막혀있습니다.

더더군다나, 지난 주부터 회사일이 갑자기 많아져서 정신줄 놓을 뻔 했다는…ㅜㅜ


Background

그러던 중에 원래 며칠 전에 읽어야 했던 시장관련 뉴스레터를 잊고 있던게 생각이 나더군요.
읽고 요약도 해야할 것 같은데…

가만히 생각해 보니, 크롤링해서 저장을 해놓는다면 나머지야 뭐 챗지나 클로에게 요약정리를 시키면 될 것 같다는 생각이 들었습니다.

그.뤠.써!

하던 일 살포시 내려놓고 컴터를 킵니다.


Target

  • 클릭 한 번으로 아래의 과정을 자동화

  1. 구독중인 뉴스레터 서비스의 웹사이트로 접속

  2. 최신 보고서를 열고 내용을 마크다운 형식으로 저장

  3. 블로그나 디스코드 서버에 최소한의 편집 후 공유


순서

일단 제가 뉴스레터를 긁어오려는 사이트를 접속해서 해당 정보를 얻기까지 순서는 다음과 같습니다.

  1. 해당 웹사이트에 접속

  2. 로그인 버튼 클릭

  3. 아이디와 비번을 입력

  4. 다시 로그인 버튼을 클릭

  5. 페이지가 열리면 아래로 스크롤 다운

  6. 최신 보고서 (Latest Report)를 클릭

  7. 새 창이 열리면서 보고서가 출력


과정

** 일단 오늘은 에러는 딱히 보여드리지 않을 예정입니다. 능력자 몇몇 분들 이외에는 에러를 굳이 읽고 해석을 해야할 이유가 있을까 싶어서, 이유만 알려드리고 스샷도 패쓰할 예정입니다.

0. 마크다운 저장문서 확인

  • 챗지가 웹페이지를 마크다운 형식으로 얼마나 잘 변환시켜 주는지 코드를 먼저 짜달라고 해서 확인했습니다. 필요없는 부분까지 모두 불러오긴 했지만, 괜찮습니다.

import requests
import html2text

def download_as_markdown(url):
    # Send HTTP GET request to the URL
    response = requests.get(url)
    
    # Check if the request was successful
    if response.status_code == 200:
        # Convert HTML content to Markdown
        text_maker = html2text.HTML2Text()
        text_maker.ignore_links = False
        markdown = text_maker.handle(response.text)
        
        # Save the Markdown content to a file
        with open('downloaded_content.md', 'w', encoding='utf-8') as f:
            f.write(markdown)
        
        print("Content downloaded and saved as Markdown.")
    else:
        print("Failed to retrieve content. Status code:", response.status_code)

# Example usage
download_as_markdown('https://example.com')

1. 기본코딩

이번 코딩은 그리모어 (Grimoire)를 위주로 코딩했습니다.
원래는 OpenCV와 PyautoGUI를 이용해서 간단하게 버튼을 찾아 클릭하게 하려고 했습니다만 여기서부터 에러의 축복이 다시…

2.에러의 축복들

  • 무슨 이유인지, 제 컴에서는 이미지의 상대경로가 인식이 안될 뿐만 아니라, 이미지의 인식률도 별로 안좋고…ㅠㅠ

  • 한참을 고생하다가, 그냥 셀레늄으로 가기로 결정하고 정기님이 공유해 주신 셀레늄 버전관련 코드로 다시 코딩을 부탁했습니다. 그런데 이번에는 새 창이 열리면서 다시 구글에 로그인을 하라지 않나, 로그인을 하려니까 보안이슈가 있다고 로그인을 안시켜 주질 않나…

  • 찾아보니 해당 파일이 있는 경로를 사용해도 된다고 하는데, 뭐 이미 마음 상할대로 상해서 그냥 안하기로…


  • 셀레늄 버전에 문제가 생기면 그때 다시 수정하는 걸로 하고 그냥 가기로 합니다.


3. 문서저장

  • 문제는 문서를 저장하는 것까지는 좋은데 내용을 보니, 내용이 보고서 내용이 아니라 홈페이지의 내용이더군요.

  • 에러를 수정해 달라고 몇 번 했는데, 이상이 없다는데 결과는 변하지 않습니다.
    처음에 웹 주소를 넣고 마크다운으로 변환했을 때는 잘했는데 왜 그럴까요?

  • 가만히 생각해 보니, 관심이 있는 보고서는 ‘새 창’이 열리고 내용이 출력된다고 했었죠?
    지금까지 같은 윈도우 창에 떠있는 내용만 마크다운으로 변환하고 있었던 것을 확인했습니다.

  • 그래서 챗지한테 마지막 로딩된 페이지의 url을 찾아서 출력해보라고 했더니, 말 잘 듣네요.


  • 그래서 챗지가 짜 준 코드와 마크다운 변환코드, 그리고 변환코드에 마지막 로딩된 ‘새 창’의 url을 사용하라고 했더니 원하는 걸 찾아서 변환하고 저장해 줍니다
    파일의 이름은 ‘해당웹사이트.md’의 형식입니다.

4. Cosmetic Adjustment

  • 저장파일 이름 문제
    딱히 문제랄 것 까진 없지만, 그래도 웹사이트의 이름이 제목으로 들어가면 나중에는 어느 파일이 어느 보고서인지 구분이 어렵습니다.
    그래서 마크다운 문서 중 제목을 찾아 파일이름으로 사용하라고 요청합니다.

  • 버전문제
    테스트를 하느라 저장을 여러번 했는데, 저장파일이 덮어쓰기가 되네요.
    만약 앞으로 몇 번의 다른 버전으로 저장을 할 때, 덮어쓰기가 되면 난감한 경우가 생길수도 있습니다.


    “yymmdd-보고서제목.md” 형식으로 저장하되 제목이 중복이 되면 -1,-2,…식으로 버전을 다르게 하라고 요청합니다.

5. 스트림릿 적용

일련의 코딩과 에러, 수정의 작업을 반복하고 결과물이 나왔습니다.
이대로도 만족하지만, 그래도 같은 값이면 다홍치마라고 좀 이쁘게 출력해 보려고 Stremlit을 적용했습니다.

결과를 영상으로 보여드리려고 했는데, 용량이 75MB라서 그냥 유튜브에 올리고 링크 걸었습니다.
궁금하신 분만 보셔도 될 듯…

삽질을 줄여줄 포스팅 크롤링

추가해야 할 기능

이번에 배운 exe 실행파일로 만드는 걸 해봐야겠습니다.
좀더 간편하게, 좀더 게으르게…


B급감성 야매킹, kuri였습니다.


6
3개의 답글

👉 이 게시글도 읽어보세요