묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
원하는 값이 없을 때
안녕하세요 강의 잘 수강하고 있습니다.현재 subject, link, content, press, date를 추출하는데 만약 해당 값들 중 하나가 없다면 검증은 어떤 식으로 하시나요??제가 생각한 방법은 pydantic으로 검증하여 해결할 수 있지 않을까 생각하는데 너무 오버엔지니어링인지 강사님은 어떻게 유연하게 처리하는지 궁금합니다. 예시를 들기 위해 pydantic으로 한 코드 첨부합니다. from typing import Annotated import requests from bs4 import BeautifulSoup from urllib.parse import urljoin, urlencode from datetime import datetime from pydantic import AfterValidator, BaseModel, HttpUrl, field_validator def non_empty_str(v: str) -> str: s = (v or "").strip() if not s: raise ValueError("빈 문자열입니다.") return s def valid_url(url: str) -> str: try: response = requests.get(url) # throw error if status 4xx, 5xx response.raise_for_status() return url except Exception as _: raise ValueError("유효하지 않은 URL입니다.") def valid_date(date: str) -> str: v = (date or "").strip() if not v: raise ValueError("빈 문자열입니다.") try: datetime.strptime(v, "%Y-%m-%d %H:%M:%S") return date except ValueError: raise ValueError("유효하지 않은 날짜 형식입니다.") class NewsItem(BaseModel): subject: Annotated[str, AfterValidator(non_empty_str)] detail_article_url: Annotated[str, AfterValidator(valid_url)] content: Annotated[str, AfterValidator(non_empty_str)] press: Annotated[str, AfterValidator(non_empty_str)] article_date: Annotated[str, AfterValidator(valid_date)] ROOT = "https://finance.naver.com/" PATH = "news/mainnews.naver" def get_news_page_url(page: int, date: str): base_url = urljoin(ROOT, PATH) query_string = urlencode({"date": date, "page": page}) return f"{base_url}?{query_string}" def get_detail_news_url(path): return urljoin(ROOT, path) def get_current_date(format: str ="%Y-%m-%d") -> str: now = datetime.now() return now.strftime(format) def crawl_news_per_page(soup: BeautifulSoup): result = [] news_per_page = soup.select(".block1") for article_card in news_per_page: # subject subject = article_card.select_one(".articleSubject > a").text # detail article link detail_article_url = get_detail_news_url(article_card.select_one(".articleSubject > a").get("href")) # content content_tag = article_card.select_one(".articleSummary") content = content_tag.contents[0].strip() press = content_tag.select_one(".press").text.strip() article_date = content_tag.select_one(".wdate").text.strip() new_item = NewsItem(subject=subject, detail_article_url=detail_article_url, content=content, press=press, article_date=article_date) result.append( new_item.model_dump() ) return result def crawl_all_news(page_total_count: int, date: str): result = [] for page in range(1, page_total_count + 1): request_url = get_news_page_url(page, date) response = requests.get(request_url) soup = BeautifulSoup(response.text, "html.parser") result.extend(crawl_news_per_page(soup)) # 마지막 페이지 검증 if (not soup.select_one(".pgRR")): break return result all_news = crawl_all_news(20, get_current_date()) print(all_news)
-
해결됨파이썬으로 나만의 블로그 자동화 프로그램 만들기
32강 자료 어딨어요? 링크 주세요
그리고 등업 좀 해주세요..
-
미해결[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
requests, BeautifulSoup 임포트 부분에 대해 문의드립니다.
안녕하세요, Dave 선생님! 강의 잘 듣고 있습니다. [질문 내용]크롤링을 위해 requests, BeautifulSoup을 임포트할 때 가르쳐주신 바와 같이 아래처럼 실행했습니다.import requests from bs4 import BeautifulSoup위와 아래가 같은 임포트 방식이나 아래는 관용구처럼 쓰이는 방식이라고 보면 될까요?bs4도, BeautifulSoup도 같은 것을 지칭하는 게 아닐까 싶어 조심스레 여쭙습니다. [추가 내용]보통 검색하거나 챗GPT로 찾아보곤 하는데인프런 추석 연휴 챌린지에 강의 질문 미션이 포함되어 있어 질문 남겼습니다.간단한 질문임에도 불구하고 확인해주셔서 감사합니다. 😭
-
미해결파이썬 증권 데이터 수집과 분석으로 신호와 소음 찾기
주식 자동매매 프로그램 제작 관련 조언 부탁드립니다
안녕하세요.좋은 강의 감사합니다.아직 강의를 완전히 제 것으로 만들기에는 시간이 부족해서 강의 외 질문드립니다.강의 주제와 관련은 있으나 강의 관련 질문은 아니니 가볍게 답변해 주시면 됩니다. 증권데이터 수집, 분석 강의를 수강한 이유가 주식 자동매매 프로그램을 만들고 싶어서입니다.가족 중 한 분이 투자한 많이 물려 있는 주식을 정리해야 하는데, 항상 주식 그래프를 보고 있을 수가 없어서 자동매매 프로그램 제작에 관심을 갖게 되었습니다. 한국투자증권, 키움증권이 REST API를 지원해서 이 두 회사용으로 만들어 보려고 합니다.처음에는 조건을 주고 자동매매하고, 추후에는 강화학습을 활용해서 완전 자동화를 해보고 싶습니다.프로그램이 계속 돌면서 Discord로 알림 메시지를 보내는 걸로 하려고 합니다. 혹 유사한 사례나 참고할 자료, 프로그램 개발 방향에 대한 조언 등이 있으면 알려 주시면 감사하겠습니다.
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
크롤링한 링크가 엑셀로 들어가면 작동이 안되요
안녕하세요제 40강의 '카카오 톡딜 크롤링'과제에 대하여정확히 코드를 입력해서원하는 정보는 다 크롤링이 되었습니다. 그런데 엑셀로 저장해서 열어보면 아래와 같은 문제가 잇습니다. 엑셀을 열었을때 링크의 하이퍼링크가 활성화가 안됩니다. 이 문제는 모든 엑셀파일에서 나타납니다. 설정에서 웹형태의 문자는 하이퍼링크로 되게끔하였지만 파란색으로 활성화가 안되고 셀을 한번 클릭해야만 활성화가 됩니다.그런데, 톡딜 과제에서만 이 두번째 문제가 발생하는데, 파란색으로 하이퍼링크 활성화가 되어 클릭해봐도 아무런 창이 열리지가 않습니다. 어떤문제인지 모르겠어요. vs code에서는 단순히 크롤링한 링크를 출력하면 창이 잘 열립니다(수업에서 선생님이 하신것과 동일하게). 그런데 datafram 만들고 엑셀로 저장해서 열면 하이퍼링크 활성화도 안되어 있고, 셀을 클릭해서 파란색으로 변해도 브라우저가 열리지 않습니다. 이렇게 되면 최종 output을 고객이 받아도 문제가 생길것 같은데... 어떤문제일까요? 엑셀에 문제가 있는걸까요.. 부탁 드립니다.
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
셀레니움 PDF자료는 받을 수 있나요
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의 내용중에 셀레니움 PDF자료를 보면서 하시던데, 받을 수 있는 곳이 있나요?
-
해결됨파이썬으로 나만의 블로그 자동화 프로그램 만들기
19강 문의
19강 챗gpt api로 디지털노가다 타파하기(1) 강의 에서오픈api 키 값은 어떻게 받는건가요? 선생님은 개인 키를 넣었다고 하셨는데실제로 저는 어떻게 키값을 넣고 활용 할 수 있을까요?
-
해결됨파이썬으로 나만의 블로그 자동화 프로그램 만들기
17강 문의
17.쿠팡 파트너스 추출 예제 수업 듣다가 이해가 안가는데요 쿠팡파트너스에서 뭘 추출하고자 하는건가요??
-
미해결실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
-href 가져오기
현재까지 잘 따라왔는데 href 에서 막혀서 질문드립니다. 현재 네이버의 span class에서 제목은 가져왔습니다. 그런데 href는 윗 단계인 <a>에 있지만 class명이 복사하면 깨져서 나옵니다. 그래서 <a> 에 있는 href를 가져오지 못하고 있습니다. 더 한단계 위인 <div>를 사용해 보았지만 href는 불러오지 못했습니다.+++++++++++++++++++++++++<div class=“”> <a nocr=“1” href=“…..” <span class=“………”>기사제목</span> </a>++++++++++++++++++++++++++어떤 방법이 있는지 문의드립니다.
-
미해결[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
업데이트 강의
안녕하세요48번 강의부터 53번 강의까지 듣고있는데해당 강의마다 강의 종료시점에서 내용이 마무리 되면서 끝나는게 아니라갑자기 설명 중 영상이 끝납니다
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
글목록 추출하기
안녕하세요, 좋은 강의 감사합니다.글목록 추출하기에서 셀레니움을 이용한 추출 방법을 안내해주셨는데요, 이전 강의에서 알려주신 내용과 같이 BeautifulSoup를 이용하여 추출을 시도했을 때 반복문이 제대로 실행되지 않는 문제가 있어 문의드립니다.나무태그를 나름 찾아봤는데 이 부분에 문제가 있을까요? 확인 부탁드립니다 ㅠㅠ 감사합니다!
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
메일 자동화 로그인 중복방지문자해결 오류 및 명시적 대기 질문
안녕하세요강사님 덕분에 그동안 무척 배우고 싶었던 크롤링과 데이터 수집 방법에 대해 많이 배우고 있어서 감사할 따름입니다. 다름이 아니라 네이버 자동화 로그인 과정에서 중복방지문자가 계속 나타나서 질문 드립니다. time.sleep으로 시간도 길게 했고, 시간을 충분히 가진 후(이틀 후)에도 시도했으나 계속해서 중복방지문자가 나타나서 질문드립니다.혹시 이제 클립보드 복사 붙여넣기의 로그인 방법이 막힌건가요? 그리고 마지막으로 코드 전체를 합쳐서 실행했을 때 ElementClickInterceptedException, NoSuchElementException 오류가 계속 나타나 오류가 뜨는 대부분의 버튼에 명시적 대기를 걸어줬는데, 이렇게 코드를 한꺼번에 실행하려 했을 때는 대부분의 과정마다 모두 명시적 대기를 걸어줘야 하는지도 궁금합니다! user_id = "************" user_pw = "************" # 셀레니움 기본 템플릿 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import time import pyperclip import random # 크롬 드라이버 생성 driver = webdriver.Chrome() # 페이지 이동 driver.get("https://nid.naver.com/nidlogin.login?mode=form&url=https://www.naver.com/") random_sec = random.uniform(3, 5) # 아이디 입력 id = driver.find_element(By.CSS_SELECTOR, "#id") pyperclip.copy(user_id) id.send_keys(Keys.CONTROL, 'v') time.sleep(random_sec) # 비밀번호 입력 pw = driver.find_element(By.CSS_SELECTOR, "#pw") pyperclip.copy(user_pw) pw.send_keys(Keys.CONTROL, 'v') pw.send_keys(user_pw) time.sleep(random_sec) # 로그인 버튼 클릭 driver.find_element(By.CSS_SELECTOR, "#log\.login\.text").click()from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver.switch_to.window(driver.window_handles[0]) # 네이버 메인 페이지 이동 driver.get("https://www.naver.com") # 드롭다운 메뉴 클릭 driver.find_element(By.CSS_SELECTOR, "#account > div.MyView-module__my_menu___eF24q > div > div > ul > li:nth-child(1) > a > span.MyView-module__item_text___VTQQM").click() # driver.implicitly_wait(10) -> 암시적 대기는 요소가 나타날 때까지만 기다려주는 것일뿐, 클릭가능한상태까지 기다려주진않음 wait = WebDriverWait(driver, 5) # 메일함 버튼 클릭 # driver.find_element(By.CSS_SELECTOR, "#account > div.MyView-module__layer_menu_service___NqMyX > div.MyView-module__service_sub___wix9p > div.MyView-module__sub_left___AIWHR > a").click() # -> 이 코드에서 오류가 뜨는 이유는 드롭다운 메뉴가 나타나기도 전에 이 코드가 실행돼서 그럼 -> 명시적 대기를 걸어줘야 함 mail_button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#account > div.MyView-module__layer_menu_service___NqMyX > div.MyView-module__service_sub___wix9p > div.MyView-module__sub_left___AIWHR > a"))) # -> 요소를 찾아 클릭가능한 상태까지 최대 5초간 기다려줌 # mail_button.click() driver.execute_script("arguments[0].click();", mail_button) # 새창으로 전환 driver.switch_to.window(driver.window_handles[1]) # 메일쓰기 버튼 클릭 # driver.find_element(By.CSS_SELECTOR, "#root > div > nav > div > div.lnb_header > div.lnb_task > a.item.button_write").click() write_button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#root > div > nav > div > div.lnb_header > div.lnb_task > a.item.button_write"))) write_button.click() receiver = "wjddudtn1618@naver.com" # 받는사람 입력 # receiver_blank = driver.find_element(By.CSS_SELECTOR, "#recipient_input_element") # receiver_blank.click() receiver_blank = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#recipient_input_element"))) receiver_blank.click() receiver_blank.send_keys(receiver) # 제목 입력 title = "안녕" title_blank = driver.find_element(By.CSS_SELECTOR, "#subject_title") title_blank.click() title_blank.send_keys(title) # iframe으로 전환 iframe = driver.find_element(By.CSS_SELECTOR, "#content > div.contents_area > div > div.editor_area > div > div.editor_body > iframe") driver.switch_to.frame(iframe) body = "메일 자동화 프로그램 테스트하는 중인데, 메일 리스트에 너가 있길래 한번 보내봤어" body_blank = driver.find_element(By.CSS_SELECTOR, "body > div > div.workseditor-body > div.workseditor-content") body_blank.click() body_blank.send_keys(body) # 원래 페이지로 전환 driver.switch_to.default_content() # 메일 보내기 driver.find_element(By.CSS_SELECTOR, "#content > div.mail_toolbar.type_write > div:nth-child(1) > div > button.button_write_task").click() # driver.find_element(By.CSS_SELECTOR, "#layer > div > div > div > div.button_area > div.button_area_inner > button.button_send").click() confirm_send_button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#layer button.button_send"))) confirm_send_button.click()
-
해결됨[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
강의 노트가 어디에 있는건가요?
섹션2의 3. 형제들 중 선택하기를 보고있습니다. 1분 44초 쯤에 사이트링크는 강의노트에 있습니다. 라고 나오는데요, 강의노트를 못찾고 있습니다. 어디에 있는지 알 수 있을까요? 감사합니다.
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
강의 커리큘럼 질문
강의 구매 시점에는 네이버 쇼핑 크롤링도 포함되어 있었던건데 카카오로 대체된 건가요?현 시점에서 네이버쇼핑 크롤링 할 방법은 없을까요?
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
조건문 else 사용하지 않는 이유
안녕하세요, 수강 중 문의사항이 있어 질문 남깁니다. 알고리즘에 따라 무한 스크롤 처리 방법을 실행하는 과정에서,scroll 전과 후의 높이가 같은지 비교를 위해if last_height == new_height: breaklast_height = new_height 라고 안내해주셨는데요,if 조건문이 False인 경우 last_height를 업데이트 하는 것이니 else : last_height = new_height라고 작성해야 하지 않을까 하는 생각이 드는데 혹시 else를 사용하지 않은 이유가 있나요..?답변 부탁드립니다. 감사합니다!
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
셀레니움으로 접근할 수 없는 경우
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 상황1) 동적 페이지여서 셀레니움을 사용하려고 했음2) 셀레니움으로 접근 시 '사람임을 확인하라'는 메시지만 뜨고 더 이상 작업을 할 수 없음 이런 경우에는 아래 방법으로 진행을 해야 할까요?1) 크롤링 원하는 페이지에 접속2) 개발자 도구에서 Copy > Copy Element 로 HTML 코드 복사3) HTML 코드에서 원하는 부분을 추출하는 파이썬 코드를 사용4) 1~3 과정을 반복해서 봐야 하는 페이지가 많다면 자동화할 수 있는 방법이 있을지?
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
웹페이지 변경
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 해당 웹페이지 변경으로 공지글과 하단 일반글이 둘다 <tbody>로만 되어있고, 확인되는 class태그인 article, board-list, inner-list 가 모두 동일한데 어떻게 구분해서 크롤링 할 수 있을까요?
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
자바스크립트로 태그 선택 시 질문입니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 해당 강의에서 아래 2가지 방법으로 '50개씩' 선택하는 법을 알려주셨는데, 드롭박스 선택 후 > 50개씩 선택드롭박스 선택 없이 자바스크립트로 50개씩 선택근데 2번의 경우, 자바스크립트 인자로 element를 보내야해서 먼저 element 선언을 해줘야하는데, 드롭박스 클릭을 하지 않으면 여전히 element 찾는 과정에서 NoSuchElementException 오류가 납니다. 드롭박스를 열어야 하는건가요 ..? 그렇다면 1번과 차이가 무엇인지 궁금합니다!
-
미해결[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
선생님 강의중에서 sqlite3 강의를 제공한 강의가 있나요?
지금 강의에 대한 질문은아니고,선생님 강의를 여러개를 구매했는데, 선생님 강의중에서 sqlite3를 설명해주신 강의가 있던거 같은데, 오늘 오랜만에 보려고 하니까 못찾겠더라구요.. 그래서 제 기억이 틀린건지. 아니면 못찾는건지 궁금해서 문의드립니다.
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
수료증은 어떻게 받나요?
완강했는데 수료증은 어떻게 받나요?