현재 커리큘럼을 모두 수강 후에 아래 실습이 가능한지 여쭤봅니다! (파이썬으로 단순 분석 및 크롤링은 가능하다는 전제하에 airflow 배치 및 기타 기술적인 요소에 대해 궁금합니다.) 1~2주에 한번 배치 작업 Task 1 유튜브 A 채널의 영상 자막 + 댓글 크롤링 Task 2 크롤링 된 컨텐츠 별 자막 내용에 기반하여 ChatGPT를 활용한 영상 내용 요약 -> 블로그 포스팅 Task 3 컨텐츠별 자막 텍스트 분석으로 컨텐츠별 조회수, 댓글 수 , 긍부정 비율 대시보드 시각화 파이썬으로 크롤링 코드 및 텍스트분석이 가능하다는 전제하에, 위 TASK들을 AIRFLOW를 사용해 자동화하는 프로젝트를 현재 영상에서 알려주시는 지식으로 구현가능한지궁금합니다! 아직 끝까지 수강 전이라 질문의 내용이 부족할 수 있지만, 블로그포스팅 자동화, 대시보드 시각화 내용이 있는 듯 해서 여쭤봅니다! 그리고 현재 커리큘럼에는 Api로 데이터 받아오는 실습만 있는데, 크롤링으로 데이터를 가져오게되면 달라지는 부분이 많을지도 궁금합니다.
[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
data_set = {'apple', 'dell', 'samsung', 'lg'} if 'apple' in data_set: print(data_set) 출력 시 {'lg', 'apple', 'samsung', 'dell'} 이렇게 순서가 뒤섞여 나옵니다. 왜 그런걸까요?
안녕하세요. 면접준비에 도움이 될 거 같고 개념적으로도 궁금해서 질문드립니다. 장바구니에서 삭제를 하면 갱신되는데에 동작원리에서 처음엔 router.replace(router.asPath) 때문에 url이 변경되진 않아도 단순하게 /cart 로 이동이란 동작을 해서 페이지를 다시 그린다고 생각했습니다. CartList 는 CartPage 의 자식 컴포넌트이다. CartPage 는 getServerSideProps 로 서버에서 받아온 데이터를 프롭스(carts)로 받으며, 그 프롭스를 CartList 에게 전달해주고 있다. CartList 는 부모컴포넌트에게 받은 carts 프롭스를 통해 장바구니 목록을 보여주고 있다. 장바구니에서 상품을 삭제하면, 선택한 상품을 서버에서 삭제하고 router.replace 를 통해( router.push 도 동일) 현재 페이지(asPath)인 /cart 로 이동한다. /cart 페이지(즉, CartPage.jsx )가 리렌더링된다. 리액트는 리렌더링되면 컴포넌트의 모든 코드를 다시 실행하게 된다.(고 알고 있습니다.) 그로 인해 getServerSideProps 가 다시 실행되고 갱신된(장바구니에서 상품을 삭제한) 데이터를 다시 CartPage 에게 프롭스로 내려주게 된다. 프롭스가 변경됐으니 자식 컴포넌트인 CartList 도 리렌더링되어 모든 코드가 다시 실행된다. 바뀐 장바구니 데이터로 보여지게 된다. 라고 생각했는데요. https://nextjs.org/docs/pages/building-your-application/data-fetching/get-server-side-props#behavior 공식문서를 살펴보니 사용자가 Link 컴포넌트 또는 router를 통해 페이지를 방문할 때 , Next.js는 서버에 API 요청을 보내 getServerSideProps를 실행 합니다. 라고 되어있습니다. 이러면, 현재 CartList 는 CartPage 의 자식 컴포넌트이다. CartPage 는 getServerSideProps 로 서버에서 받아온 데이터를 프롭스(carts)로 받으며, 그 프롭스를 CartList 에게 전달해주고 있다. CartList 는 부모컴포넌트에게 받은 carts 프롭스를 통해 장바구니 목록을 보여주고 있다. 장바구니에서 상품을 삭제하면, 선택한 상품을 서버에서 삭제한다. router.replace 를 통해( router.push 도 동일) 현재 페이지(asPath)인 /cart 로 이동한다. router를 통해 페이지를 방문했으므로 CartPage 의 getServerSideProps 가 다시 실행되고 갱신된 데이터를 CartPage 에게 프롭스로 내려주게 된다. 프롭스가 변경됐으니 자식 컴포넌트인 CartList 도 리렌더링되어 모든 코드가 다시 실행된다. 바뀐 장바구니 데이터로 보여지게 된다. 이렇게 이해하면 될까요? 그리고, getServerSideProps 가 있는 페이지 컴포넌트는 getServerSideProps 가 재실행되면 자동으로 리렌더링되게 되는 구조인가요? 설명해주셨는데 제가 놓친거면 죄송합니다.
안녕하세요. 네이버 지식인 GUI 강의하신 내용 참고하여, 네이버 쇼핑을 GUI 로 만들어 보았습니다. 여러번 버버벅 거리면서 수정하여, GUI 에 제품명을 담고, 엑셀로도 제품명과 링크 저장하는데 까지 성공했습니다. 그런데, 네이버로 부터 ip 일시적 차단 경고 받았습니다. 사전에 ip 차단 염려하여 1 페이지만 크롤링했고, 코드에서는 2군데 time.sleep(2)도 두었는데도 , 네이버로 부터 경고 받았습니다. 그래서, 더 진행하다가 아예차단될까 두려워서 방법 문의 드립니다. 네이버 쇼핑 경고 ; 쇼핑 서비스 접속이 일시적으로 제한되었습니다. 네이버는 안정적인 쇼핑 서비스 제공하고자 시스템을 통해 아래와 같은 비정상적인 접근이 감지될 경우 해당 네트워크의 접속을 일시적으로 제한하고 있습니다. 상품 구매, 탐색과 무관한 외부 이벤트를 통한 접속 짧은 시간 내에 너무 많은 요청이 이루어진 IP VPN을 사용하여 접속한 IP 특정 확장 프로그램 이용 시 위와 같은 접근이 아님에도 접속이 제한된 경우,네이버앱을 업데이트 또는 원클릭 진단을 부탁드립니다. 해당 방법을 통해서도 접속이 불가한 경우 네이버쇼핑 고객센터로 문의 부탁드립니다. 적용된 코드 입니다; 차단 원인과 해결방법 도와주세요~~ 감사합니다 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from PySide6.QtWidgets import QApplication,QWidget from nShopping_c_ui import Ui_Form import requests import sys import time from bs4 import BeautifulSoup import pandas as pd from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC class MainWindow_c2(QWidget,Ui_Form): def __init__(self): super().__init__() self.setupUi(self) self.start_btn.clicked.connect(self.start) self.reset_btn.clicked.connect(self.reset) self.save_btn.clicked.connect(self.save) self.quit_btn.clicked.connect(self.quit) def start(self): input_keyword=self.keyword.text() input_page=int(self.page.text()) self.result=[] # 적재창고 건설 # 크롬 드라이버 생성 self.driver=webdriver.Chrome() for i in range(1, input_page+1): self.textBrowser.append(f'{i}페이지 크롤링...') self.driver.get(f"https://search.shopping.naver.com/search/all?adQuery={input_keyword}&origQuery={input_keyword}&pagingIndex={i}&pagingSize=40&productSet=total&query={input_keyword}&sort=rel×tamp=&viewType=list") #스크롤 전 높이 확인 last_height=self.driver.execute_script("return document.body.scrollHeight") while True: #스크롤 끝까지 내리기 self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight)") #잠시대기 time.sleep(2) # 스크롤 후 높이 new_height=self.driver.execute_script("return document.body.scrollHeight") # 비교(if, break) if new_height==last_height: break # 스크롤 전 높이 업데이트 last_height=new_height html=self.driver.page_source soup=BeautifulSoup(html,'html.parser') #나무태그 찾기 items=soup.select(".product_item__MDtDF") for item in items: # 각 아이템에서 제목과 링크 추출 name=item.select_one(".product_title__Mmw2K>a").text link=item.select_one(".product_title__Mmw2K>a").attrs['href'] self.textBrowser.append(name) self.result.append([name, link]) QApplication.processEvents() time.sleep(2) self.textBrowser.append('크롤링 완료...') def reset(self): self.textBrowser.setText("") self.keyword.setText("") self.page.setText("") def save(self): input_keyword=self.keyword.text() df=pd.DataFrame(self.result,columns=['제목','링크']) df.to_excel(f'{input_keyword}_d.xlsx') def quit(self): self.driver.quit() # 크롬 드라이버 종료 sys.exit() app=QApplication() window=MainWindow_c2() window.show() sys.exit(app.exec())
안녕하세요! 항상 수고많으십니다. 다름이 아니라 scikit learn 1.0.2 version을 다운로드 할때 아래의 오류가 발생하는데 해결법이 있을까요? 감사합니다. (base) C:\Windows\system32>pip install scikit-learn==1.0.2 Collecting scikit-learn==1.0.2 Using cached scikit-learn-1.0.2.tar.gz (6.7 MB) Installing build dependencies ... done Getting requirements to build wheel ... error error: subprocess-exited-with-error × Getting requirements to build wheel did not run successfully. │ exit code: 1 ╰─> [33 lines of output] Traceback (most recent call last): File "C:\Users\Admin\anaconda3\Lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 353, in <module> main() File "C:\Users\Admin\anaconda3\Lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 335, in main json_out['return_val'] = hook(**hook_input['kwargs']) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Admin\anaconda3\Lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 112, in get_requires_for_build_wheel backend = build backend() ^^^^^^^^^^^^^^^^ File "C:\Users\Admin\anaconda3\Lib\site-packages\pip\_vendor\pyproject_hooks\_in_process\_in_process.py", line 77, in build backend obj = import_module(mod_path) ^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Admin\anaconda3\Lib\importlib\__init__.py", line 90, in import_module return bootstrap. gcd_import(name[level:], package, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "<frozen importlib._bootstrap>", line 1387, in gcd import File "<frozen importlib._bootstrap>", line 1360, in find and_load File "<frozen importlib._bootstrap>", line 1310, in find and_load_unlocked File "<frozen importlib._bootstrap>", line 488, in call with_frames_removed File "<frozen importlib._bootstrap>", line 1387, in gcd import File "<frozen importlib._bootstrap>", line 1360, in find and_load File "<frozen importlib._bootstrap>", line 1331, in find and_load_unlocked File "<frozen importlib._bootstrap>", line 935, in load unlocked File "<frozen importlib._bootstrap_external>", line 995, in exec_module File "<frozen importlib._bootstrap>", line 488, in call with_frames_removed File "C:\Users\Admin\AppData\Local\Temp\pip-build-env-7t2zd14d\overlay\Lib\site-packages\setuptools\__init__.py", line 16, in <module> import setuptools.version File "C:\Users\Admin\AppData\Local\Temp\pip-build-env-7t2zd14d\overlay\Lib\site-packages\setuptools\version.py", line 1, in <module> import pkg_resources File "C:\Users\Admin\AppData\Local\Temp\pip-build-env-7t2zd14d\overlay\Lib\site-packages\pkg_resources\__init__.py", line 2172, in <module> register_finder(pkgutil.ImpImporter, find_on_path) ^^^^^^^^^^^^^^^^^^^ AttributeError: module 'pkgutil' has no attribute 'ImpImporter'. Did you mean: 'zipimporter'? [end of output] note: This error originates from a subprocess, and is likely not a problem with pip. error: subprocess-exited-with-error × Getting requirements to build wheel did not run successfully. │ exit code: 1 ╰─> See above for output. note: This error originates from a subprocess, and is likely not a problem with pip. (base) C:\Windows\system32>
드디어 완강 하였네요.. 이 강의 난의도가 초급이라던데 어려운 부분도 많긴 했어요. 이제 중급 실력되는건가요? ^^;;; 스프링은 모든 내용이 이해가되긴한데 React 쪽이 어렵네요... 아마도 문법이 다양하고 오류 잡기도 어려워서 그렇겠죠? ㅎㅎㅎㅎ intelij 도 만기가 끝나가네요... visual studio code, intelij community학습 목적엔 위 2개로 개발 연습해도 되나요?? 다음으로 학습해야될 스프링 학습은 어떤걸 해야될까요? 잡 사이트 보니깐 코틀린 + 스프링은 쓰는 곳이 없네요... 인기가 없나... 진짜 매력적인 언어인데.
안녕하세요! NextJS 에 대한 Flow 설명중 질문이 있습니다 9:01 Timeline 유저의 접속요청시 해당 페이지에 대한 내용만 랜더링하여 HTML 을 반환하는 걸까요? 그게 아니고 설명하신 모든 컴포넌트에 대한 렌더링이 이루어지는 것이라면 CSR 방식과 마찬가지로 HTML 반환이 늦어지지 않나 싶습니다 또한 사전 렌더링이 NextJS 서버가 부팅시 이루어지는 행위인지 궁금합니다! (서버 부팅시 랜더링된 HTML 이 생성되는지)
m1 pro 사용 중이고 docker desktop 설치되어 있습니다. 찾아보니 docker desktop 설치 시 docker compose 도 같이 설치된다고 하던데.. 커맨드 자체가 없는거보니 뭔가 바뀐것 같네요. 아래처럼 수동으로 설치도 잘 안돼서 진행을 못하고 있습니다..
안녕하세요 강사님 강의 모두 결제해서 듣고 있는 13년차 직장인 겸 학생입니다. MAC OS 아나콘다 환경에서 현재 4.4.5가 기본으로 깔리는데 처음문제는 early_stopping_rounds=50 였습니다. 그래서 3.3.2로 버전을 맞춰서 import lightgbm 하는데 문제가 생겨서 몇시간동안 헤매대가 결국 해결책을 찾아서 공유합니다. 1. . MacOS에서 OpenMP를 설치하고 LightGBM이 이를 참조할 수 있도록 설정해야 합니다. 1. Homebrew 설치 먼저 Homebrew가 설치되어 있는지 확인하세요. Homebrew는 Mac에서 패키지를 관리하는 도구입니다. Homebrew가 설치되지 않았다면, 아래 명령어로 설치할 수 있습니다 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh )" 2. libomp 설치 libomp 는 OpenMP 라이브러리입니다. Homebrew를 통해 쉽게 설치할 수 있습니다. brew install libomp 이 명령어는 libomp 를 설치하여, LightGBM이 OpenMP에 접근할 수 있게 만듭니다. 3. Anaconda 환경에서 환경 변수 설정 설치된 libomp 경로를 Anaconda 환경에서 참조하도록 설정해야 합니다. ~/.bash_profile 또는 ~/.zshrc 파일에 다음을 추가하세요. export PATH="/usr/local/opt/libomp/bin:$PATH" export LDFLAGS="-L/usr/local/opt/libomp/lib" export CPPFLAGS="-I/usr/local/opt/libomp/include" **팁Homebrew를 통해 설치된 libomp 의 경로를 확인하려면 다음 명령어를 터미널에 입력하세요: brew --prefix libomp 그 후 터미널에서 다음 명령어를 실행해 환경 변수를 적용하세요: source ~/.bash_profile # 또는 ~/.zshrc 4. LightGBM 재설치 pip uninstall lightgbm pip install lightgbm==3.3.2 ~ 끝 ~ 강사님 항상 업데이트 잘해주셔서 저도 도움이 되고자 올립니다.
▲ Next.js 14.2.8 - Local: http://localhost:3000 - Environments: .env ✓ Starting... ✓ Ready in 4.2s ○ Compiling / ... ✓ Compiled / in 3.5s (1022 modules) GET / 200 in 4384ms GET / 200 in 81ms ✓ Compiled /api/auth/[...nextauth] in 364ms (493 modules) GET /api/auth/session 200 in 2386ms ○ Compiling /login ... ✓ Compiled /login in 1020ms (1035 modules) GET /api/auth/session 200 in 1561ms GET /login?_rsc=1pqm1 200 in 126ms ○ Compiling /(.)i/flow/login ... ✓ Compiled /(.)i/flow/login in 731ms (1050 modules) GET /api/auth/providers 200 in 44ms GET /api/auth/csrf 200 in 19ms [auth][error] CallbackRouteError: Read more at https://errors.authjs.dev#callbackrouteerror [auth][cause]: TypeError: Failed to parse URL from undefined/api/login at node:internal/deps/undici/undici:13178:13 [auth][details]: { "code": "ERR_INVALID_URL", "input": "undefined/api/login", "provider": "credentials" } POST /api/auth/callback/credentials? 200 in 40ms GET /api/auth/session 200 in 26ms 윈도우 인데 memurai설치가 도저히 안 되어서 그냥 redis 설치했습니다. 백엔드 코드 실행시키면 redis connected라고도 뜨고, service에도 실행중도 뜨고, hello world도 잘 뜹니다. REDIS_URL=redis://127.0.0.1:6379 //백엔드 env NEXT_PUBLIC_BASE_URL=http://localhost:3000 //z-com 에 있는 .env 이거로도 고쳐봤습니다. localhost:3000/login 여기로 넘어는 가는데 로그인이 안 됩니다. 깃허브에서 코드 잘 가져왔고, 회원가입도 잘 되는데 로그인만 안 됩니다. 뭐가 문제일까요 ㅠㅠ