묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결쉽게 처음하는 파이썬 고급 크롤링 [Scrapy, Selenium, Headless Chrome]
[REST API] data의 교환방식 질문
- 본 강의 영상 학습 관련 문의에 대해 답변을 드립니다. (어떤 챕터 몇분 몇초를 꼭 기재부탁드립니다)- 이외의 문의등은 평생강의이므로 양해를 부탁드립니다- 현업과 병행하는 관계로 주말/휴가 제외 최대한 3일내로 답변을 드리려 노력하고 있습니다- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.<동적 웹사이트와 크롤링> - REST API 안녕하세요. 강의 잘 듣고 있습니다.REST API라고 하는 것이 데이터를 주고 받는 방법인 것은 알겠는데요. 이것이 프론트엔드와 백엔드의 데이터를 주고받는 방식이라고 이해하는게 좀 어려워서 부가설명을 부탁드립니다. 회사를 기준으로 이해하다보니 더 와닿지 않습니다. 제가 가끔씩 보는 사내의 IT개발은 JSP로된 2000줄 정도 되는 코드에 어떤 데이터가 필요하면, 데이터를 뽑는 쿼리를 데이터 베이스 담당하시는분한테 묻고 그 해당 쿼리를 집어넣고??하는 방식으로 하는 것 같은데, 제가 집에서하는 템플릿 코드 작성방식과와 다르지 않다고 이해해오고 있는데요. 규모가 큰 회사에서는 OPEN API 설명서처럼 백엔드에서DATA를 전달하는 방식을 구현해 놓는건가요? 그리고 한가지만 더 질문을 드리면, 제가 Flask 강의도 듣고 있는데요. 사실 백엔드와 프론트엔드의 차이를 잘 느끼지 못했습니다. 하나의 템플릿에 데이터를 넣어주는 역할까지를 백엔드가 하고 단지 프론트는 그 템플릿을 예쁘게 하는 역할을 하는것인가요? 만약 그렇다면 템플릿 상속도 있고, HTML CODE도 계속해서 변하는데 구분없이 혼자하는게 더 수월하겠다는 생각이 들어서요. 어떤 식으로 역할을 분배하고 일하는지 궁금합니다.정말 좋은 강의 잘듣고 있습니다. 감사합니다!
-
미해결파이썬 증권 데이터 수집과 분석으로 신호와 소음 찾기
5/6 tqdm으로 전체 데이터...
concat으로 전제 종목을 합치는 pd.concat(result.tolist()) 코드 실행시 오류가 납니다. 오류 메세지는 : InvalidIndexError: Reindexing only valid with uniquely valued Index objects입니다. get_item_info 함수를 실행해서 result 결과를 확인해 보니, index 가 모두 같지 않은 것 같습니다. 오류 부분이 어디일까요?
-
미해결실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
에러??
import os import openai openai.api_key = "내꺼 api key 가림" completion = openai.ChatCompletion.create( model = "gpt-3.5-turbo", messages=[{"role": "user", "connect": "Hello"}]) print(completion.choices[0].message) Traceback (most recent call last): File "C:\Users\82109\PycharmProjects\10.selenium_option\venv\openai_test.py", line 5, in <module> completion = openai.ChatCompletion.create( model = "gpt-3.5-turbo", messages=[{"role": "user", "connect": "Hello"}]) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\82109\PycharmProjects\10.selenium_option\venv\Lib\site-packages\openai\api_resources\chat_completion.py", line 25, in create return super().create(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\82109\PycharmProjects\10.selenium_option\venv\Lib\site-packages\openai\api_resources\abstract\engine_api_resource.py", line 153, in create response, _, api_key = requestor.request( ^^^^^^^^^^^^^^^^^^ File "C:\Users\82109\PycharmProjects\10.selenium_option\venv\Lib\site-packages\openai\api_requestor.py", line 226, in request resp, got_stream = self._interpret_response(result, stream) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\82109\PycharmProjects\10.selenium_option\venv\Lib\site-packages\openai\api_requestor.py", line 620, in _interpret_response self._interpret_response_line( File "C:\Users\82109\PycharmProjects\10.selenium_option\venv\Lib\site-packages\openai\api_requestor.py", line 683, in _interpret_response_line raise self.handle_error_response( openai.error.InvalidRequestError: Additional properties are not allowed ('connect' was unexpected) - 'messages.0' Process finished with exit code 1 위는 에러 메시지 입니다.
-
해결됨[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
03. 연예뉴스크롤링하기에 질문 있습니다.
import requests from bs4 import BeautifulSoup import time response = requests.get( "https://search.naver.com/search.naver?where=news&sm=tab_jum&query=%EB%B8%94%EB%9E%99%ED%95%91%ED%81%AC") html = response.text soup = BeautifulSoup(html, 'html.parser') articles = soup.select("div.info_group") # 뉴스 기사 div 10개 추출 for article in articles: links = article.select("a.info") # 리스트 if len(links) >= 2: # 링크가 2개 이상이면 url = links[1].attrs['href'] # 두번째 링크의 href를 추출 response = requests.get(url, headers={'User-agent':'Mozila/5.0'}) html = response.text soup = BeautifulSoup(html, 'html.parser') # 만약 연예 뉴스라면 if "entertain" in response.url: title = soup.select_one(".end_tit") content = soup.select_one("#articleBody") else: title = soup.select_one(".media_end_head_headline") content = soup.select_one("#dic_area") print("====링크====", url) print("====제목====", title.text.strip()) print("====본문====", content.text.strip()) time.sleep(0.3) 위와 같이 코드를 짜고 실행했는데,https://entertain.naver.com/read?oid=629&aid=0000209267이사이트 차례가 되자 content를 못 뽑아냅니다.다음과 같은 에러를 나타냅니다.====링크==== https://n.news.naver.com/mnews/article/629/0000209267?sid=106 ====제목==== 블랙핑크 지수, 요란하지 않은 '꽃'의 유혹[TF초점] Traceback (most recent call last): File "C:\Users\asd20\Desktop\startcoding_crawling\Chapter04\03.연예뉴스크롤링하기.py", line 27, in <module> print("====본문====", content.text.strip()) AttributeError: 'NoneType' object has no attribute 'text' 개발자도구를 눌러 html 구조를 확인해봐도 원인을 잘 모르겠습니다.
-
해결됨[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
네이버 일반 뉴스 페이지의 HTML이 변경된것 같습니다.
import requests from bs4 import BeautifulSoup response = requests.get( "https://search.naver.com/search.naver?where=news&sm=tab_jum&query=%EC%82%BC%EC%84%B1%EC%A0%84%EC%9E%90") html = response.text soup = BeautifulSoup(html, 'html.parser') articles = soup.select("div.info_group") # 뉴스 기사 div 10개 추출 for article in articles: links = article.select("a.info") # 리스트 if len(links) >= 2: # 링크가 2개 이상이면 url = links[1].attrs['href'] # 두번째 링크의 href를 추출 response = requests.get(url, headers={'User-agent':'Mozila/5.0'}) html = response.text soup = BeautifulSoup(html, 'html.parser') content = soup.select_one("#articleBodyContents") print(content.text)본문 내용의 ID가 articleBodyContents아닙니다.그래서 "#dic_area"로 생각해서,변경하고 진행했는데, 강사님처럼 전체 텍스트가 출력되는게 아니라 일부만 출력됩니다.전체 텍스트를 볼려면 어떻게 해야하나요?
-
미해결Node.js로 웹 크롤링하기
앱 크롤링
수업 잘듣고 있습니다교육내용가 관련없지만웹말고 앱 크롤링이 가능한가요?
-
미해결실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
selenium 명령어 자동완성 안됨
vscode 사용하고 있습니다.코딩과 실행 모두 문제는 없으나selenium 관련 명령 입력할때는 김플님 강의화면과 달리 자동완성 기능이 작동하지 않습니다.예를 들어, options = Options()options.까지 입력하면 여러가지가 나오고 그 중 add_experimental_option 이 떠야되는데 그렇지 않아 매번 직접 타이핑하고 있습니다.해결방법이 있을까요?
-
미해결실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
다음 카페 크롤링
다음 카페 크롤링을 이 강의를 통해 하고 있습니다.다음 카페 로그인 및 해당 게시판 까지는 이동이 되는 데, 해당 글 내용에 대한 크롤링이 되지 않습니다(Xpath나 class를 이용해도 게시글이 클릭도 안되는데 그 이유가 궁급합니다.ㅠㅠ / )<a href="/_c21_/bbs_read?grpid=5RFF&fldid=Acvb&contentval=002Lizzzzzzzzzzzzzzzzzzzzzzzzz&datanum=9034&page=1&prev_page=0&firstbbsdepth=&lastbbsdepth=zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz&listnum=20" class="txt_item">심한 자폐아이 </a>여기 안에 있는 내용을 가지고 오고 그 아래 부분의 글로 가지고 오려고 합니다...
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
for문에서 창 전환 후 에러 해결 방법 문의
from selenium import webdriver # webdriver 불러오기 from selenium.webdriver.chrome.options import Options # 브라우저 닫힘 방지 from selenium.webdriver.chrome.service import Service # 크롬드라이버 다운로드(새로운 버전 다시 받을 필요 없음) from webdriver_manager.chrome import ChromeDriverManager # 크롬드라이버 다운로드(새로운 버전 다시 받을 필요 없음) import time import pyautogui from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys options = Options() options.add_experimental_option('detach', True) # 브라우저 바로 닫힘 방지 options.add_experimental_option('excludeSwitches', ['enable-logging']) # 불필요한 메시지 제거 service = Service(ChromeDriverManager().install()) #service = Service(ChromeDriverManager().install()) 이 부분을 # ChromeDriverManager(path="원하는 경로") 이렇게 사용하면 원하는 곳에 # 크롬드라이버를 다운로드하게 됩니다. driver = webdriver.Chrome(service=service, options=options) driver.get("https://www.g2b.go.kr:8101/ep/tbid/tbidFwd.do") time.sleep(2) search_click = driver.find_element("#bidNm").click() keyword = pyautogui.prompt("<<<검색어를 입력하세요 >>>") search_keyword = driver.find_element(By.CSS_SELECTOR,"#bidNm").send_keys(keyword) output_num = driver.find_element(By.CSS_SELECTOR,"#recordCountPerPage").click() output_num_select = driver.find_element(By.CSS_SELECTOR,"#recordCountPerPage > option:nth-child(5)").click() search_btm_click = driver.find_element(By.CSS_SELECTOR,"#buttonwrap > div > a:nth-child(1)").click() bid_infors = driver.find_elements(By.CSS_SELECTOR,"tbody tr") for bid in bid_infors : title = bid.find_element(By.CSS_SELECTOR,"td:nth-child(4) > div > a").text link = bid.find_element(By.CSS_SELECTOR,"td:nth-child(4) > div > a").get_attribute('href') client = bid.find_element(By.CSS_SELECTOR,"td:nth-child(5) > div").text print("공고명 : ", title) print("주소 : ", link) print("발주처 : ",client ) print() # 사전규격 크롤링 driver.get("https://www.g2b.go.kr:8081/ep/preparation/prestd/preStdSrch.do") time.sleep(2) keyword2 = pyautogui.prompt("<<<검색어를 입력하세요 >>>") search_keyword2 = driver.find_element(By.CSS_SELECTOR,"#prodNm").send_keys(keyword2) output_num2 = driver.find_element(By.CSS_SELECTOR,"#recordCountPerPage").click() output_num2_select2 = driver.find_element(By.CSS_SELECTOR,"#recordCountPerPage > option:nth-child(5)").click() search_btm_click2 = driver.find_element(By.CSS_SELECTOR,"#frmSearch1 > div.button_wrap > div > a:nth-child(1)").click() bid_infors2 = driver.find_elements(By.CSS_SELECTOR,"tbody tr") for bid2 in bid_infors2: title2 = bid2.find_element(By.CSS_SELECTOR, "td:nth-child(4) > div > a").text client2 = bid2.find_element(By.CSS_SELECTOR, "td:nth-child(5) > div").text link_click = bid2.find_element(By.CSS_SELECTOR, "td:nth-child(4) > div > a").click() time.sleep(2) link2 = driver.current_url print("공고명 : ", title2) print("주소 : ", link2) print("발주처 : ",client2) print() driver.back() time.sleep(2) 위 코드에서 발생하는 코드는 아래와 같습니다. Traceback (most recent call last): File "c:\coding\나라장터크롤링\1.입찰공고크롤링.py", line 61, in <module> title2 = bid2.find_element(By.CSS_SELECTOR, "td:nth-child(4) > div > a").text File "C:\Users\landj\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\webelement.py", line 425, in find_element return self._execute(Command.FIND_CHILD_ELEMENT, {"using": by, "value": value})["value"] File "C:\Users\landj\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\webelement.py", line 403, in _execute return self._parent.execute(command, params) File "C:\Users\landj\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 440, in execute self.error_handler.check_response(response) File "C:\Users\landj\AppData\Local\Programs\Python\Python310\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 245, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document이것 저것 다해봐도 안되네요...해결 방법을 알려주시면 감사하겠습니다.
-
해결됨[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
자바스크립트로 된 링크 가져오는 방법이 궁금합니다.
토요코인 수업 중에 위에 보는 것과 같이 자바스크립트로 링크가 걸려있는 경우 실제 url을 크롤링 하려면 어떻게 해야 하나요?
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 기본편
PermissionError: [WinError 5] 액세스가 거부되었습니다
안녕하세요 강의에서 알려주신 내용 바탕으로 해보고 있는데 어느순간부터 'PermissionError: [WinError 5] 액세스가 거부되었습니다' 라는 메세지가 나옵니다.해당 메세지가 가르키는 줄을 보면 아래 코드중 service 부분에서 발생합니다. 어떻게 하면 수정할수있을지 도움말씀 부탁드립니다.service = Service(executable_path=ChromeDriverManager().install()) browser = webdriver.Chrome(service=service, options=chrome_options)
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
크롤링 관련하여 질문드립니다.
안녕하세요 강사님, 유튜브 강의 너무 잘 보고 좀 더 강사님의 강의를 통해 파이썬 배워보고자 인프런 수강하게 된 학생입니다.크롤링 관련하여 강의나 유튜브 영상을 찾아봐도 접하기 힘든 유형인 듯 하여 질문드립니다. 위와 같이 흔히 접할 수 있는 가격 비교 사이트(D사, E사 등) 에서 카드할인가 포함과 같은 체크박스 선택을 하여 정보를 추출하고자 할 경우 어떻게 해야하나요? 기존 강의에서 접한 사이트와는 다르게 크롤링이 제한되는 듯 하여 질문드립니다...
-
해결됨실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
손흥민 키워드를 입력하여도, 링크 생성안되는 현상
이전 질문에 대해서 너무나도 빠른 답변 감사합니다.해결되었습니다.어떻게 해결책을 찾으셨나요?쿠팡 part빼고 완강했는데, 다 들어보겠습니다.다른 질문이 있습니다.손흥민을 input값을 받아도 단순하게 더해서는 하이퍼링크된 url이 형성되지 않습니다.저는 quote_plus를 사용해서 해결했는데,강사님은 어떻게 해서 단순하게 더해서 하이퍼링크된 url이 완성될까요?
-
미해결파이썬 입문 및 웹 크롤링을 활용한 다양한 자동화 어플리케이션 제작하기
스케줄러 사용 관련 질문 드립니다
작성한 파이썬 코드(웹 크롤링)를 매일 정해진 시간에 실행하려 합니다스케줄러를 사용하면 된다 구글링에 나왔는데요 어떤 식으로 사용하면 되는지 감이 안 와서 질문 드려요. 작성한 파이썬 코드 앞에 스케줄러 코드를 붙이면 되나요? 아니면 작성한 파이썬 파일을 불러와서 사용하는 방식으로 해야 하나요? 답변 부탁 드립니다.
-
미해결파이썬 입문 및 웹 크롤링을 활용한 다양한 자동화 어플리케이션 제작하기
selenium 에러
안녕하세요, selenium을 사용해 파싱을 할 때, 예제처럼 'id'가 아닌 'div class'를 넣으면 다음과 같은 문법 에러가 발생 합니다. 해결책은 무엇이 있을까요?
-
미해결실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
무비차트 모든 영화의 예매율, 개봉 날짜등 기타 정보 모두 가져오기 과정 중 질문입니다.
from bs4 import BeautifulSoup import requests url = "http://www.cgv.co.kr/movies/?lt=1&ft=0" headers = { "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36" } r = requests.get(url, headers=headers).text soup = BeautifulSoup(r, "html.parser") charts = soup.select("div.sect-movie-chart > ol > li") print(len(charts)) # Output : 20 ?? for chart in charts: title = chart.select_one("strong.title").text percent = chart.select_one("strong.percent").get_text print(title) print(percent(" : "))무비차트 페이지에 보여지는 갯수도 19개고, 개발자 도구에서 li를 세어봐도 19개인데len()으로 보면 20개가 나오고, for 문으로 코드를 실행시키면 19번째까지 제목과 예매율 출력하고 20번째에서 에러 문구가 발생합니다.어떤 부분을 찾아보면 될까요?
-
미해결실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
쿠팡 크롤링
강사님의 훌륭한 강의력에 감탄하며 쿠팡 크롤링을 제외한 부분은 다 들었습니다. 감사합니다.쿠팡 크롤링 파트에 질문이 있습니다.3월27일 기준으로 위 방법이 막힌것같습니다.다른 방법을 찾으려고 했지만, 셀레니움 밖에 찾지 못했습니다.뷰티풀숩을 이용한 해결책은 없나요?
-
미해결남박사의 파이썬 기초부터 실전 100% 활용
텔레그램 봇 만들기 코드 실행이 안됩니다 박사님..ㅠ
안녕하세요, 좋은 강의 보고 따라하면서 학습중입니다.좋은강의 정말 감ㅅㅏ드립니다..지금 텔레그램 봇 만들기 - 날씨 / 환율 응답, 컴퓨터 파일전송 기능 강의를 수강중입니다. /dir [대상폴더] 는 잘 구현이 되었는데/getfile /Users/사용자/test.txt로 파일 전송 기능이 구현이 안됩니다..디버깅으로 로그를 봐도 모르겠어서 질문 남깁니다!! 미리 감사드립니다.스크린샷도 같이 첨부드립니다!참고로 맥북으로 진행중입니다. [1] 디버깅[2] 기능구현 x/dir /Users/Desktop 입력하면 데스크탑 파일목록 나옴.[3] 코드import telepot import logging import os logging.basicConfig(level=logging.DEBUG) logger = logging.getLogger(__name__) telegram_token = "6129613380:AAGbL2T-ogOaIK4v2YTPe4zTD9pzBikKLEA" # 파일 경로 찾기 def get_dir_list(dir): str_list = "" if os.path.exists(dir): file_list = os.listdir(dir) file_list.sort() for f in file_list : full_path = os.path.join(dir,f) if os.path.isdir(full_path): f = "[" + f + "]" str_list += f str_list += "\n" str_list.strip() return str_list def handler(msg): content_type, chat_Type, chat_id, msg_date, msg_id = telepot.glance(msg, long=True) print(msg) # if content_type == "text" : # bot.sendMessage(chat_id, "[반사] {}".format(msg["text"])) # /dir c:\\workspace if content_type == "text": str_message = msg["text"] if str_message[0:1] == "/": args = str_message.split(" ") command = args[0] del args[0] if command == "/dir": filepath = " ".join(args) if filepath.strip() == " ": bot.sendMessage(chat_id, "/dir [대상폴더]로 입력해주세요.") else: filelist = get_dir_list(filepath) bot.sendMessage(chat_id,filelist) elif command[0:4] == "/get": filepath = " ".join(args) if os.path.exists(filepath): try: if command == "/getfile": bot.sendDocument(chat_id, open(filepath, "rb")) elif command == "/getimage": bot.sendPhoto(chat_id, open(filepath, "rb")) elif command == "/getaudio": bot.sendAudio(chat_id, open(filepath, "rb")) elif command == "getvideo" : #/getvideo c:\test\movie.mp4 bot.sendVideo(chat_id, open(filepath, "rb")) except Exception as e: bot.sendMessage(chat_id, "파일 전송 실패 {}".format(e)) else : bot.sendMessage(chat_id, "파일이 존재하지 않습니다.") bot = telepot.Bot(telegram_token) bot.message_loop(handler,run_forever=True)
-
미해결실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
실습내용 소스
타이핑해가면서 강의를 들어야 한다는건 알고있지만다리를 심하게 다쳐서 붓기 때문에 계속 누워있어야만해서.. 휴대폰으로 간신히 강의만 듣고있습니다.퇴원후에 바로 연습해보고싶은데혹시 실습내용 소스는 따로 제공하고 있지 않으신지요?
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
주식 크롤링 도움이 필요합니다. (추가 질문 있습니다.)
안녕하세요.어느새 무제한 강의로 바뀌었네요. ^^네이버금융크롤링을 응용하여 재무제표를 가져 오고 싶은데...https://finance.naver.com/item/main.naver?code=005930 페이지의 재무제표는 잘 가져왔습니다.그런데 재무재표 더보기 버튼을 클릭한 페이지에서 재무제표의 테이블 값을 가져오려니 못가져 오고 있습니다.https://finance.naver.com/item/coinfo.naver?code=005930&target=finsum_more 페이지 입니다.찾고 싶은 테이블 : <table class="gHead01 all-width" summary = "주요재무정보를 제공합니다.">왜 못가져오나 테스트 해보니html print 해보면 찾고 싶은 table 내용이 아예 없어요.해당 table의 부모인 div = id는 페이지 열 때 마다 값이 변합니다.동적페이지 이런 걸까요??? Selenium을 사용해야 하는건지...별 삽질을 다 해 보고 있는데 제 능력으로는 해결이 안되 도움이 필요합니다. ㅠㅠ