묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
모달 스크롤 문의
안녕하세요 셀리니움 스크립트를 작성하고 있는데 페이지 내 임의 모달 호출 후 해당 모달 리스트를 스크롤 동작하는걸 작성하고 싶은데 계속 오류가 나고 있습니다. 어떻게 해야 하는지 문의 드립니다.
-
미해결실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
크롤링 데이터 가공 후 입력창에 넣기
수업 잘 듣고 있습니다.자동화를 하고 싶으서 예전 영상 보다가 최근에 다시 올라와서 보는 중 강의 발견하고 바로 수강해서 듣고 있습니다. 궁금한 것이 하나 있는데요.셀레니움에서 하나의 윈도우 창의 특정 태그 값을 찾아서다른 윈도우 창을 오픈 한 후 특정 필드에 값을 넣을 수 있나요?
-
미해결쉽게 처음하는 파이썬 고급 크롤링 [Scrapy, Selenium, Headless Chrome]
headless chrome 오류 문의
안녕하세요 headless chrome 오류 문의 드립니다.위 코드 실행 시..WebDriverException: Message: unknown error: Chrome failed to start: was killed. 오류문구가 뜨는데크롬 드라이버 이슈가 있는 걸까요???크롬, 크롬드라이버는 110버전으로 사용하고 있습니다.추가로 셀레니움은 잘됩니다!!
-
미해결파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)
구글 무비 강좌에서요
movies=soup.find_all("div",attrs={'class':'???}) title=movie.find('span',attrs={'class':'???'}).get_text()attrs 값을 못찾겠습니다.
-
미해결실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
다음 업데이트는 어떤 내용인지 알수있을까요?
강의 잘 보고있습니다.다음 업데이트는 어떤 내용이 올라올지 궁금해서 질문올립니다.
-
해결됨네이버 카페 DB 추출 프로그램 개발 강의 [selenium]
이강의도
솔직히 들어본 결과처음에 파이썬 셀레니움 이나 poser 크롬 드라이브 설치부터 0강의에 넣어 두시는 게 ...좋을 거 같아요추가적으로 GUI강좌 까지 하시면 가격 더 올려도많은 사람들이 한번 볼 꺼 같습니다 아무튼 같은 부산 사람이라 강의 한번 들었는데정말 설명을 잘하시네요 ^^
-
미해결블로그 자동화 프로그램 개발 강의 (파이썬 + 셀레니움)
time.sleep 에 대한 개선방법 문의
강의에서 기능 구현을 빠르게 하기위해 브라우저 화면 로딩이 끝날 때까지 time.sleep 으로 코드 진행을 멈추도록 작성되어 있습니다. 강의 도중에 해당 부분을 다른 방법으로 변경한다고 언급했는데, 변경되지 않은 채로 강의가 종료되었습니다. 이 부분은 어떻게 개선될 수 있을까요?일반적으로는 webdriver에서 제공하는 implicitly_wait을 이용하는 것으로 알고 있는데, 더 나은 방법이 있을까요?
-
미해결블로그 자동화 프로그램 개발 강의 (파이썬 + 셀레니움)
서이추 에러 URL 관련 문의
[이웃신청] 추출한 블로거의 계정에 이웃신청을 해봅시다 1위 강의에서 서이추 화면 URL 에러가 왜 발생한건가요? 에러라고 말씀하신 URL로 GET을 날려봤는데, 크롬 웹 드라이버가 아무런 반응을 하지 않더라구요. 혹시 다른 사이트 자동화를 할 때, 어떻게 지금처럼 "URL 에러구나" 라고 판단할 수 있는지 궁금합니다.그리고 이를 우회하기 위해서 모바일 페이지의 URL을 이용하신 것 같은데, 혹시 블로그에서 모바일 URL을 제공하지 않았다면 방법이 없었을까요?
-
해결됨실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
추출한 데이터를 판다스 데이터프레임으로 만들고 엑셀파일로 만드는 내용 추가
크롤링 잘 배우고 있습니다. 추가 요청사항이 있는데요. 추출한 데이터를 판다스 데이터프레임으로 만들고 엑셀파일로 만드는 내용도 추가되면 다양하게 활용하는데 좋을 것 같습니다.
-
미해결파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)
네이버 IT뉴스 화면 requets.get 에러가 발생합니다ㅜ
네이버 IT 뉴스 링크를 그냥 크롬이나 사파리를 통해서 접속하면 정상적으로 잘 접속이 됩니다.하지만 requests.get을 사용하면 에러가 발생해 파싱을 정상적으로 하기 힘든 상황입니다.ㅠ셀레니움을 사용하던지 다른 뉴스 페이지를 사용해야할거같습니다.저의 경우는 구글뉴스를 파싱 했습니다.좋은 강의 해주셔서 감사합니다.! import re import requests from bs4 import BeautifulSoup weather_url = "https://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&query=%EC%84%9C%EC%9A%B8+%EB%82%A0%EC%94%A8&oquery=%EC%84%9C%EC%9A%B8+%EB%82%A0%EC%8B%9C&tqi=h%2B4nksprvTVssQv3%2BkdssssstAZ-264690" news_url = "https://www.google.com/search?q=%EA%B5%AC%EA%B8%80%EB%89%B4%EC%8A%A4&rlz=1C5CHFA_enKR979KR979&source=lnms&tbm=nws&sa=X&ved=2ahUKEwio8ZP_jIP9AhXnm1YBHfaRBAUQ_AUoAXoECAEQAw&biw=1057&bih=976&dpr=1" english_url = "https://www.hackers.co.kr/?c=s_eng/eng_contents/I_others_english&keywd=haceng_submain_lnb_eng_I_others_english&logger_kw=haceng_submain_lnb_eng_I_others_english" headers = { "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36", "Accept-Language":"ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7" } def create_soup(url): res = requests.get(url, headers=headers) res.raise_for_status() return BeautifulSoup(res.text, "lxml") def get_weather_info(): soup = create_soup(weather_url) current_temp = soup.find("div", attrs={"class": "temperature_text"}).get_text().strip().split()[-1][2:] compare = soup.find("p", attrs={"class": "summary"}).get_text() summary_list = soup.find("dl", attrs={"class": "summary_list"}).get_text().strip() dust = soup.find_all("li", attrs={"class": "item_today level1"})[0].get_text().strip() micro_dust = soup.find_all("li", attrs={"class": "item_today level1"})[1].get_text().strip() uv = soup.find("li", attrs={"class": "item_today level2"}).get_text().strip() sunset = soup.find("li", attrs={"class": "item_today type_sun"}).get_text().strip() rain_ratio = soup.find("li", attrs={"class": "week_item today"}).find_all("span", attrs={"class": "weather_left"}) rain_ratio_am = rain_ratio[0].get_text().strip() rain_ratio_pm = rain_ratio[1].get_text().strip() print("현재 기온 : {}".format(current_temp)) print(compare) print(summary_list) print("{} / {} / {} / {}".format(dust, micro_dust, uv, sunset)) print("강수 확률 : {} / {}\n".format(rain_ratio_am, rain_ratio_pm)) def get_news_headline(): soup = create_soup(news_url) headlines = soup.find_all("div", attrs={"class": "mCBkyc ynAwRc MBeuO nDgy9d"}, limit=6) urls = soup.find_all("a", attrs={"class": "WlydOe"}, limit=6) for idx, headline in enumerate(headlines): print(headline.get_text()) print(urls[idx]["href"] + "\n") def get_eng_sentence(): soup = create_soup(english_url) expression = soup.find_all("b", attrs={"class": "conv_txtTitle"}) sentences = soup.find_all("div", attrs={"id": re.compile("conv_kor_t\d*")}) print("\n< 오늘의 영어 회화 >") print("한글 표현") print("* " + expression[0].get_text()) for sentence in sentences[0:len(sentences)//2]: print(sentence.get_text().strip()) print("\n영어 표현") print("* " + expression[1].get_text()) for sentence in sentences[len(sentences) // 2:]: print(sentence.get_text().strip()) def main(): get_weather_info() get_news_headline() get_eng_sentence() if __name__ == "__main__": main()
-
미해결파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)
23년 2월 7일, 다음 부동산 화면이 다름
23년 2월 7일 현재, 강의해주신 다음부동산의 화면이 상이해 네이버 부동산을 이용해서 비슷하게 따라해봤습니다.import requests from bs4 import BeautifulSoup url = "https://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&query=%EC%86%A1%ED%8C%8C+%ED%97%AC%EB%A6%AC%EC%98%A4%EC%8B%9C%ED%8B%B0+%EB%A7%A4%EB%AC%BC&oquery=%EC%86%A1%ED%8C%8C+%ED%97%AC%EB%A6%AC%EC%98%A4%EC%8B%9C%ED%8B%B0+%EB%A7%A4%EB%A7%A4&tqi=h%2B4thwprvmZss6uUL7ossssstOZ-299895" res = requests.get(url) res.raise_for_status() soup = BeautifulSoup(res.text, "lxml") houses = soup.find_all("tr", attrs={"class": {"_land_tr_row"}}) for num, house in enumerate(houses): info = house.get_text().split() print(f"=========={num+1}번 매물==========") print(f"매매 방식 : {info[0]}") print(f"매물 위치 : {info[1]}") print(f"매물 이름 : {info[2]}") print(f"동 : {info[3][:4]}") print(f"거래 부동산 : {info[3][4:]}") print(f"면적 : {info[4]}") print(f"가격 : {info[5]} 만원") print(f"층 : {info[-2]}")
-
해결됨실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
영상 3초에 사이트 소개 하실때
ssg.co.kr 이라고 말씀하십니다.(영상에서 연습할 사이트는 cgv) 수업에는 방해되지 않는 부분입니다:))
-
미해결쉽게 처음하는 파이썬 고급 크롤링 [Scrapy, Selenium, Headless Chrome]
Selenium 처리 속도 관련 문의드립니다.
연습1 모범 코드: id가 begin 인 데이터만 출력해보기 코드를 실행해보면,데이터 출력까지 꼬박 30초가 걸리네요..from selenium import webdriverfrom selenium.webdriver.common.keys import Keysimport timefrom selenium.webdriver.common.by import Byfrom selenium.webdriver.chrome.service import Servicefrom webdriver_manager.chrome import ChromeDriverManagerchromedriver = 'C:/dev_python/Webdriver/chromedriver.exe'driver = webdriver.Chrome(service=Service(chromedriver))driver.get("https://davelee-fun.github.io/blog/crawl_html_css.html")elems = driver.find_elements(By.ID, 'begin')for elem in elems : print(elem.text)driver.quit() 강사님 영상보면 늦어도 5초 이내에 실행되는 것 같은데 좀 답답한 마음에 문의 드립니다.data:, 화면에서 20초 가량을 멈춰있어요..구글링 해보니 브라우저와 드라이버 버전을 맞추면 실행이 빨라진다 해서, 몇 번 재설치를 해봐도 안되고 있네요..109.0.5414.25와 .74 모두 설치해봤으나 동일한 처리 속도이며,,Edge드라이버를 설치해서 불러와도 30초가 걸리네요.참고로 제가 사용하는 컴퓨터이며, 크롬에서 주소 입력시 1초 이내로 반응합니다. 강의 내용과는 조금 벗어날 수도 있는 부분인 것 같으나..현업이나 교육 중에 이런 현상을 보신 적이 있으실까 싶어서 여쭤보네요.강의는 정말 잘 듣고 있습니다.양질의 강의 찍어주셔서 정말 감사드려요!!^^
-
미해결파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)
네이버 항공권 관련 제가 작성한 코드 조심스럽게 공유해드립니다.ㅜ
안녕하세요먼저 좋은 강의 해주시는 나도코딩님께 감사드립니다. 이전에 나름 정성들여 글을 작성했는데, 확인이 안돼서 다시 작성해봅니다. 제가 강의를 보고있는 2023년 1월 19일과 강의날인 2020년 8월과 네이버 항공권 인터페이스가 많이 상이하고, 셀레니움과 파이썬 버전이 달라 저의경우 아래와 같이 코드를 작성했습니다. 다른분들께 도움이 되었으면 좋겠습니다. 현재 저의 환경의 경우 python버전 3.10.7 버전이고 selenium또한 강의때 사용하신것 보다 더 높은 것으로 보입니다. 현재 제 경우와 강의내용과 상이한 부분은 아래와 같습니다. 네이버 항공권 진입시, "지금 바로 혜택 확인하기" 광고 팝업창 발생, 해당부분 get_attribute메소드를 사용해 title을 비교해, 팝업이 있다면 팝업을 삭제하는 XPATH를 확인해 해당 엘리먼트를 클릭하도록 구현browser.find_element_by_class_name과 같이 find_element_by_~~ 메소드 사용불가=> 현재 제가 사용중인 셀레니움 버전이 상위 버전으로 보이는데, 이는 3 line과 같이 import By로 쉽게 수정 가능find_elements_link_text 메소드 사용 불가=> 2020년대비 2023년 현재 네이버 항공권 웹페이지 인터페이스의 변화때문인지 "가는 날" 및 날짜 선택을 위해 해당 메소드 사용시 빈리스트만 반환"가는 날"은 XPATH로 엘리먼트를 얻어와 클릭하도록 구현원하는 날짜의 경우 class이름을 확인해 모든 날짜정보를 갖고와 원하는 날짜정보만 사용하도록 구현 (compute_date 함수 참고 부탁 드립니다.)추가적으로, 이 경우에 1년치 달력정보를 모두 읽어와 속도가 매우 느린데 더 좋은 방법을 알고계신분은 공유 부탁드립니다. ( _ _ )compute_date(dates, 30)[1].click()코드를 이렇게 수정해 오는날을 2월 30일을 선택하려 했으나 3월 30일을 선택해, 코드 오류인줄 알고 디버깅해보니 2월달은 30일이 없었습니다...ㅎ정상동작 중 입니다.저와같이 초반에 고생하시는 분들께 조금이나마 도움이 되었으면 좋겠습니다.감사합니다. import time from selenium import webdriver from selenium.webdriver.common.by import By URL = "https://flight.naver.com/" def compute_date(dates, target) -> list: print("compute entire date information from current month to limit") return [date for date in dates if date.text == str(target)] browser = webdriver.Chrome() # browser.maximize_window() browser.get(URL) time.sleep(1) # remove AD popup find = browser.find_elements(By.CLASS_NAME, "anchor") for f in find: if f.get_attribute("title") == "지금 바로 혜택 확인하기": browser.find_element(By.XPATH, '//*[@id="__next"]/div/div[1]/div[9]/div/div[2]/button[1]').click() print("remove pop up") break # push 가는 날 button also delay 1 sec is necessary, if don't use this, can not read date information. browser.find_element(By.XPATH, '//*[@id="__next"]/div/div[1]/div[4]/div/div/div[2]/div[2]/button[1]').click() time.sleep(1) # read date information and push 25 day dates = browser.find_elements(By.CLASS_NAME, "sc-evZas dDVwEk num".replace(" ", ".")) compute_date(dates, 25)[0].click() # read date information and push 30 day dates = browser.find_elements(By.CLASS_NAME, "sc-evZas dDVwEk num".replace(" ", ".")) compute_date(dates, 30)[0].click() while True: pass
-
미해결웹 자동화 프로그램 만들기(파이썬 + 셀레니움)
"크롬이 자동화된 프로그램에 의해 제어되고 있다며" 실행을 중단시킵니다. 실행 중단을 혹시 막을수는 없을까요?
from selenium import webdriver driver = webdriver.Chrome("./chromedriver") 이렇게 치면 화면이 잠깐 떳다가 바로 중단되서 사라지는데 실행 중단을 막을수 없을까요?
-
미해결파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)
bs4 활용 2-1 질문합니다.
코드 실행시 정보가 오지 않고 반응이 없습니다!
-
미해결
동적 크롤링에 관련하여 질문 드립니다.
안녕하세요. 이번에 크롤링 강의를 듣고 있는 수강생 입니다. 현재 네이버 지도에서 위치를 검색 후 클릭 -> 클릭-> 한 후 네이버의 한줄평 리뷰 를 크롤링 하는 자체 프로젝트를 진행중입니다. 이때, 검색창을 찾고, click() 을 이용해 Crawling 을 위한 (3) 페이지 로딩까지는 성공하였으나, 옆의 화면에서 click 및 어떠한 활동도 할 수 없는 상태입니다. 제 소스 코드는 이렇습니다. for l in list_loc: ele = l.split((','))[:-1] comp = unicodedata.normalize('NFC',ele[-1][-1]) if comp != dong and comp != eup and comp != myun and comp != lee and comp != ga :continue address = ele[0]+' '+ele[1]+ ' '+ele[2]+' 식당' add_quote = urllib.parse.quote(address) driver.get(url) sleep(1) key_search = address time_wait(2,'div.input_box > input.input_search') search = driver.find_element(By.CSS_SELECTOR,'div.input_box > input.input_search') sleep(1) search.send_keys(key_search) search.send_keys(Keys.ENTER) res = driver.page_source soup = BeautifulSoup(res, 'html.parser') # html 파싱하여 가져온다 sleep(1) def switch_frame(frame): driver.switch_to.default_content() # frame 초기화 driver.switch_to.frame(frame) # frame 변경 res soup def page_down(num): body = driver.find_element(By.CSS_SELECTOR,'body') body.click() for i in range(num): body.send_keys(Keys.PAGE_DOWN) switch_frame('searchIframe') page_down(3) sleep(1) # 매장 리스트 store_list = driver.find_elements(By.CSS_SELECTOR, '._1EKsQ') next_btn = driver.find_elements(By.CSS_SELECTOR, '._2ky45 > a') print(len(next_btn), '....') for btn in range(len(next_btn))[1:]: # next_btn[0] = 이전 페이지 버튼, 1,2 : 광고/ 0,1,2 무시 -> [3]부터 시작 print(next_btn[btn].text, 'adsadsa') store_list print(store_list[0].text) store_page = driver.find_elements(By.CSS_SELECTOR, '.OXiLu') for data in range(len(store_list)): # 매장 리스트 만큼 #print(data, len(store_page), store_page[data].text, '00') store_page[data].click() sleep(2) try: driver.switch_to.default_content() print('switch test1') sleep(0.5) driver.switch_to.frame('entryIframe') sleep(4) print('switch test2') reviews = driver.find_elements(By.CSS_SELECTOR,'_2RG_o') except:pass 여기서, (3) 의 페이지가 네이버 지도의 entryIframe 안에 있는 것을 알고, switch frame 을 시도했습니다만, 무슨 락이 걸려 있는것인지 저 entryIframe 이 전혀 검색이 되지 않습니다. 하지만 소스 페이지 검색 결과, entryIframe 는 분명이 존재합니다. 제가 무엇을 빼먹은 것인지, 무엇을 잘못 하고 있는 것인지 알고 싶습니다. 감사합니다.
-
미해결
selenium을 활용한 업무 자동화 클릭, 다운로드
질문 https://www.localdata.go.kr/devcenter/dataDown.do?menuNo=20001 사이트에서 데이터 다운로드 - 전체 데이터 다운로드 - 전체분 - excel 다운로드를 하고자 합니다. 이를 위해서 우선 링크에서 '전체 데이터 다운로드'단계로 가려고 캡쳐처럼 id를 down-area인 것으로 보여서 xpath로도 해보고, selector로도 해봤는데 둘이 같은 오류가 발생합니다. 작성한 코드는 다음과 같습니다. from selenium import webdriver broswer = webdriver.Chrome() broswer.get('https://www.localdata.go.kr/devcenter/dataDown.do?menuNo=20001') # id = broswer.find_element_by_xpath('//*[@id="down-area"]') id = broswer.find_element_by_css_selector('#down-area') id.click() 사이트는 정상적으로 켜지나 클릭이 되지 않으며 나오는 오류 코드는 다음과 같습니다. (base) C:\test>[83512:84772:0427/183423.717:ERROR:device_event_log_impl.cc(214)] [18:34:23.718] USB: usb_device_handle_win.cc:1049 Failed to read descriptor from node connection: 시스템에 부착된 장치가 작동하지 않습니다. (0x1F) 어떻게 해결할지 모르겠어서 질문드립니다. 답변 기다립니다. 감사합니다.
-
미해결쉽게 처음하는 파이썬 고급 크롤링 [Scrapy, Selenium, Headless Chrome]
selenium 크롤링에서 해당 태그가 부분적으로 없을때
안녕하세요. celenium 크롤링을 이용해 여러 페이지에서서 데이타를 가져올때, 특정 페이지에 해당 태그나 속성 name 이 없을 경우 그 곳에서 프로그램이 멈춰 서 버리는데요. 이럴 경우 어떻게 처리해야 하나요? 예) driver.get(https://davelee-fun.github.io) elem = driver.find_element_by_class_name("card-title") 물론 위의 테스트 웹사이트에서는 해당 클래스가 모두 있기 때문에 문제가 없는데요. 예외적으로 없을 경우 어떻게 처리를 해야 하는지 궁금해서 여쭤봅니다.
-
미해결쉽게 처음하는 파이썬 고급 크롤링 [Scrapy, Selenium, Headless Chrome]
selenium에서 각각의 데이타 추출방법
강의 비디오 : Selenium 기본 사용법 1 - name으로 찾기 10분대 http 페이지명 : http://davelee-fun.github.io 질문 : 안녕하세요 강의 잘 보고 있습니다. Teddy의 선물 블로그에 각각의 카드 내에서 상품 추천과 상품명 2개를 가져오려고 할때 어떤 방법이 있는지 알고 싶습니다. 추천상품 다음에 상품명이 같이 나란히 나오게 하려고 하는데 잘 안되네요. 카드 정보 전체를 추출해서 다시 인덱스로 추출해야 하나요?