[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
- 본 강의 영상 학습 관련 문의에 대해 답변을 드립니다. (어떤 챕터 몇분 몇초를 꼭 기재부탁드립니다) - 이외의 문의등은 평생강의이므로 양해를 부탁드립니다 - 현업과 병행하는 관계로 주말/휴가 제외 최대한 3일내로 답변을 드리려 노력하고 있습니다 - 잠깐! 인프런 서비스 운영(다운로드 방법포함) 관련 문의는 1:1 문의하기를 이용해주세요. 서버에 피해가 가지않도록 크롤링할 수 있는 방법은 없을까요?
항상 startIndex가 endIndex보다 작다라는 게 보장되지 않나요? endIndex = r.text.find("};", startIndex + 1) if 0 <= startIndex else 0 여기 구문에서 endIndex는 항상 startIndex보다 큰 값을 가지는 게 보장되는데, 왜 if startIndex < endIndex: 이 조건을 추가해주나요?
안녕하세요 ! 동일한 코드로 선생님의 채점기에 돌렸을 때는 100점이 나왔는데 백준에서는 recursion 에러가 납니다. 종료조건도 잘 설정해준 것 같은데 어디서 그렇게 호출이 많이 일어나는지 이해가 되지않아서요 ㅠㅠ 강의 잘 듣고 있습니다. 감사합니다!! # 1. 재귀 (근데 백준에서는 recursion 에러 뜸..) n = int(input()) meetings = [] for _ in range(n): meetings.append(list(map(int, input().split()))) meetings.sort(key=lambda x: (x[1], x[0])) # 끝나는 시간을 기준으로 정렬 # x[1]이 같을 경우 x[0]을 기준으로 정렬 def find(i, cnt): for j in range(i+1, n): if meetings[i][1] <= meetings[j][0]: # 회의 끝나는 시간보다 시작하는 시간이 더 크거나 같은 것 찾기 cnt += 1 return find(j, cnt) # 또 찾기 return cnt print(find(0, 1))
[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
리스트가 너무 이상하게나와요 ㅠ - 본 강의 영상 학습 관련 문의에 대해 답변을 드립니다. (어떤 챕터 몇분 몇초를 꼭 기재부탁드립니다) - 이외의 문의등은 평생강의이므로 양해를 부탁드립니다 - 현업과 병행하는 관계로 주말/휴가 제외 최대한 3일내로 답변을 드리려 노력하고 있습니다 - 잠깐! 인프런 서비스 운영(다운로드 방법포함) 관련 문의는 1:1 문의하기를 이용해주세요.
강의를 들으면서 궁금증이 생겼습니다. gitignore에 설정된 파일은 깃허브에만 노출되지 않는것인지, 아니면 git clone으로 프로젝트 다운 시에는 폴더 안에 존재하는지 궁금합니다. 만약 clone으로 다운 시 존재하지 않는다면 다른 사람이 제 프로젝트를 clone 하더라도 로컬에서 제대로 돌아가지 않는 게 제 생각인데 맞을까요? ec2에서 현재 프로젝트에 여러 branch가 있을 때, 그 중에서 어떤 branch의 코드를 사용할지는 어떻게 정해지는지 궁금합니다.
현재 github actions 실행할때마다 계속 Run Command timeout 뜨는 상태입니다. swap 생성을 해주었는데도 계속 실패하네요.. 아래는 yml 코드입니다. # Workflow의 이름 # Workflow : 하나의 yml 파일을 하나의 Workflow라고 부른다. name: Deploy To EC2 # Event : 실행되는 시점을 설정 # main이라는 브랜치에 push 될 때 아래 Workflow를 실행 on: push: branches: - step3 # 하나의 Workflow는 1개 이상의 Job으로 구성된다. # 여러 Job은 기본적으로 병렬적으로 수행된다. jobs: # Job을 식별하기 위한 id deploy: # Github Actions를 실행시킬 서버 종류 선택 runs-on: ubuntu-latest # Step : 특정 작업을 수행하는 가장 작은 단위 # Job은 여러 Step들로 구성되어 있다. steps: - name: SSH(원격 접속)로 EC2에 접속하기 # Step에 이름 붙이는 기능 uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.EC2_HOST }} # IP 주소 username: ${{ secrets.EC2_USERNAME }} key: ${{ secrets.EC2_PRIVATE_KEY }} # 키페어 값 script_stop: script: | cd /home/ubuntu/spring-gift-point git pull origin step3 ./gradlew bootJar -x test sudo fuser -k -n tcp 8080 || true nohup java -jar build/libs/*SNAPSHOT.jar > ./output.log >&1 &
데이터 전처리 과정에서 이해되지 않는 부분이 있습니다. import pandas as pd import FinanceDataReader as fdr df_krx = fdr.StockListing('KRX') df_krx 로 데이터를 확인했습니다. ㄴ일부 컬럼 (ex.Dept)에 결측치가 있습니다. <- 값이 비어있습니다. Nan 값으로 채워진 것은 아닙니다. ㄴ이 때 info() 메소드와 df_krx.isnull()로 확인해보면 null값이 없는 것으로 나오고 isnull() 또한 모두 false가 나오는데 원인을 모르겠습니다. ㄴ이후 to_csv 메소드를 사용하여 파일을 저장한 후 저장한 파일을 읽어왔을 때는 해당 값들이 NaN 값으로 바뀌어 있는데요. 원인이 무엇일까요?
# warning 어쩌구 뜨면 쓰는건데 굳이 안써도 됨 import urllib3 urllib3.disable_warnings() # text None Type 에러 일 시 header를 추가해준다. # SSLdError 발생 시 verify옵션 추가해준다. header = { 'User-Agent' : 'Mozilla/5.0', 'Referer' : 'https://www.riss.kr/search/Search.do?isDetailSearch=N&searchGubun=true&viewYn=OP&queryText=&strQuery=%ED%8C%A8%EC%85%98+%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5&exQuery=&exQueryText=&order=%2FDESC&onHanja=false&strSort=RANK&p_year1=&p_year2=&iStartCount=0&orderBy=&mat_type=&mat_subtype=&fulltext_kind=&t_gubun=&learning_type=&ccl_code=&inside_outside=&fric_yn=&db_type=&image_yn=&gubun=&kdc=&ttsUseYn=&l_sub_code=&fsearchMethod=&sflag=1&isFDetailSearch=N&pageNumber=1&resultKeyword=%ED%8C%A8%EC%85%98+%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5&fsearchSort=&fsearchOrder=&limiterList=&limiterListText=&facetList=&facetListText=&fsearchDB=&icate=re_a_kor&colName=re_a_kor&pageScale=100&isTab=Y®nm=&dorg_storage=&language=&language_code=&clickKeyword=&relationKeyword=&query=%ED%8C%A8%EC%85%98+%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5' } for article in articles: title = article.select_one(".title > a").text link = 'https://www.riss.kr' + article.select_one(".title > a").attrs['href'] # 상세 페이지로 요청 response = requests.get(link, headers=header, verify=False) html = response.text soup = BeautifulSoup(html, 'html.parser') # 2. 순서를 기준으로 찾기 if soup.find('span', string='발행기관'): press = soup.find('span', string='발행기관').find_next_sibling().text # find_next_sibling 옆에 있는 명령어를 찾아라 라는 명령문 else: press = [] if soup.find('span', string='발행연도'): year = soup.find('span', string='발행연도').find_next_sibling().text else: year = [] if soup.find('span', string='주제어'): keywords = soup.find('span', string='주제어').find_next_sibling().text.split(';' '') keywords_result = [] for keyword_for in keywords: keywords_result.append(keyword_for.strip()) else: keywords = [] print(title, link, press, year, keywords_result) # result = [] # for keyword in keywords: # result.append(keyword.strip())
JSON 데이터와 파이썬의 사전형 타입에 대해서 알고있는것도 좋을거 같아요! 밑에는 Chat GPT쪽에서 물어본 결과입니다. 참고하세요 🙂 파이썬 사전형 데이터 (Dictionary) • 내부 구성: 키-값 쌍으로 이루어져 있어. 예를 들어 { "name": "Alice", "age": 25 } 같은 식이야. • 사용 방법: 파이썬 내부에서 데이터를 쉽게 다루기 위해 만들어졌어. • 기능: 추가, 삭제, 수정 등의 다양한 기능을 가지고 있어. 예를 들어, my_dict["name"]으로 “Alice”를 불러올 수 있어. JSON 데이터 (JavaScript Object Notation) • 내부 구성: 역시 키-값 쌍으로 이루어져 있지만, 텍스트 기반 포맷이야. 예를 들어, "{"name": "Alice", "age": 25}"처럼 문자열로 표현돼. • 사용 방법: 주로 데이터를 주고받을 때 사용해. 웹 서버와 클라이언트 사이에서 데이터를 주고받을 때 많이 쓰여. • 기능: 데이터를 직렬화(serialize)하고 역직렬화(deserialize)하는데 초점이 맞춰져 있어. 예를 들어, 파이썬에서 JSON 문자열을 파이썬 사전형으로 변환하려면 json.loads()를 사용해. 차이점 요약 1. 포맷과 사용 목적: 파이썬 사전형은 파이썬 프로그램 내에서 사용하는 데이터 구조고, JSON은 주로 데이터 교환을 위한 텍스트 포맷이야. 2. 표현 방식: 사전형은 파이썬 문법을 따르고, JSON은 텍스트 기반이라 언어에 관계없이 사용할 수 있어. 3. 기능과 제약: 사전형은 다양한 조작이 가능하지만, JSON은 데이터를 주고받는 용도로 제한적인 기능을 갖고 있어. 요약: -> 똑같이 생겼지만 사전형 데이터 타입은 파이썬의 세계관안에서 바로 사용이 가능하며, 파이썬 세계관안에서 자유롭게 구사 가능하다. -> JSON 데이터 타입은 직렬화와 역직렬화에 초점이 맞춰져있으며 주고 받기 위한 데이터 타입이다. 다른 언어 세계관에 들어가면 디코딩 (역직렬화)가 필요하고 다른 언어 세계관으로 보낼때는 인코딩 (직렬화)가 필요하다.
안녕하세요, 강의를 듣고 계신 여러분! 여러분의 학습을 돕기 위해 질문 안내를 드리고자 합니다. 1. chatGPT를 이용해보기 단순한 의문은 chatGPT를 이용해도 해답을 찾을 수 있는 경우가 종종 있습니다! 2. 강의의 어떤 부분에 대한 질문이고, 어떤 부분이 궁금한지 명확히 알려주세요! 강의의 어느 파트에서 의문을 느끼고, 어떤 부분이 궁금한지 를 명확히 제시해 주시면 답변에 도움이 됩니다! 자신은 어떻게 이해했는지 또한 적어주면 좋습니다! ex) 섹션5의 '그래프 순회 (DFS & BFS) [개념]' 강의 에서 DFS와 BFS 모두 그래프의 모든 노드를 탐색하는 알고리즘이라고 하셨고 시간 복잡도 또한 똑같다고 이해 했습니다. 그러면 DFS와 BFS 중에서 어떤 알고리즘이 더 효율적인지 구별하는 것은 의미가 없는 것일까요? 어느 파트 섹션5의 '그래프 순회 (DFS & BFS) [개념]' 강의 자신은 어떻게 이해했는지 DFS와 BFS 모두 그래프의 모든 노드를 탐색하는 알고리즘이라고 하셨고 시간 복잡도 또한 똑같다고 이해 어떤 부분이 궁금한지 DFS와 BFS 중에서 어떤 알고리즘이 더 효율적인지 구별하는 것은 의미가 없는 것일까요? 안녕하세요! 강의 잘 듣고 있습니다. 백준 1461 그리디 마지막 문제에 대한 질문이 있는데요. 보기 전에 풀어보긴 했는데, 두더지 잡다가 어떻게 된 느낌이긴 해요.. 음,, 아직 습관이 안 고쳐지기는 했는데 정의하고 분석하고 따져보고 그려본 다음에 해야 하는데,, 그 제가 처음 푼 방식은 리스트 요소를 지워가며 해결하는 방식인데요 양/음수가 m으로 떨어지지 않는 나머지 경우를 먼저 따져 합계에 더하고, 제거한 뒤 먼 데부터 다녀오는데, 최댓값을 계속 갱신해서 가장 먼 거리를 나중에 빼주는 방식으로 했어요.. m으로 나누어 떨어지지 않는 경우에 대한 처리를 나중에 추가했는데요 선생님의 코드가 어떻게 그 경우도 잘 처리하는 지 분석이 잘 안되어서.. 설명 부탁 드려요.. 아! 저번 설명 너무 감사합니다 더불어 약간 공부하는 루틴?이랄까? 그런 것도 말씀해 주실 수 있는 게 있다면 혹시 말씀 부탁드려요..(코테 공부도 그렇고 다른 것도 그렇고..) 아래는 제가 처음 정답 받은 코드입니다. (코드가 지저분함에 죄송해요..) import sys input = sys.stdin.readline # 방향을 결정하고 상자 들고 다음에 처음 갈 책 위치를 반환합니다. def getPos(arr): global direction maximum = max(map(abs, arr)) if maximum in arr: if len(arr) > m: direction = False if min(arr) >= 0: direction = True return 0 for i in range(len(arr) - 1, -1, -1): if arr[i] < 0: return i else: direction = True for i in range(len(arr)): if arr[i] >= 0: return i else: if len(arr) > m: direction = True if max(arr) < 0: direction = False return len(arr) - 1 for i in range(len(arr)): if arr[i] >= 0: return i else: direction = False for i in range(len(arr) - 1, -1, -1): if arr[i] < 0: return i return -1 n, m = map(int, input().rstrip().split()) arr = list(sorted(map(int, input().rstrip().split()))) cnt = 0; direction = True; reach = 0; plusCount = 0; minusCount = 0 #양수/음수 따로 헀어야 좋았는데, 하다보니 개수 세는 걸 만들었어요.. def count(): global plusCount, minusCount for i in arr: if i >= 0: plusCount += 1 elif i < 0 : minusCount += 1 count() #양수 m으로 나누어 떨어지지 않을 경우에 대한 처리입니다. if plusCount % m != 0: mini = min(i for i in arr if i >= 0) idx1 = arr.index(mini) idx2 = min(arr.index(mini) + (plusCount % m), len(arr)) reach = arr[idx2 - 1] for i in range(idx1, idx2): arr.remove(arr[idx1]) cnt += reach * 2 #음수 m으로 나누어 떨어지지 않을 경우에 대한 처리입니다. if minusCount % m != 0: maxi = max(i for i in arr if i < 0) idx1 = arr.index(maxi) idx2 = max(arr.index(maxi) - (minusCount % m), -1) far = abs(arr[idx2 + 1]) for i in range(idx1, idx2, -1): arr.remove(arr[idx2 + 1]) cnt += far * 2 reach = max(reach, far) # 이럴 필요 없는데, 돌면서 먼 데 구하고 그 안쪽? 지우는 방식으로 했어요.. while arr: pos = getPos(arr) far = abs(arr[min(len(arr) - 1, pos + m - 1) if direction else max(0, pos - m + 1)]) for i in range(m): if not arr: break arr.remove(arr[pos]) if not direction or pos == len(arr): pos = max(pos - 1, 0) cnt += far * 2 reach = max(reach, far) print(cnt - reach)
문제에 풀어주신 쿼리랑 이 쿼리랑 비교했을 때 많이 비효율적인가요? # 9 while True : password = int(input('비밀번호를 입력하세요.')) if password == 1234 : print('로그인 성공!') break else : print('로그인 실패!')
안녕하세요, 설치 과정에 오류가 있어 글 남깁니다. 사진에 빨간 화살표로 표시한 스크립트를 cmd에서 실행할 때, Progress:0% 에서 오르지 않습니다. [노트북 환경] 윈도우 11 Home 윈도우 계정 : Microsoft 계정 X local 한글이름 계정 RAM 32GB CPU Intel i7-11800 그래픽 GeForce RTX 3050 Laptop GPU 64비트
실행 파일을 생성시에 사용된 모든 파일이 동일 디렉토리에 있어야 하나요? (재활용을 위해 Function을 만들어서, Function 폴더에 저장함) 아래는 제가 작업했던 내용 및 에러입니다. ============================ Python 폴더 아래와 같이 폴더가 있습니다. Project GUI Function Project 폴더에 실행할 a.py 파일이 있고 a.py 에서는 GUI, Function 폴더에 있는 ui와 function 들을 사용합니다. vs code 상에서 실행하면 문제 없이 실행이 됩니다. 실행 파일을 만들기 위해 Project dir로 이동하고, 아래와 같이 실행하여 exe 파일을 생성했습니다. E:\python\Project> pyinstaller -w -F 네이버부동산_ 상가.py 파일을 실행하니 아래와 같이 나타납니다. import sys, os try: sys.path.append(os.path.dirname(os.path.abspath(os.path.dirname(__file__)))) except: notebook_dir = os.getcwd() sys.path.append(os.path.dirname(os.path.abspath(notebook_dir))) from PySide6.QtWidgets import QApplication, QWidget, QMessageBox from GUI.naverland_SG_ui import Ui_Form from GUI.Naver_map import * from Functions.Naver_land import * import sys import requests import json import math class MainWindow(QWidget, Ui_Form): def __init__(self): super().__init__() self.setupUi(self) self.file_path = os.getcwd() + r'\data' # 지역 초기화 self.loc1.clear() self.loc1.addItem('') self.loc2.clear() self.loc2.addItem('') self.loc3.clear() self.loc3.addItem('')