[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
- 본 강의 영상 학습 관련 문의에 대해 답변을 드립니다. (어떤 챕터 몇분 몇초를 꼭 기재부탁드립니다) - 이외의 문의등은 평생강의이므로 양해를 부탁드립니다 - 현업과 병행하는 관계로 주말/휴가 제외 최대한 3일내로 답변을 드리려 노력하고 있습니다 - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. section 5 여러페이지 크롤링하기 / 11분쯤에 data = soup.select ('h4-card-text') 는 실행되는데 data = soup.find_all ('h4-card-text')은 출력이 안됩니다 왜 그럴까요..?
안녕하세요. 4. CDP Command 종류 많죠? 잘 정리된 사이트 소개해드림 부분 강의 듣고있습니다. 파란 사이트, 초록 사이트 주소 알려주신다고 했는데 어디에 나와있나요? 그리고 문서에서 어떤 걸 저희가 능동적으로 찾아야 하고 어떻게 읽고 적용하는지도 알려주시면 좋겠습니다. 필요한 걸 저희가 직접 찾고 적용하는 방법을 알려주셔야 하는데 그냥 코드만 알려주시니까 저희 상황에 맞게 수정하는 방법을 모르겠습니다. 문서를 활용해서 저희에게 어떤 속성이 필요한지 찾는 방법도 자세히 알려주시면 감사하겠습니다. Emulation 이랑 Network랑 뭐가 다른지도 모르겠어요. setDeviceMetricsOverride 가 왜 필요한건진 알겠는데 이 속성이 필요하다는 걸 아는 방법은 모르겠어요. 즉 물고기를 잡아주기만 하는 게 아니라 잡는 방법을 알려주셨으면 합니다.
안녕하세요. ch 2-2 User Agent Data 변경하는법 강의에서 10:00, 10:09 에 '내 눈으로 본것만 믿읍시다' 자막 부분 이해가 안갑니다. Not?A_Brand는 version 끝자리 숫자로 바뀌었네요 이게 무슨 뜻인가요? version last string 값을 넣어주시죠 version 110 되었을때는 0이 될지 10이 될지 그거는 그때 확인해야할듯함 이거는 무슨 뜻일까요?? 강의 보다보면 이렇게 추가적으로 중간중간 자막 달아주신것들이 이해가 안되는 것들이 많습니다. 맥락을 충분히 설명 안해주시고 말씀하시는 느낌이 든달까... 조금만 더 자세히 설명해주시면 감사하겠습니다 ㅜㅜ --------------- 추가로, 이 강의에선 undetected_chromedriver 를 사용하지 않고 일반 웹드라이버를 사용하셨는데 undetected 드라이버랑 함께 사용하지 않으신 이유가 뭘까요??
[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
중간쯤에 나오는 문제인데요 (1번) data1=int(input()) if 100>=data1>=81: print("A") elif 80>=data1>=61: print("B") else: print("C") (2번) data1=int(input()) if data1<=100 and data1 >=81: print("A") elif data1<=80 and data1>=61: print("B") else: print("C") 전 위의 1번 방식으로 풀었는데 강사님은 2번방식으로 하더라고요 위의 2개가 차이가 있을까요??? 답은 동일하게 나오는데요~
[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
영상 0:43 부분에 알려주신 코드 그대로 입력하고 shift+enter를 눌러 실행시켰는데 예시처럼 밑에 출력되지 않고 다음 행으로 넘어가기만 합니다ㅜㅜ 어떻게 해야 출력이 될까요? - 본 강의 영상 학습 관련 문의에 대해 답변을 드립니다. (어떤 챕터 몇분 몇초를 꼭 기재부탁드립니다) - 이외의 문의등은 평생강의이므로 양해를 부탁드립니다 - 현업과 병행하는 관계로 주말/휴가 제외 최대한 3일내로 답변을 드리려 노력하고 있습니다 - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
선생님에게서 파이썬을 처음 배우고, 덕분에 크롤링을 체험할 수 있었습니다. 항상 감사한 마음으로 수강하고 있습니다. 조악하지만, 아래와 같은 코드로 유튜브 크롤링 코드를 만들어 보았는데 예를들어, https://www.youtube.com/@user-rr5gv5ov5j 와 같은 채널의 동영상은 대략 88개인데 최종적으로 수집되는 데이터는 11개 동영상에 한정되어 수집됩니다. 제가 어느 부분을 놓치고 있는지 감을 잡기가 어렵네요. 또한 개선해야할 부분이 있다면 검토 부탁드립니다. 바쁘시더라도 검토를 부탁드리며 작성해본 코드를 첨부합니다. ^^ except Exception as e: print("스크롤 중 에러가 발생하였습니다.: ", e) all_titles = soup.find_all('yt-formatted-string', class_='style-scope ytd-rich-grid-media') all_views = soup.find_all('span', class_='style-scope ytd-thumbnail-overlay-time-status-renderer') titles = [title.string for title in all_titles] views = [view.string.strip() for view in all_views]
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"]로 링크를 바로 못 가져 오는 것인지가 궁금합니다.
[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
두가지 질문이 생겨서요 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}')
안녕하세요, 수업 잘 듣고 있습니다. 수업 녹화 당시와 현재와 웹페이지 클래스 명이 달라져서 작성자는 제 생각엔 .user_info 클래스를 사용하는 것 같아 사진과 같이 코드를 작성하고 실행하였으나 출력문이 조용(?)합니다. 강의 영상을 보면 게시글 제목과 작성자 명이 함께 나오는데 제 코드는 "검색어를 입력하세요:" 외에 뜨는 출력 문이 없어 어떤 것이 문제 인지 문의 드립니다.
내 업무를 대신 할 파이썬(Python) 웹크롤링 & 자동화 (feat. 주식, 부동산 데이터 / 인스타그램)
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)
[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
안녕하세요 프로젝트 크롤링 엑셀보고서 프로그래밍 6에서 10단계 셀에 border 넣기를 직접 수행해보는데 주피터노트북에서 실행되어 엑셀파일은 만들어지는데 border, paternfill 등 스타일이 적용이 안됩니다.ㅜㅜ 다른 스타일은 잘 되는데 border, paternfill이 안돼서 엑셀 설정을 건드려야하는건지 여쭤봅니다. 감사합니다.
안녕하세요, 잘 듣고 있습니다. 네이버 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")