25%
49,500원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨남박사의 파이썬 기초부터 실전 100% 활용
검색어 랭킹과 비슷하게 다른 문제를 만들어 보았습니다.
다음에서 날씨 정보를 크롤링 해와서 프린트 해주는 예제 입니다. import requests from bs4 import BeautifulSoup import time def time_function(f): def wrapper(*args,**kwargs): start_time = time.time() result = f(*args,**kwargs) end_time = time.time() -start_time print("{} {} time {}".format(f.__name__,args[1],end_time)) return wrapper @time_function def r_find_all(url , parser): r = requests.get(url) if r.ok : bs = BeautifulSoup(r.text,parser) #print(bs) lists = bs.select(".list_weather > li") for li in lists : areaName = li.find("span" ,{"class": "txt_part"}).get_text() temper = li.find("span" ,{"class": "txt_temper"}).get_text() status = li.find("strong").get_text() print("지역 : {} | 날씨 : {} | 온도 : {}".format(areaName,status,temper)) @time_function def r_select(url,parser): r = requests.get(url) if r.ok : bs = BeautifulSoup(r.text,parser) lists = bs.select(".list_weather > li") for li in lists : areaName = li.find("span" ,{"class": "txt_part"}).get_text() temper = li.find("span" ,{"class": "txt_temper"}).get_text() status = li.find("strong").get_text() print("지역 : {} | 날씨 : {} | 온도 : {}".format(areaName,status,temper)) #naver가 이제 바뀌었기 때문에 다음의 날씨 정보로 가져오자 print("다음에서 가져온 날씨 정보") r_find_all("https://www.daum.net","html.parser") r_select("https://www.daum.net" , "lxml")
- 해결됨남박사의 파이썬 기초부터 실전 100% 활용
영어 단어 맞추기 게임 응용
박사님이 코딩하셨던 영어 단어 맞추기 게임을 응용해서 사용자가 단어를 입력했을 때 만약 그 단어가 틀렸다면 컴퓨터가 맞는 글자와 그 위치를 알려주는 코드를 짜고 싶은데 어떤 함수를 사용해야 할지 모르겠습니다. 예를 들어 사용자가 사과를 affle로 입력했을 때 'a**le' 이런 식으로 표시되게 하려면 직접 사용자 정의 함수를 통해 코드를 짜야 할까요?
- 해결됨남박사의 파이썬 기초부터 실전 100% 활용
끝자리 연산자 더하고 빼는 부분 변경을 하면
if lop < len(user_input) : string_list.append(user_input[lop:len(user_input)]) 이렇게 lop의 값이 문자열의 길이와 다르면 그만큼 짤라서 넣으면 되지 않나요???
- 해결됨남박사의 파이썬 기초부터 실전 100% 활용
반복문안에 0으로 초기화 빼야 하는거 아닌가요?
밖으로 빼야 하는거 아닌가요??
- 미해결남박사의 파이썬 기초부터 실전 100% 활용
SyntaxError: Non-ASCII character 해결방법좀 가르쳐주세요.
에디터의 Encoding 이 UTF-8로 되어있는데도 print("테스트중입니다") 이것만 실행시키면 SyntaxError: Non-ASCII character '\xed' in file fileOpenTest.py on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details 이렇게 오류가 나옵니다. 그래서 해결해볼려고 검색해봤더니 코드 최상단에 "# -- coding: utf-8 --" 이리 명시해주라해서 했더니 해당 오류메세지는 안뜨긴하더라구요!! 매번 파일을 생성시에 최상단에 넣어야하는 꽤나 불편하더라구요,ㅠ 혹시 이방법말고 어떤게있을지 강사님께 여쭤봅니다!!ㅠ-ㅠ
- 미해결남박사의 파이썬 기초부터 실전 100% 활용
페이징 관련 문의
키워드 검색후 여러 페이지에 걸친 결과물을 검색후 합치기(Extend) 위해 if start_page < end_page: start_page += 10 results.extend(search_google(keyword,start_page,end_page=end_page)) 코드를 사용하는걸로 이해하고있습니다. 첫페이지 리스트 결과물을 얻은 다음구글 2페이지 결과물을 찾기위해 위코드를 통해 start_page=10이 되어서 함수로 다시 되돌려 주는걸로 이해하고 있는데요, 함수 전달자 start_page=10이되더라도 url에는 그걸 받아주는 start_page 변수를 쓰지 않는데, 어떻게 2페이지 자료를 검색하는 건지 궁금합니다. def search_google(keyword,start_page, end_page=None): url = 'https://www.google.com/search?q={0}+magnet%3A%3Fxt%3D&oq={0}+magnet%3A%3Fxt%3D'.format(keyword) 아래처럼 뭐 이런식으로 start_page 인자를 넣어줘야 하는거 아닌가 고민하다가 문의드립니다. url = "https://www.google.com/search?q={}+magnet:?xt=&start={}".format(keyword,start_page) 답변에 미리 감사드립니다.
- 미해결남박사의 파이썬 기초부터 실전 100% 활용
나만의 단축키 만들기
MY_HOT_KEYS = [ {"function1": {Key.shift, KeyCode(char='a')}}, {"function2": {Key.ctrl_l, Key.alt_l, KeyCode(char='n')}}, {"function3": {Key.shift_l, Key.f1}}, ] 해당 코드를 jupyter에서 실행할경우, function1의 {Key.shift, KeyCode(char='a') 구문에서, 소문자 a키로 작성된부분이 shift 키를 누루게 되면서, 대문자 A가 출력되어 function1의 함수가 동작 하지않는데요, (char='a' -> char='A') 이렇게 소문자를 대문자로 수정해주면 function1의 함수가 정상 실행됩니다. 혹시, ms code에서처럼, jupyter에서도 소문자로 표기해도 실행될수 있는 방법이있나요? 혹시나 해서 (char='a').lower() 를 해봤는데, 이건 안되네요....
- 미해결남박사의 파이썬 기초부터 실전 100% 활용
list index out of range
항상 좋은 강의 감사합니다. 따라 하는중에 아래와 같은 메시지와 함께 에러가 납니다. 직접 올려주신 소스코드로 실행해도 동일한 메세지가 나옵니다. 다음강의와 연결이 되는것 같아서.. 에러 해결하고 넘어갈려고 합니다. D:\Python36\python.exe D:/workpy/Practice/강좌-소스코드/09.크롤링/magnet.py Traceback (most recent call last): File "D:/workpy/Practice/강좌-소스코드/09.크롤링/magnet.py", line 45, in <module> results = search_google("리눅스", 0) File "D:/workpy/Practice/강좌-소스코드/09.크롤링/magnet.py", line 17, in search_google counts = bs.select("div#resultStats")[0].text.replace("검색결과 약", "").replace("개", "").replace(",", "").split("(")[0].strip() IndexError: list index out of range Process finished with exit code 1 참고로 아래는 실행했던 코드(직접 올려주신 소스코드)입니다. import requestsfrom bs4 import BeautifulSoupimport re"리눅스 magent:?xt="def search_google(keyword, start_page, end_page=None): url = "https://www.google.com/search?q={0}+magnet%3A%3Fxt%3D&oq={0}+magnet%3A%3Fxt%3D".format(keyword) header = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36,gzip(gfe)"} r = requests.get(url, headers=header) bs = BeautifulSoup(r.text, "lxml") links = bs.select("div.g > div > div.rc > div.r > a") results = [] if end_page is None: counts = bs.select("div#resultStats")[0].text.replace("검색결과 약", "").replace("개", "").replace(",", "").split("(")[0].strip() end_page = int(int(counts) / 10) if end_page > 20: end_page = 20 for a in links: href = a["href"] text = a.select("h3") if len(text) <= 0: continue title = text[0].text try: r = requests.get(href) bs = BeautifulSoup(r.text, "lxml") magnets = bs.find_all("a", href=re.compile(r'magnet:\?xt=*')) if len(magnets) > 0: magnet = magnets[0]["href"] results.append((title, magnet)) except: pass if start_page < end_page: start_page += 10 results.extend(search_google(keyword, start_page, end_page=end_page)) return resultsresults = search_google("리눅스", 0)for r in results: print(r)
- 미해결남박사의 파이썬 기초부터 실전 100% 활용
PyQt5 상속받아 사용하는 이유가 무엇인가요?
실전프로그래밍까지 강의를 들었고, 나머지 스킵 후, PyQt5 강의를 듣고 있습니다. 굳이 class 생성 후, 상속받아 사용하는 이유가 있는지요? --> class MyWindows(QtWidgets.QWidget):. ....
- 미해결남박사의 파이썬 기초부터 실전 100% 활용
socketServer를 이용하여 챗팅 server, client 구현 편에 질문이 있습니다.
안녕하세요. 강의 잘 듣고 있습니다. socketServer를 이용하여 챗팅 server, client 구현 하기 편에서 client멀티 접속시 에러가 납니다. ``` python .\chat_server.py ('127.0.0.1', 50094) 현재 1 명 참여중 ('127.0.0.1', 50100) 현재 2 명 참여중 ---------------------------------------- Exception happened during processing of request from ('127.0.0.1', 50100) Traceback (most recent call last): File "C:\Python36\lib\socketserver.py", line 654, in process_request_thread self.finish_request(request, client_address) File "C:\Python36\lib\socketserver.py", line 364, in finish_request self.RequestHandlerClass(request, client_address, self) File "C:\Python36\lib\socketserver.py", line 724, in __init__ self.handle() File ".\chat_server.py", line 25, in handle self.send_all_message("[{}] 님이 입장 했습니다.".format(nickname)) File ".\chat_server.py", line 9, in send_all_message sock.send(msg.encode()) OSError: [WinError 10038] 소켓 이외 의 개체에 작업을 시도했습니다 ``` 원인이 무엇일까요?
- 미해결남박사의 파이썬 기초부터 실전 100% 활용
데코레이팅까지 해봤는데 안되네요;; 조언부탁드립니다.
지난시간에 작동시간 연습했던게 생각이나서 해봤는데 아래와 같이 에러메세지가 나옵니다. 데코레이팅없이 그냥 단독실행하면 정상작동합니다. 실행시 2개 인자(start,end)를 전달했다고 생각했는데 뭐가 문제일까요? 조언 감사드립니다. 아 그리고 평가 코멘트도 추출해보려했는데 공백과 /n/b/.. 같은 태그들이 같이 있어서 실패했습니다. 어떻게 할수 있나요? 오른쪽과 같이 시도했었습니다. comments = i.select_one('td.title').text.strip() import requestsfrom bs4 import BeautifulSoupimport pandasimport timedef time_check(func): def wrapper(*args,**kwargs): start_time = time.time() result = func(*args,**kwargs) end_time = time.time() - start_time print('{}함수 {}페이지에서 {}까지, 실행시간 {}'.format(func.__name__,args[0],args[1],end_time)) return result return wrapper()@time_checkdef naver_movie(start, end): lists = [] for p in range(start,end+1): url = 'https://movie.naver.com/movie/point/af/list.nhn?&page={}'.format(p) request = requests.get(url) bs = BeautifulSoup(request.text,'lxml') trs = bs.select('table.list_netizen > tbody > tr') for i in trs: ac_num = i.select_one('td.ac.num').text title = i.select_one('td.title > a').text score = i.select_one('td.title > div > em').text # comments = i.select_one('td.title').text.strip() writer = i.select_one('td.num > a').text lists.append([ac_num,writer, title, score]) #print(ac_num, title, score, writer) return listsnaver_movie(1,2) C:\Python\venv\Scripts\python.exe C:/Python/venv/네이버평점.py Traceback (most recent call last): File "C:/Python/venv/네이버평점.py", line 17, in <module> def naver_movie(start, end): File "C:/Python/venv/네이버평점.py", line 14, in time_check return wrapper() File "C:/Python/venv/네이버평점.py", line 10, in wrapper result = func(*args,**kwargs) TypeError: naver_movie() missing 2 required positional arguments: 'start' and 'end' Process finished with exit code 1
- 미해결남박사의 파이썬 기초부터 실전 100% 활용
본강의 예제를 활용할수 있는 다른 사이트를 알려주시는건 어떤가요?
이번강의에서 커버하는게 단순 실시간 데이터를 추출 및 확인하는것에서 그치는것이 아니고, 이를 활용하여 함수를 만들어서 데코레팅 @함수활용까지 확장하는 만큼, ajax로 변경된 코딩만 있으면 동영상의 나머지 내용은 적용하고 확인하기가 어려운것 같습니다. 개인적으로는 변경된 ajax코딩을 가지고 시간함수, 셀렉트활용함수를 써서 시간을 재는것 까지 나름대로? 했습니다만.. 맞게 한건지 확실치가 않아서 좀 아쉽습니다. 페이지 코드가 바뀌면 기존 크롤링 코드 수정되어야 하는 특성상 시간이 지나면서 기존동영상으로 따라 하는게 어렵다는걸 이해합니다. 다만, 웹페이지코드가 바뀌었다면 는 동영상내용을 활용 할 수 있는 다른 대체 웹페이지를 업데이트해주시면 좋을것 같습니다. 혹은 변경된 json데이터를 활용한 전체 코딩을 업데이트 주셔도 큰 도움이 될 것 같습니다.
- 미해결남박사의 파이썬 기초부터 실전 100% 활용
문자열 슬라이싱 질문
a = “test python string” a[0:2] ⇨ ‘te’가 나오는데 0과 1은 같나요..? a[1] 'e' a[2] 's' 인데 a[1:2] 하면 es가 안나오고 왜 'e' 만 나오는 걸까요 너무 헷갈려요
- 미해결남박사의 파이썬 기초부터 실전 100% 활용
남박사님 이해가 잘 안되네요
중복되고 있는 단어가 찾는 로직부분인데요. 중복되는 단어가 없을 수도 있을 때는 0인데, 카운트했을 때 왜 추가되는지 이해가 잘 안가네요 frequency = {} for word in match_pattern: count = frequency.get(word, 0) frequency[word] = count + 1
- 미해결남박사의 파이썬 기초부터 실전 100% 활용
while 반복문 실행순서 문의
pos = 0 while True: if pos+1 > len(list): break if list[pos] in operator: temp = list[pos-1] + list[pos] + list[pos+1] #print('temp',temp) del list[0:3] #print('del',list) list.insert(0,str(eval(temp))) #print('list',list) pos = 0 pos += 1 위 예제가 while 반복문은 세개 문단(?)으로 되어 있다고 한다면, 1) 1번 조건 확인 -> 2번조건 만족할때까지 계속반복 -> 3번 pos +=1 -> 1번조건 확인 반복순서인가요? 아니면 2) 1번 조건 확인 -> 2번조건 첫번째수행 -> 3번 pos +=1 수행 -> 1번 조건 확인 -> 2번조건 두번째수행 -> 3번 pos +=1 번 -> 다될때까지 반복 인가요? 2번 논리로 실행된다고 하면 2번째 문단 끝이 pos =0이고 3번째 시작이 pos +=1을 해주는게 이해가 안되서 1)로 작동하는거 같은데, 확실치 않아서 문의드립니다. 감사합니다.
- 미해결남박사의 파이썬 기초부터 실전 100% 활용
저는os가 달라요
선생님 저는 하모니카os인데 어떻하죠?
- 미해결남박사의 파이썬 기초부터 실전 100% 활용
언어깨지는 문제
import oswhile True: os.system('cls') s = input('계산식 입력 >') print('결과: {}'.format(eval(s))) os.system('pause')C:\Users\SHBNPPHK\AppData\Local\Programs\Python\Python38-32\python.exe "C:/Users/SHBNPPHK/PycharmProjects/4.계산기/4. 계산기.py" 계산식 입력 >8-9 결과: -1 ����Ϸ��� �ƹ� Ű�� �����ʽÿ� . . . 아마 시스템 설정이나 환경설정 때문인거 같은데.. pause실행후 사용자 입력을 기다리라는 안내메시지가 저렇게 깨집니다.. 어떻게 하면 정상적으로 표시되도록 할수 있을까요? 도움감사합니다.
- 미해결남박사의 파이썬 기초부터 실전 100% 활용
numpy를 설치했는데도 unresolved import라고 뜨는데
해결방법이 있나요??ㅠㅠ
- 미해결남박사의 파이썬 기초부터 실전 100% 활용
데코레이팅 실행 오류 및 전달과정 문의
import timedef time_checker(func): def inner_function(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) end_time = time.time() print('함수 {} 동작시간: {}'.format(func.__name__, end_time - start_time)) return result return inner_function()@time_checker # 위함수를 데코레이팅하여 함수를 확장하여 사용def test1(): for i in range(5): time.sleep(0.1)@time_checkerdef test2(): for i in range(3): time.sleep(0.1)test1()test2() 질문1) 위코딩시 실행시 아래와 같은 에러메세지도 같이 출력됩니다. D:\Python36\python.exe D:/workpy/ch01/test.py 함수 test1 동작시간: 0.5036873817443848 Traceback (most recent call last): File "D:/workpy/ch01/test.py", line 26, in <module> test1() TypeError: 'NoneType' object is not callable 함수 test2 동작시간: 0.302156925201416 Process finished with exit code 1 질문2) 아래 코드는 0.5초 지연시키는 코드인데 @time_checker함수에 정확하게 어떻게 전달이되어서 어떤 논리로 실행되는건가요? result = func(*args,**kwargs)로 전달되어 실행이 되는거라면 result = 변수 선언이 반드시 필요한가요? 그리고 마지막에 return result를 해주는 이유도 궁금합니다. @time_checker # 위함수를 데코레이팅하여 함수를 확장하여 사용def test1(): for i in range(5): time.sleep(0.1)
- 미해결남박사의 파이썬 기초부터 실전 100% 활용
남박사님 함수가 호출이 안되네요.
나만의 단축키 smart 강좌를 보고 따라 쳐봤는데, 키 인식은 잘되나 function1,2,3 함수가 호출이 되지 않아요. 무엇이 틀렸을까요? from pynput.keyboard import Key, Listener, KeyCode import win32api # 단축키 저장 MY_HOT_KEYS =[ {"function1": {Key.ctrl_l, Key.alt_l, KeyCode(char="n")}}, {"function2": {Key.shift, Key.ctrl_l, KeyCode(char="b")}}, {"function3": {Key.shift, Key.ctrl_l, KeyCode(char="g")}}, ] # 키가 눌러져있는 키 상태를 기억하는 변수(집합) current_keys = set() def function1(): print("함수1 호출") win32api.WinExec("calc.exe") def function2(): print("함수2 호출") win32api.WinExec("notepad.exe") def function3(): print("함수3 호출") win32api.WinExec("C:\Program Files (x86)\Google\Chrome\Application\chrome.exe") def key_pressed(key): print("Pressed {}".format(key)) for data in MY_HOT_KEYS: FUNCTION = list(data.keys())[0] KEYS = list(data.values())[0] if key in KEYS: current_keys.add(key) if all(k in current_keys for k in KEYS): #checker = True #for k in KEYS: #if k not in current_keys: #checker = False #break #if checker: function = eval(FUNCTION) function() def key_released(key): print("Released {}".format(key)) if key in current_keys: current_keys.remove(key) if key == Key.esc: return False # on_press, on_release는 인자값 with Listener(on_press=key_pressed, on_release=key_released) as Listener: Listener.join()