묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
강의 노트
안녕하세요?강의 노트가 제공된다고 했는데... 어디에서 찾아 볼 수 있는지요?
-
미해결파이썬 셀레니움 고급편 (python selenium - 크롤링, 크롤러)
게임 매크로에서 영감얻으셨다는 영상보고
궁금한게 있습니다.게임 매크로가 어려운게 맥 어드레스(?)도 가져가고 복잡하다고 하셨는데, 그럼 네이버나 구글 같은데서는 맥 어드레스 정보를 안가져갈까요? 이 강의를 토대로 구글이나 네이버 자동화 프로그램을 만들어도 효용이 있을까요?
-
미해결실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
title["href"] 가져올 때
import requests from bs4 import BeautifulSoup url = "https://search.naver.com/search.naver?where=view&sm=tab_jum&query=" keyword = input("검색어를 입력하세요: ") url = url + keyword print(url) #개발자 도구 > 네트워크 > www.naver.com > 요청 헤더 > user-gent headers = { "User-Agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" } req = requests.get(url, headers=headers) html = req.text soup = BeautifulSoup(html, "html.parser") # 게시물별 view 구역 total_area = soup.select(".view_wrap") rank_num= 1 for area in total_area: ad = area.select_one(".link_ad") if ad: continue print(f"<<<{rank_num}>>>") title = area.select_one(".title_area") name = area.select_one(".name") href = area.select_one(".title_link") print(title.text) print(name.text) # print(title["href"] print(href["href"]) print() rank_num += 1 <에러 문구>line 41, in <module> print(title["href"]) File "/User/opt/anaconda3/envs/edu/lib/python3.9/site-packages/bs4/element.py", line 1573, in getitem return self.attrs[key]KeyError: 'href' 안녕하세요, 수업 잘 듣고 있습니다.저도 블로그 링크를 바로 가져오고 싶어서 print(title["href"]로 가져오려 했으나 keyError가 발생합니다. 우선 대안으로, href 변수를 반들고 따로 링크만 가져올 수 있는 코드를 추가하긴 하였으나 왜 키 에러가 발생하여 print(title["href"]로 링크를 바로 못 가져 오는 것인지가 궁금합니다.
-
미해결실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
멜론 : response406
멜론 강의 실습중 계속 406 리스폰스가 뜨는데 우회나 다른방법이없을까요?
-
미해결[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
문제를 풀며 가장 자연스럽게 익숙해지는 파이썬 기본: 데이터 구조 - 리스트1 이거 문제 풀다가 궁금한 점이 생겨서요~
두가지 질문이 생겨서요 1번) 리스트를 만들때요 input을 받고 넣어도 좋을 것 같아서 아래 같이 코드를 짰습니다.local2=list()local2.append(input())local2.append(input())local2.append(input())local2.append(input())local2-> 결과 : ['서울', '부산', '인천', '경기']이렇게 떴고요list 명령어를 써서 아래 같이 짜니까lang2=list('java','c','c++')lang.append('golang')lang->결과 : Cell In[63], line 1 lang2=list()'java','c','c++') ^ SyntaxError: unmatched ')'에러가 뜨더라고요 그래서 빨간색부분을 "()" 대신에 "[]"로 바꿨더니 되더라고요무슨 차이인가요?? 위의 입력을 받을때는 "()"로 해도 되었는데 직접리스트를 넣을때는 "[]"로 해야하는지요? 2번) 리스트 만들고 출력할때 print를 써도 된다고 해서 써봤는데 안되더라고요local3=['서울','부산','경기']print(local3)->결과 : TypeError Traceback (most recent call last) Cell In[69], line 2 1 local3=['서울','부산','경기'] ----> 2 print(local3) TypeError: 'str' object is not callable 뭐가 문제인 걸까요????
-
미해결실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
질문드려요
강의 녹화 시점때와 다르게 현재 뷰 메뉴 태그값들이 모두 바뀐것같아서 강사님 강의에 따라 위 코드를 작성하였는데 v['href']를 사용하면 오류가 나와요...v.select_one('a')['href'] 을 입력하면 #으로 나오고요...확인좀부탁드릴게여.. # 라이브러리 호출 import requests from bs4 import BeautifulSoup # 검색어 입력 search_word = input('검색어를 입력해주세요\t:\t') # 크롤링 페이지 입력 target_url = 'https://search.naver.com/search.naver?where=view&sm=tab_jum&query=' + search_word print(f'접속페이지\t:\t{target_url}') # 데이터 요청 req_get_url = requests.get(target_url) get_html = req_get_url.text parser_soup = BeautifulSoup(get_html, 'html.parser') # select를 활용하여 태그값에 해당하는 모든 값을 리스트화로 가져옴 raw_data = parser_soup.select('div.view_wrap') for index, v in enumerate(raw_data): index += 1 user_data = v.select_one('a.name').text #▶▷▶▷▶▷ 뷰 게시글 작성자 추출 try: #제목 태그를 의미하는 .title_link._cross_trigger 가 None이면, 제목을 의미하는 다른 태그인 .title_link 로 데이터 추출. 그 외 다른 태그값으로 인하여 None 발생을 통한 오류가 생기면 '제목없음'으로 오류 예외처리 진행 title_data = v.select_one('.title_link._cross_trigger').text.replace('\n','').replace('\t',' ') #▶▷▶▷▶▷ 뷰 게시글 제목① 추출 if title_data == None: title_data = v.select_one('.title_link').text.replace('\n','').replace('\t',' ') #▶▷▶▷▶▷ 뷰 게시글 제목② 추출 except: title_data = '제목없음' print(f'{index} 번째글\n사용자명\t:\t{user_data}\n게시글 제목\t:\t{title_data}')
-
해결됨실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
zip 메서드를 활용해서 view 제목 및 작성자 불러오기
안녕하세요, 수업 잘 듣고 있습니다. 수업 녹화 당시와 현재와 웹페이지 클래스 명이 달라져서 작성자는 제 생각엔 .user_info 클래스를 사용하는 것 같아 사진과 같이 코드를 작성하고 실행하였으나출력문이 조용(?)합니다. 강의 영상을 보면 게시글 제목과 작성자 명이 함께 나오는데 제 코드는 "검색어를 입력하세요:" 외에 뜨는 출력 문이 없어어떤 것이 문제 인지 문의 드립니다.
-
해결됨내 업무를 대신 할 파이썬(Python) 웹크롤링 & 자동화 (feat. 주식, 부동산 데이터 / 인스타그램)
7.1 주식 일별 시세 데이터(Yahoo finance)
7.1 주식 일별 시세 데이터(Yahoo finance) yahoo finance에서 aapl로 검색하고, historical data를 클릭하고 기간을 5년으로 설정하고 Apply 버튼을 클릭하고, 일별시세 데이터를 더 많이 보이기 위해서 마우스 휠로 스크롤한 뒤에 Ctrl + f 로 일별시세 데이터 중 하나인 98,944,600를 입력하고검색하면(enter를 치면) '일치하는 항목이 없습니다.'라는메세지가 출력됩니다. 강의에서는 해당 데이터가 있는 페킷을 잘 선별해주는데 저는 아무리 해도 잘 안되네요. 무엇은 문제일지 짐작가시는 것이 있을 까요?
-
미해결실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
네이버가 보니까 첫 화면이 리액트로 된 듯 한데요. ㅠㅠ
안녕하세요. 수업 잘 듣고 있습니다.다름이 아니라 네이버가 리액트를 메인에 적용한 듯 한데요혹시 제가 코드를 잘 못 넣은 건지 살펴봐 주실 수있는지요아직 다른 강좌는 듣지 않은 상태인 점 양해 바랍니다.좋은 하루되세요.import requests from bs4 import BeautifulSoup url = "https://naver.com" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" } req = requests.get(url, headers=headers) html = req.text soup = BeautifulSoup(html, "html.parser") print(soup.title)
-
미해결[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
엑셀에 몇몇 style 적용이 안돼요.
안녕하세요프로젝트 크롤링 엑셀보고서 프로그래밍 6에서10단계 셀에 border 넣기를 직접 수행해보는데주피터노트북에서 실행되어 엑셀파일은 만들어지는데border, paternfill 등 스타일이 적용이 안됩니다.ㅜㅜ다른 스타일은 잘 되는데 border, paternfill이 안돼서 엑셀 설정을 건드려야하는건지 여쭤봅니다.감사합니다.
-
해결됨실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
네이버 뷰 페이지에서 제목 클래스 print할 때
안녕하세요, 잘 듣고 있습니다. 네이버 view탭 검색 결과 크롤링1을 보고, 따라하고 있습니다. 강사님 녹화하실 당시의 네이버와 현재 네이버 페이지가 구조가 좀 달라져서 제 나름대로 적용을 하려고 했으나 이해가 안되는 부분이 있어 문의 드립니다. 강사님이 쓰신 class명이 현재는 안 쓰이는 듯하여 현재 페이지 기준에 맞춰 class명을 작성한 후 출력을 했는데 '[]' 이렇게 빈 리스트 값이 나타났는데 왜 그런지 모르겠습니다.위 내용이 궁금하여 문의 드립니다.result = soup.select(".title_link.cross_trigger") print(result)
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
유튜브 크롤링
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 선생님파이썬 처음 깔아봤는데 덕분에 여기까지 왔습니다어떻게 이것저것 끼워넣어서 코드를 만들기는 했는데유튜브 크롤링시날짜 지정해서 그 날짜만 가져오고 싶습니다스크롤 없애고 날짜 지정을 넣고 싶은데 너무 어렵네요코드 수정 부탁드려도 될까요ㅠㅠfrom selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.chrome.options import Options from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from bs4 import BeautifulSoup import time import pyautogui import openpyxl # 검색어 입력 keyword = pyautogui.prompt("검색어를 입력하세요") # 엑셀 생성 wb = openpyxl.Workbook() ws = wb.create_sheet(keyword) ws.append(['번호', '제목', '조회수', '날짜', 'URL']) #열 너비 조절 ws.column_dimensions['A'].width = 5 ws.column_dimensions['B'].width = 80 ws.column_dimensions['C'].width = 20 ws.column_dimensions['D'].width = 15 ws.column_dimensions['E'].width = 80 # 브라우저 설정 chrome_options = Options() chrome_options.add_experimental_option("detach", True) chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"]) browser = webdriver.Chrome(options=chrome_options) # YouTube 검색 페이지로 이동 url = f"https://www.youtube.com/results?search_query={keyword}" browser.implicitly_wait(5) browser.maximize_window() browser.get(url) # 스크롤 횟수 scroll_count = 5 # 스크롤 수행 i = 1 while True: browser.find_element(By.CSS_SELECTOR, "body").send_keys(Keys.END) time.sleep(0.7) if i == scroll_count: break i += 1 # 동적으로 로딩되는 콘텐츠를 기다림 wait = WebDriverWait(browser, 10) wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "ytd-video-renderer #video-title"))) # 페이지 소스를 가져와 BeautifulSoup으로 파싱 html = browser.page_source soup = BeautifulSoup(html, 'html.parser') videos = soup.select("ytd-video-renderer") # 정보 추출 for i, video in enumerate(videos, 1): title = video.select_one("#video-title").text.strip() metadata = video.select_one("#metadata-line") views = metadata.find_all("span")[0].text.strip() if metadata else "조회수 0회" date = metadata.find_all("span")[1].text.strip() if metadata else "날짜 없음" # 각 영상의 URL 가져오기 video_url = video.select_one("#video-title").get("href", "") full_url = f"https://www.youtube.com{video_url}" print(title, views, date, full_url) ws.append([i, title, views, date, full_url]) # 브라우저 종료 browser.quit() # 엑셀 파일 저장 wb.save(f"{keyword}_유튜브_검색결과.xlsx")
-
미해결[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
파이썬을 통한 네이버api get 오류
안녕하세요 선생님. 유익한 수업내용과 스킬노하우 알려주셔서 감사드립니다. 제힘으로 구글링 및 gpt등으로 해결하려했으나 api 인증관련 조치방법 파악이힘들어서요,,, 포스트맨은 인증이되어 json 형태로 받아지나, 파이썬 코드로는 인증에러가 뜨는상황입니다. (아래사진참고부탁드립니다)노하우 및 고견 주시면 감사드리겠습니다.
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
유튜브 크롤링시 어려움
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요유튜브 크롤링 중에 이렇게 코드를 돌리면 전립선암의 증상과 진단을 위한 검사는? [AMC 병법] 조회수 0회 날짜 없음 모든 결과가 조회수0회 날짜없음으로 가져와집니다ㅠㅠ어디가 문제일까요? from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.chrome.options import Options import time from bs4 import BeautifulSoup # 브라우저 꺼짐 방지 chrome_options = Options() chrome_options.add_experimental_option("detach", True) # 불필요한 에러 메시지 없애기 chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"]) # 브라우저 생성 browser = webdriver.Chrome(options=chrome_options) url = "https://www.youtube.com/results?search_query=%EC%95%94" #웹페이지 해당 주소 이동 browser.implicitly_wait(5) #웹페이지가 로드될때까지 5초는 기다린다 browser.maximize_window() #화면 최대화 browser.get(url) #3번 스크롤하기 scroll_count = 3 i = 1 while True: #맨 아래로 스크롤을 내린다. browser.find_element(By.CSS_SELECTOR,"body").send_keys(Keys.END) #스크롤 사이에 페이지 로딩 시간 time.sleep(2) if i == scroll_count: break i += 1 #selenium - beautifulsoup 연동방법 html = browser.page_source soup = BeautifulSoup(html, 'html.parser') infos = soup.select("div.text-wrapper") for info in infos: #원하는 정보 가져오기 #제목 title = info.select_one("a#video-title").text try: #조회수 views = info.select_one("div#metadata-line > span:nth-child(1)").text #날짜 date = info.select_one("div#metadata-line > span:nth-child(2)").text except: views = "조회수 0회" date = "날짜 없음" print(title, views, date) browser.quit()
-
미해결실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
쿠팡 크롤링 상품 순서 질문
강의 들으며 똑같이 코드를 작성했습니다.다만, 로캣배송 badge_rocket 까지 작성했을 때, 막상 홈페이지에 나와있는 순위와 비교를 하며 보니 일치하지 않고 순서가 뒤죽박죽 되어 나와 있습니다. 또한 화면 상에서는 광고 표시가 없지만, 막상 html을 살펴보면 search-product search-product__ad-badge라고 되어 있는 경우도 있습니다. 혹 새로고침 할 때 마다 조금씩 바뀌어 제공하는 것 때문에 그런 것인지, 코딩 창과 홈페이지를 동시에 새로고침 해 보아도 순위가 정확하지 않습니다. 이런 상황에서 크롤링이 정확하게 되고 있는 지 어떻게 알 수 있나요?
-
미해결실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
검색 창??
저 창에 제목 class를 붙여 넣으셔서 옆에 화살표로 막 살펴보시던데, 저는 그런게 없거든여. 혹시 어디서 찾을 수 있는건가여?
-
해결됨[신규 개정판] 이것이 진짜 크롤링이다 - 기본편
약간 변태(?)같지만 해당 코드를 깔끔하게 함수로 리팩토링해보았습니다
import openpyxl import requests from bs4 import BeautifulSoup # stock_data파일을 불러와서 B2, B3, B4에 현재가를 저장해보자. fpath = ( r"C:\Users\UserName\OneDrive\바탕 화면\웹 스크래핑 연습\new_project\02_파이썬엑셀다루기\stock_data.xlsx" ) wb = openpyxl.load_workbook(fpath) ws = wb.active # 현재 활성화된 엑셀시트를 선택한다 # ws = wb["주식크롤링"] def stock_crawl(codes): row_start = 2 for code in codes: url = f"https://finance.naver.com/item/sise.naver?code={codes[code]}" response = requests.get(url) html = response.text soup = BeautifulSoup(html, "html.parser") price = soup.select_one("#_nowVal").text # str -> int price = int(price.replace(",", "")) # 크롤링한 현재가를 엑셀에 저장(3번 반복) ws[f"B{row_start}"] = price row_start += 1 # 엑셀 저장하기 wb.save(fpath) stock_crawl({"엔씨소프트": "036570", "삼성전자": "005930", "네이버": "035420"})크롤링 재밌네요 ㅎㅎ
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
크롬 웹드라이버가 필요 없어진걸로 알고 있습니다. 어떻게 수정해야 하나요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 유튜브 제목 크롤링을 하려는데웹드라이버문제로 아예 초반부터 막혔습니다ㅠㅠ초반 코드 도와주세요...
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 기본편
과제 답안을 보지않고 스스로 구글링해서 만든 웹 크롤링 프로그램(10페이지 단위) 코드입니다.
import requests from bs4 import BeautifulSoup import urllib # 입력받은 input을 url로 변환 def web_crawler(keyword_input, pages=1): # headers headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" } # input -> url 변환 keyword = urllib.parse.quote(keyword_input) print("파이썬 문자열을 url 코드로 변환:", keyword) base_url = "https://www.google.com/" # 10페이지까지 크롤링 for page in range(pages): start = page * 10 search_url = f"{base_url}/search?q={keyword}&hl=ko&gl=KR&ceid=KR%3Ako&start={start}" print("\n검색어와 조합한 url:", search_url) # soup을 이용한 웹 크롤링 작업(headers 매핑 중요!) response = requests.get(search_url, headers=headers) html = response.text # 응답 상태 확인 if response.status_code == 200: soup = BeautifulSoup(html, "html.parser") # h3 제목 추출 titles = soup.find_all("h3") for title in titles: print(title.get_text()) else: print("에러:", response.status_code) web_crawler("크롤링 잘하고 싶다", 1)아무래도 구글은 무한스크롤 형식이라 페이지 별로 크롤링하기가 까다롭네요
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
전처리전 강의인데 조회수와 날짜가 출력되지 않습니다.
from selenium import webdriverfrom selenium.webdriver.common.keys import Keysfrom bs4 import BeautifulSoupimport timeimport pyautoguiimport openpyxl# 검색어 입력keyword = pyautogui.prompt("검색어를 입력하세요")#엑셀 생성wb = openpyxl.Workbook()ws = wb.create_sheet(keyword)ws.append(['번호','제목','조회수', '날짜']) url = f"https://www.youtube.com/results?search_query={keyword}"browser = webdriver.Chrome("c:/chromedriver.exe" )browser.implicitly_wait(10)browser.maximize_window()browser.get(url)# 7번 스크롤하기scroll_count=7i=1while True: # 맨 아래로 스크롤을 내린다. browser.find_element_by_css_selector("body").send_keys(Keys.END) # 스크롤 사이에 페이지 로딩 시간 time.sleep(2) if i == scroll_count: break i +=1 # Selenium - Beautifulsoup 연동방법html = browser.page_sourcesoup = BeautifulSoup(html, 'html.parser')infos = soup.select("div.text-wrapper")for i, info in enumerate(infos, 1):# 원하는 정보 가져오기# 제목 title = info.select_one("a#video-title").text try: # 조회수 views = info.select_one("div#metadata-line>span:nth-child(1)").text # 날짜 date = info.select_one("div#metadata-line>span:nth-child(2)").text except: views = "조회수 0회" date = "날짜 없음" print(title, views, date) ws.append([i, title, views, date])wb.save(f'07_유투브_크롤링/{keyword}.xlsx')