csvWriter.writerow([ ]) 이 부분이 행을 추가한다라고 하셨는데 실행했을때 영상과 제가한 파일에도 행이 추가가 안되어있는데 이게 무엇을위한 코드인가요?? 첫행에 머리글처럼 나오는 건가했는데.. 혹시 머리글(상품명,가격,링크) 이런식으로 첫행에 나오게 하는 코드는 어떤 걸까요?
안녕하세요! 빨간줄은 한번더 스타트코딩님 영상보고 고쳐진것같아요! 다만, 파일을 찾을수없다고 나오네요 ㅠㅠ hp, ht, pid, tid = _winapi.CreateProcess(executable, args, FileNotFoundError: [WinError 2] 지정된 파일을 찾을 수 없습니다 이럴경우 어떻게 해야할까요?
안녕하세요 좋은 강의 감사합니다. 근데 만약에 페이징이 URL에 반영이 안되는 경우는 어떻게 하나요? 1, 2, 3, 4, 5 페이지 넘버로 뜨고 5 다음에 "다음" 누르면 6, 7, 8, 9, 10 버튼이 나오는 형태입니다. 일주일 째 방법 찾으려고 끙끙대고 있는데 도무지 모르겠네요ㅜㅠ
if after_h == before_h: break 이거 처음에 before_h가 스크롤이 맨 위에 있어서 0일텐데, after_h는 내려가는 거잖아요 END 키 눌러서, after_h 맨 밑에 값은 수치가 높을텐데, 어떻게 == 가 적용이 되는건가용? 막상 작동해보면 중지 되긴 하더라구요. 궁금합니다!
선생님. 선생님 강의로 타 사이트에 적용해서 코딩 중인데요! for item in items: pname = item.find_element_by_css_selector(".Brand_prodtHeight").text 요부분 (강의 타임라임 16분) 작성할때 == $0 "상품이름" 라고 되어있어서 class 이름을 brandbrandname 으로 하면 상품개수가 72개인데 145개가 선택됩니다 ㅠ 여기서 막혔는데, 도움 받을수있을까요?
초보자에게 희망입니다. 강의 보고 다 따라했습니다 (__) 그런데 저는 img url도 가져오고 싶어서 연습해봤는데 잘 안됩니다...ㅠㅠ img src가 a태그 하위에 있는데 상품 처음 2개는 img 태그가 확인이 되서 잘 가져오는데, 3번째 상품 부터는 img 태그가 없다고 나와요.. 상품제목, 가격, 상품링크 등은 모두 마지막 상품까지 잘 가지고 옵니다. 이게 이미지 특성 때문일까요? 하 ㅠㅠㅠ 몇일째 이걸로 삽질인지,, 혹시 img 따오는 부분도 심화로 가르쳐주실 수 있을지요... (__)
참고로 img 태그의 부모 태그인 a 태그는 마지막 상품까지 모두 가져올 수 있는 상황인데 유독 img 태그만 찾을 수가 없네요 ㅠㅠ 아래처럼 디버깅 해봤습니다. [2] 배열 부터는 img 가 none 입니다 metadata3[0].a.img metadata3[1].a.img metadata3[2].a.img None
@@희두루 소스코드를 어떻게 작성하셨는지는 모르겠지만 제가 테스트 해봤을 때는 img src를 잘 가져 오네요 ^^ 아래 코드로 테스트 해보셔요ㅎㅎ # 상품 정보 div items = browser.find_elements_by_css_selector(".basicList_item__2XT81") for item in items: name = item.find_element_by_css_selector(".basicList_title__3P9Q7").text try: price = item.find_element_by_css_selector(".price_num__2WUXn").text except: price = "판매중단" link = item.find_element_by_css_selector(".basicList_title__3P9Q7 > a").get_attribute('href') img_src = item.find_element_by_css_selector(".thumbnail_thumb__3Agq6 > img").get_attribute('src') print(name, price, link, img_src)
안녕하세요 스타트 코딩님!! 덕분에 잘 배우고 있는 한 학생입니다 ERROR:chrome_browser_main_extra_parts_metrics.cc(226) ERROR:device_event_log_impl.cc(214)] 이런 오류들이 뜨는데 혹시 무슨 문제가 있을까요? 무한 스크롤 까지는 잘 작동이 되는데, 아이폰 상품 정보들을 가져오는 부분에서 막혔습니다 ㅠㅠ
@@startcoding.official 예전엔 ul class로 되어 있는데 이젠 ul class가 존재하지 않고 전부 div class로 되어 있어 for루프가 제대로 돌아가지 않는 것일까요? 저도 최상단 상품 1개만 반복해서 크롤링이 되는데 어떻게 해결하면 될까요..
해당 사이트가 업데이트 되면서 코드가 잘 동작하지 않을 수 있습니다! 무한 스크롤에 대한 개념을 이해하고 선택자부분만 사이트에 맞게 바꿔준다면 적용이 가능하실 거에요 ㅎㅎ # 스크롤 전 상품 개수 확인 before_cnt = len(driver.find_elements(By.CSS_SELECTOR, ".col-md-4.col-xs-6")) while True: # 스크롤 끝까지 내리기 driver.find_element(By.CSS_SELECTOR, "body").send_keys(Keys.END) time.sleep(1) # 스크롤 후 상품 개수 확인 after_cnt = len(driver.find_elements(By.CSS_SELECTOR, ".col-md-4.col-xs-6"))
print(before_cnt, after_cnt) # 비교 (if) - (break) if before_cnt == after_cnt: break
너무 잘보고 있습니다. 다 작성후 실행하면 스크롤을 계속 내리고만 있습니다. 마우스로 스크롤을 올려보면 계속 내려가기만하고 다음으로 진행이 안되네요. 크롬창을 닫으면 after_h=browser.execute_script("return window.scrollY") 에서 에러가 발생하네요. chrome not reachable(Session info: chrome=96.0.4664.110) 이렇게 뜹니다. 뭘까요..ㅜㅜ
상품 정보 div를 가져오는 부분을 보시면 items에 리스트가 담겨져 오고 있죠? 검색한 값이 없다면 items 는 비어 있는 리스트가 됩니다. 그러면 len(items) 의 값은 0이 되겠죠 if 문으로 len(items) == 0 일 경우 출력하고 종료하게 만들어 주면 됩니다. if len(items) == 0: quit()
너무 유용한 코드여서 따라만들고 실습하고 있습닏다. 그런데 여기서 더 나아가 다른 정보도 가져오고 싶은데요. 더 보고싶은 정보는 판매자 정보입니다. F12를 통해 HTML은 볼수있으나 여기서 한번 더 클릭 후 나오는 테이블 형태의 판매자정보까지 크롤링해오는 것을 한번 해보려고 하는데 쉽지 않네요. 이부분 혹시 추가로 코드 알려주실 수 있으실까요? 감사합니다.
@@startcoding.official 감사합니다! 덕분에 해결했습니다. 그런데 csv 파일로 저장하는 부분에서 또 에러가... ㅠ.ㅠ File "e:\경로", line 47, in csvWriter.writerow([name, price, link]) ValueError: I/O operation on closed file. 요런 에러가 뜨는데 이유를 알 수 있을까요? 바쁘신데 죄송해요!
크롤링 열심히 따라하고 있습니다. 좋은 강의 올려주셔서 감사합니다. :) 아이맥 사용하고 있는데... csv파일 열면 Numbers로 넘어가고, 상품명이 'Apple ¾ÆÀÌÆù 13 ¹Ì´Ï 128GB [ÀÚ±ÞÁ¦]' 이런 식으로 한글이 특수문자로 보여집니다. 혹시 이럴 땐 어떻게 해야 할까요?
좋은 영상 감사합니다. 이 영상에서만 에러를 많이 겪어서 제 해결 방향 적어 놓겠습니다. find_element_by_* commands are deprecated. Please use find_element() instead browser.find_element_by_css_selector("body").send_keys(Keys.END) 에러코드에서 find_element_by 를 쓰지 말라고 해서 구글링으로 find_element() 사용법을 찾았습니다. "from selenium.webdriver.common.by import By " 이거를 임포트 하고 # item info items = browser.find_elements(By.CSS_SELECTOR, ".basicList_info_area__17Xyo") for item in items: name = item.find_element(By.CSS_SELECTOR, ".basicList_title__3P9Q7").text try: price = item.find_element(By.CSS_SELECTOR, "div.basicList_price_area__1UXXR > strong > span > span.price_num__2WUXn").text except: price = "price null" link = item.find_element(By.CSS_SELECTOR, ".basicList_title__3P9Q7 > a").get_attribute('href') print(name, price, link) 이렇게 변경하여 썼습니다. 가격쪽은 .price_num__2WUXn 만 있으면 안읽혀서 Copy selector로 단일 주소 뽑아서 앞부분을 지우고 적용했습니다. F12 소스 창에서 Copy -> Copy selector 로 복사된 밑의 문구에서 " " 부분 제거 " #__next > div > div.style_container__1YjHN > div.style_inner__18zZX > div.style_content_wrap__1PzEo > div.style_content__2T20F > ul > div > div:nth-child(23) > li > div.basicList_inner__eY_mq > div.basicList_info_area__17Xyo > " div.basicList_price_area__1UXXR > strong > span > span.price_num__2WUXn
네이버 쇼핑 예제가 조금 바뀌었습니다. 영상의 코드는 현재 정상 동작하지 않습니다. 인프런 사이트에 무료 수강신청 시 정상 동작하는 코드를 바로 확인할 수 있습니다. 이것이 진짜 크롤링이다 - 기본편 bitly.ws/Sjsk =========================== 프로그램 동작 완료하고 꺼지는 것은 정상이지만 창이 꺼지는 것을 막으려면 아래 3가지정도 해결방법이 있습니다 ^^ 1. 주피터노트북을 이용해서 실행 상태를 유지하게 만든다. -> 아래 유튜브 영상 참고 ruclips.net/video/1tKPqQmXM98/видео.html 2. 꺼짐 방지 옵션을 추가한다. (detach) from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.options import Options # 브라우저 꺼짐 방지 옵션 chrome_options = Options() chrome_options.add_experimental_option("detach", True) driver = webdriver.Chrome("c://chromedriver.exe", options=chrome_options) # 웹페이지 해당 주소 이동 driver.get("www.naver.com") -> 아래 유튜브 영상 참고 ruclips.net/video/LoPvjfABlBA/видео.html 3. 무한루프 또는 input() 이용해서 강제로 종료 방지 코드 마지막에 input() 명령을 넣어 사용자의 입력을 받기 전까지 프로그램이 종료 되지 않도록 한다.
스크롤 까지는 잘 해결 했는데 리스트화에서 막히네요 ㅠㅠ 이리저리 구글링 해봤는데 문제가 뭔지 모르겠어요 들여쓰기 오타 다 확인했는데 어떤 게 문제일까요..? # 상품정보 div items = browser.find_elements(By.CSS_SELECTOR,"basicList_info_area__17Xyo") for item in items: name = item.find_element(By.CSS_SELECTOR,'basicList_title__3P9Q7').text try: price = item.find_element(By.CSS_SELECTOR,'price_num__2WUXn').text except: price = '판매중단' link = item.find_element(By.CSS_SELECTOR,'price_num__2WUXn > a').get_attribute('href') print(name, price, link)
selenium 입문자입니다. 재밌는 강의와 유익한 내용에 감사드리며 잘 보고 있습니다. 덕분에 도움 많이 되고 있습니다. 실습중 잘 안되는 부분이 있어 문의드립니다. 무한스크롤 작업시 selenium.common.exceptions.JavascriptException: Message: javascript error: windows is not defined 이런 에러가 나면서 실행이 안되는거 같은데 원인과 해결 방법이 있는건지요?
클래스 101 들으면서 유튜브 듣고 오라고 해서 실습 진행중인데 아래와 같이 코드를 짜니 마지막 67line에서 href 속성을 가져올 수 없다고 하네요...ㅠ AttributeError: 'WebElement' object has no attribute 'href' from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import time # 크롬 드라이버 자동 업데이트 from webdriver_manager.chrome import ChromeDriverManager # 브라우저 꺼짐 방지 chrome_options = Options() chrome_options.add_experimental_option("detach", True) # 불필요한 에러 메시지 없애기 chrome_options.add_experimental_option("excludeSwitches",["enable-logging"]) service = Service(executable_path=ChromeDriverManager().install()) #Service라는 객체를 만들어서 service라는 변수 driver = webdriver.Chrome(service=service, options=chrome_options) # 웹페이지 해당 주소 이동 driver.get("www.naver.com") driver.implicitly_wait(10) # 로딩이 끝날 때 까지 10초까지는 기다려줌 # 쇼핑 메뉴 클릭 shopbtn = driver.find_element(By.CSS_SELECTOR, 'a.nav.shop') shopbtn.click() time.sleep(2) # 검색창 클릭 searchbtn = driver.find_element(By.CSS_SELECTOR, "input._searchInput_search_text_fSuJ6") searchbtn.click() time.sleep(2) # 검색어 입력 searchbtn.send_keys('아이폰 14') searchbtn.send_keys(Keys.ENTER) # 스크롤 전 높이 before_h = driver.execute_script("return window.scrollY") # 무한 스크롤 while True: # 맨 아래로 스크롤을 내린다. driver.find_element(By.CSS_SELECTOR, "body").send_keys(Keys.END) # 스크롤 사이 페이지 로딩 시간 time.sleep(2) # 스크롤 후 높이 after_h = driver.execute_script("return window.scrollY") if after_h == before_h: break before_h = after_h # 상품 정보 div items = driver.find_elements(By.CSS_SELECTOR, ".basicList_info_area__TWvzp") for item in items: name = item.find_elements(By.CSS_SELECTOR, ".basicList_title__VfX3c") try: price = item.find_elements(By.CSS_SELECTOR, ".price_num__S2p_v") except: price = "판매중단" price = item.find_elements(By.CSS_SELECTOR, ".price_num__S2p_v") link = item.find_element(By.CSS_SELECTOR, ".basicList_title__VfX3c > a").__getattribute__('href') print(name, price, link)
페이징 빼고 영상에 나온 부분은 다 완료했어요! 페이징은 생각한 것과는 달리 약간 다른 느낌으로 진행되는 것 같아서 꽤 만져봐야 될 것 같아요 ㅠㅠ
사이트가 조금 달라져 어려울수도 있는데
흡수가 빠르시네요 :)
감사합니다 ㅠㅠㅠ 힘들었는데 덕분해 해결했어요. 스타트코딩은 신이야..
ㅋㅋㅋㅋㅋ 감사합니닷!!
GOOD!!!!!
크롬 개발자 도구 설명, 태그 설명까지 같이 들으니 이해도 쉽고 이해가 되니 재미도 붙어서 좋습니다.
감사합니다^^ 더 좋은 강의
많이 만들어 드리겠습니다!!
정말 머리에 쏙쏙 들어와요 너무 재밌어요!!
감사합니다 :)
진짜 명강의.. 너무 감사합니다
오늘도 덕분에 좋은 강의 잘 들었습니다. 감사합니다.
블프님 감사합니다~!!
22:14 이거 implicity 10초로 설정하셨던 거 때문에 멈추는 거예요
10초동안은 요소가 등장하지 않아도 기다립니다
해결방법은 try 윗줄에
Implicity 0초 0.1초 뭐 이런식으로 바꾸시면 될거같네용
감사합니다. 덕분에 잘 배우고 있어요
저도 감사합니다
와 강의 잘들었습니다.... 유용한 정보 감사합니다!
너무 잘 설명해줌
감사합니다!!
유용한 정보 감사합니다!!!
크롤링한 상품에 세부내용 또한 크롤링하는 내용도 알고 싶습니다
감사합니다!!
진짜 최고 쉽게 설명해주시네요!!!! 너무 유익합니다 감사해요🥹🫶 셀레니움으로 뒤에 페이징처리 하는 것도 공부하고 싶은데.. 뒤에 영상은 더 없는거죠?ㅠㅠ 파이썬으로 뉴스 스크래핑 하기 영상 (bs4활용영상) 의 페이징 처리를 응용하면 되나요??
네. 뉴스 스크래핑 영상의 페이징 처리를 응용해도 되고, 이것이 진짜 크롤링이다 실전편을 들어 보시면 더 도움이 될 겁니다 ㅎㅎ www.inflearn.com/course/파이썬-크롤링-실전?inst=bd097ed3
@@startcoding.official 오호 인프런에 강의가 있었네요?!! 감사합니다 🤩
웹페이지에서 검색어 입력을 하고 크롤링 버튼을 눌렀을때 위 파이썬 프로그램이 구동되도록 하고 싶은데 어떤 자료를 찾아봐야 할까요?
- 웹페이지와 파이썬 프로그램 간 연동 (검색키워드를 파이썬 프로그램으로 넘기기, 파이썬 프로그램 실행시키기 > 백그라운드 실행 가능??)
제가 최근에 올린 주피터노트북 영상을 참고 해보시겠어요? ^^
ruclips.net/video/1tKPqQmXM98/видео.html&ab_channel=%EC%8A%A4%ED%83%80%ED%8A%B8%EC%BD%94%EB%94%A9
기존 browser 가 driver로 바뀌었군요 클래스 101 과제로 들어와서 보는데 하면할수록 하는 업무에 적용할수 있는게 보이니 동기부여가 되네요.
감사합니다..ㅠㅠ 정말 많으 도움이 되었습니다~^^
한가지 질문이 있어서요.. 쇼핑몰을 운영하고 있는데 판매상품들의 리뷰를 일괄로 크롤링 하고싶은데 한번에 하는데 가능할까요? 아니면 상품별로 해야하는지 해서요.. 가능하다면 도전해보려구요 ㅎㅎ
정말 많은 도움이 됐습니다. 정말로 감사드립니다. 궁금한 점이 있습니다. html 태그를 복사 - selector 복사 해서 사용 중인데 스타트코딩님처럼 어떻게 html 태그를 편집해서 들고올 수 있는지 알려주실 수 있나요?
html기본구조와 css selector를 공부하면 됩니다.
자세한 내용은 '이것이 진짜 크롤링이다' 재생목록을 정주행해 보세요 ^^
@스타트코딩 다른 영상에 사진에는 다리가 다섯개라고 대댓 달아주셔서 두개는 팔입니다ㅎㅎ 스타트코딩님 영상에 네이버에 아이폰 상품들 나오는 화면에서 전체/가격비교/네이버페이/백화점홈쇼핑/쇼핑윈도/해외직구 탭을 F12번을 눌러서 보면 전부 a탭에 href도 #으로 같고 class도 모두 같습니다. 저는 해외직구 탭만을 클릭하도록 코딩을 하고싶은데 css선택자를 어떻게 선택해야 할까요??
csvWriter.writerow([ ]) 이 부분이 행을 추가한다라고 하셨는데 실행했을때 영상과 제가한 파일에도 행이 추가가 안되어있는데 이게 무엇을위한 코드인가요?? 첫행에 머리글처럼 나오는 건가했는데.. 혹시 머리글(상품명,가격,링크) 이런식으로 첫행에 나오게 하는 코드는 어떤 걸까요?
좋은 강의 정말 잘 들었습니다!! 다른건 다 따라 해보았는데, 경로복사해보고나니, 밑에 빨간줄이 나타나네요
이것 때문인지 실행이 안되는거 같은데 방법이있나요?
네~소스코드랑 에러메시지를 적어 주시겠어요??
안녕하세요! 빨간줄은 한번더 스타트코딩님 영상보고 고쳐진것같아요! 다만, 파일을 찾을수없다고 나오네요 ㅠㅠ
hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
FileNotFoundError: [WinError 2] 지정된 파일을 찾을 수 없습니다
이럴경우 어떻게 해야할까요?
@@FISHBLACKNOSE 파일 생성 부분에서
경로 또는 파일 열기 모드를 잘못 입력한 것 같아요~!
소스 코드를 봐야지 제가 확인할 수 있습니다ㅎㅎ
안녕하세요 좋은 강의 감사합니다. 근데 만약에 페이징이 URL에 반영이 안되는 경우는 어떻게 하나요? 1, 2, 3, 4, 5 페이지 넘버로 뜨고 5 다음에 "다음" 누르면 6, 7, 8, 9, 10 버튼이 나오는 형태입니다. 일주일 째 방법 찾으려고 끙끙대고 있는데 도무지 모르겠네요ㅜㅠ
셀레니움으로 다음 버튼을 직접 눌러주는 방법이 있을 것 같네요 ^^
Selenium 메소드가 바뀌어서그런지
뒤에 .text를 하니까 글자만 가져와지지가 않는데
방법이있을까요?
메소드가 괄호로바뀌고나서요!
if after_h == before_h:
break
이거 처음에 before_h가 스크롤이 맨 위에 있어서 0일텐데,
after_h는 내려가는 거잖아요 END 키 눌러서,
after_h 맨 밑에 값은 수치가 높을텐데,
어떻게 == 가 적용이 되는건가용?
막상 작동해보면 중지 되긴 하더라구요. 궁금합니다!
반복할때마다 before_h에 after_h를 저장해주기 때문에 마지막엔 두개가 같아집니답!
@@startcoding.official 아하! 감사합니다 도움이 되었습니다.
선생님. 선생님 강의로 타 사이트에 적용해서 코딩 중인데요!
for item in items:
pname = item.find_element_by_css_selector(".Brand_prodtHeight").text
요부분 (강의 타임라임 16분) 작성할때
== $0
"상품이름"
라고 되어있어서
class 이름을 brandbrandname 으로 하면 상품개수가 72개인데 145개가 선택됩니다 ㅠ
여기서 막혔는데, 도움 받을수있을까요?
스크롤이 쭉죽안내려가고 중간쯤에서 멈추는데 왜그러는 걸까요?
코드 전체를 지우고 다시 한번 영상을 따라 입력해 보세요 :)
초보자에게 희망입니다. 강의 보고 다 따라했습니다 (__) 그런데 저는 img url도 가져오고 싶어서 연습해봤는데 잘 안됩니다...ㅠㅠ img src가 a태그 하위에 있는데 상품 처음 2개는 img 태그가 확인이 되서 잘 가져오는데, 3번째 상품 부터는 img 태그가 없다고 나와요.. 상품제목, 가격, 상품링크 등은 모두 마지막 상품까지 잘 가지고 옵니다. 이게 이미지 특성 때문일까요? 하 ㅠㅠㅠ 몇일째 이걸로 삽질인지,, 혹시 img 따오는 부분도 심화로 가르쳐주실 수 있을지요... (__)
참고로 img 태그의 부모 태그인 a 태그는 마지막 상품까지 모두 가져올 수 있는 상황인데 유독 img 태그만 찾을 수가 없네요 ㅠㅠ 아래처럼 디버깅 해봤습니다. [2] 배열 부터는 img 가 none 입니다
metadata3[0].a.img
metadata3[1].a.img
metadata3[2].a.img
None
@@희두루 소스코드를 어떻게 작성하셨는지는 모르겠지만 제가 테스트 해봤을 때는 img src를 잘 가져 오네요 ^^
아래 코드로 테스트 해보셔요ㅎㅎ
# 상품 정보 div
items = browser.find_elements_by_css_selector(".basicList_item__2XT81")
for item in items:
name = item.find_element_by_css_selector(".basicList_title__3P9Q7").text
try:
price = item.find_element_by_css_selector(".price_num__2WUXn").text
except:
price = "판매중단"
link = item.find_element_by_css_selector(".basicList_title__3P9Q7 > a").get_attribute('href')
img_src = item.find_element_by_css_selector(".thumbnail_thumb__3Agq6 > img").get_attribute('src')
print(name, price, link, img_src)
@@startcoding.official 답변 주실줄 몰랐는데 너무 감사합니다. 올려주신 소스코드 그대로 복사해서 넣어봤는데도 똑같이 네번째부터는 img src를 못갖고 오네요 ㅠㅠ 이거 제 환경 문제 때문인것 같습니다. ㅠㅠ
Exception has occurred: NoSuchElementException
Message: no such element: Unable to locate element: {"method":"css selector","selector":".thumbnail_thumb__3Agq6 > img"}
(Session info: chrome=99.0.4844.51)
Stacktrace:
Backtrace:
Ordinal0 [0x008769A3+2582947]
Ordinal0 [0x0080A6D1+2139857]
Ordinal0 [0x00703A98+1063576]
Ordinal0 [0x0072FF3E+1244990]
Ordinal0 [0x0073013B+1245499]
Ordinal0 [0x007265A1+1205665]
Ordinal0 [0x00748594+1344916]
Ordinal0 [0x00726524+1205540]
Ordinal0 [0x007486A4+1345188]
Ordinal0 [0x0075834A+1409866]
Ordinal0 [0x00748366+1344358]
안녕하세요 스타트 코딩님!! 덕분에 잘 배우고 있는 한 학생입니다
ERROR:chrome_browser_main_extra_parts_metrics.cc(226)
ERROR:device_event_log_impl.cc(214)]
이런 오류들이 뜨는데 혹시 무슨 문제가 있을까요?
무한 스크롤 까지는 잘 작동이 되는데, 아이폰 상품 정보들을 가져오는 부분에서 막혔습니다 ㅠㅠ
안녕하세요 상윤님!
1. 일단 크롬 버전이랑 크롬 드라이버 버전이랑 같은지 확인하고 다시 설치해 보시고요.
2. 아래 옵션을 추가해 보세요
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
browser = webdriver.Chrome(options=options)
최상단 상품1개만 반복해서 뜨는데 해당 문제 해결이 가능할까요??ㅜㅜ
아마도 오타에서 발생한 문제일 겁니다.
다시 한번 영상을 보면서 새로 코드를 작성해 보시겠어요? :)
@@startcoding.official 예전엔 ul class로 되어 있는데 이젠 ul class가 존재하지 않고 전부 div class로 되어 있어 for루프가 제대로 돌아가지 않는 것일까요?
저도 최상단 상품 1개만 반복해서 크롤링이 되는데 어떻게 해결하면 될까요..
코드에서 div:nth-child(1)는 항상 첫 번째 자식 요소만 선택한다고 합니다! 그 부분만 지워서 하니까 잘 되네요!!
무한스크롤 부분이 안 되는데 어떻게 해야할지 모르겠네요ㅜㅠ 코드는 알려주신 그대로 해봤는데 스크롤이 진행이 안 됩니다ㅠㅜ
해당 사이트가 업데이트 되면서 코드가 잘 동작하지 않을 수 있습니다!
무한 스크롤에 대한 개념을 이해하고
선택자부분만 사이트에 맞게 바꿔준다면 적용이 가능하실 거에요 ㅎㅎ
# 스크롤 전 상품 개수 확인
before_cnt = len(driver.find_elements(By.CSS_SELECTOR, ".col-md-4.col-xs-6"))
while True:
# 스크롤 끝까지 내리기
driver.find_element(By.CSS_SELECTOR, "body").send_keys(Keys.END)
time.sleep(1)
# 스크롤 후 상품 개수 확인
after_cnt = len(driver.find_elements(By.CSS_SELECTOR, ".col-md-4.col-xs-6"))
print(before_cnt, after_cnt)
# 비교 (if) - (break)
if before_cnt == after_cnt:
break
# 스크롤 전 개수 업데이트
before_cnt = after_cnt
너무 잘보고 있습니다. 다 작성후 실행하면 스크롤을 계속 내리고만 있습니다. 마우스로 스크롤을 올려보면 계속 내려가기만하고 다음으로 진행이 안되네요. 크롬창을 닫으면 after_h=browser.execute_script("return window.scrollY") 에서 에러가 발생하네요. chrome not reachable(Session info: chrome=96.0.4664.110) 이렇게 뜹니다. 뭘까요..ㅜㅜ
스크롤 멈추는 코드 부분이 제대로 작성되지 않은 것 같은데요... 코드 전체를 지우고 다시 한번 영상을 따라 해보시겠어요??
페이징 처리도 제작 부탁드립니다^^
네이버 검색결과에서 검색한 값이 없으면 특정 문구를 출력하고 종료시키고 싶은데 어떻게 코드를 추가하면 좋을까요?
상품 정보 div를 가져오는 부분을 보시면
items에 리스트가 담겨져 오고 있죠?
검색한 값이 없다면 items 는 비어 있는 리스트가 됩니다.
그러면 len(items) 의 값은 0이 되겠죠
if 문으로 len(items) == 0 일 경우 출력하고 종료하게 만들어 주면 됩니다.
if len(items) == 0:
quit()
너무 유용한 코드여서 따라만들고 실습하고 있습닏다. 그런데 여기서 더 나아가 다른 정보도 가져오고 싶은데요.
더 보고싶은 정보는 판매자 정보입니다. F12를 통해 HTML은 볼수있으나 여기서 한번 더 클릭 후 나오는 테이블 형태의 판매자정보까지 크롤링해오는 것을 한번 해보려고 하는데 쉽지 않네요. 이부분 혹시 추가로 코드 알려주실 수 있으실까요? 감사합니다.
규정상 유료강의 수강생 분들에게만, 강의내용 외 질문에 답변 드리고 있습니다 ㅠㅠ
강의 내용에 관한 질문에만 답변드릴수 있는점 양해 부탁드려요 ^^
감사합니다. 마지막까지 잘 따라왔는데, for item in items: TypeError: 'WebElement' object is not iterable 라는 에러메시지가 뜨는 건 왜일까요?
태그를 잘못가져와서 그래요~
items를 가져올때
오타가 있는지 없는지 확인해보세요!
- find_elements s빠뜨리신거 같은데
@@startcoding.official 감사합니다! 덕분에 해결했습니다. 그런데 csv 파일로 저장하는 부분에서 또 에러가... ㅠ.ㅠ File "e:\경로", line 47, in
csvWriter.writerow([name, price, link])
ValueError: I/O operation on closed file. 요런 에러가 뜨는데 이유를 알 수 있을까요? 바쁘신데 죄송해요!
@@HARRYMINI 이것도 마찬가지로 오타로 인한 에러 일 것 같습니다. 띄어쓰기 들여쓰기 된 것을 잘 확인해 보세요 :)
똑같이 해도 열 구분이 안되는건 왜일까요?
크롤링 열심히 따라하고 있습니다. 좋은 강의 올려주셔서 감사합니다. :) 아이맥 사용하고 있는데... csv파일 열면 Numbers로 넘어가고, 상품명이 'Apple ¾ÆÀÌÆù 13 ¹Ì´Ï 128GB [ÀÚ±ÞÁ¦]' 이런 식으로 한글이 특수문자로 보여집니다. 혹시 이럴 땐 어떻게 해야 할까요?
CSV가 아니라 엑셀로 저장하면 어떨까요
셀레니움으로 짠 코드명을 뷰티풀소프에 코드를 넣어도 동작이 되는건가요?
동작이 되지 않습니다 ㅎㅎ
@@startcoding.official 코드를 뷰티풀소프에 맞는것을 알아가야겠네요
상품 이미지는 어떻게 가져 오나요? src
좋은 영상 감사합니다.
이 영상에서만 에러를 많이 겪어서 제 해결 방향 적어 놓겠습니다.
find_element_by_* commands are deprecated. Please use find_element() instead
browser.find_element_by_css_selector("body").send_keys(Keys.END)
에러코드에서 find_element_by 를 쓰지 말라고 해서 구글링으로 find_element() 사용법을 찾았습니다.
"from selenium.webdriver.common.by import By " 이거를 임포트 하고
# item info
items = browser.find_elements(By.CSS_SELECTOR, ".basicList_info_area__17Xyo")
for item in items:
name = item.find_element(By.CSS_SELECTOR, ".basicList_title__3P9Q7").text
try:
price = item.find_element(By.CSS_SELECTOR, "div.basicList_price_area__1UXXR > strong > span > span.price_num__2WUXn").text
except:
price = "price null"
link = item.find_element(By.CSS_SELECTOR, ".basicList_title__3P9Q7 > a").get_attribute('href')
print(name, price, link)
이렇게 변경하여 썼습니다.
가격쪽은 .price_num__2WUXn 만 있으면 안읽혀서 Copy selector로 단일 주소 뽑아서 앞부분을 지우고 적용했습니다.
F12 소스 창에서 Copy -> Copy selector 로 복사된 밑의 문구에서 " " 부분 제거
" #__next > div > div.style_container__1YjHN > div.style_inner__18zZX > div.style_content_wrap__1PzEo > div.style_content__2T20F > ul > div > div:nth-child(23) > li > div.basicList_inner__eY_mq > div.basicList_info_area__17Xyo > " div.basicList_price_area__1UXXR > strong > span > span.price_num__2WUXn
파일 입출력 이것만 보면 어질하네요
너무 어렵게 생각하실 필요 없습니다 ^^
크롤링 프로그램 제작 가능하신가요?
kkj6369@naver.com 메일로 크롤링하고자하는 사이트 양식등을 보내주세요 ^^
네이버 쇼핑 예제가 조금 바뀌었습니다.
영상의 코드는 현재 정상 동작하지 않습니다.
인프런 사이트에 무료 수강신청 시
정상 동작하는 코드를 바로 확인할 수 있습니다.
이것이 진짜 크롤링이다 - 기본편
bitly.ws/Sjsk
===========================
프로그램 동작 완료하고 꺼지는 것은 정상이지만
창이 꺼지는 것을 막으려면 아래 3가지정도 해결방법이 있습니다 ^^
1. 주피터노트북을 이용해서 실행 상태를 유지하게 만든다.
-> 아래 유튜브 영상 참고
ruclips.net/video/1tKPqQmXM98/видео.html
2. 꺼짐 방지 옵션을 추가한다. (detach)
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
# 브라우저 꺼짐 방지 옵션
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)
driver = webdriver.Chrome("c://chromedriver.exe", options=chrome_options)
# 웹페이지 해당 주소 이동
driver.get("www.naver.com")
-> 아래 유튜브 영상 참고
ruclips.net/video/LoPvjfABlBA/видео.html
3. 무한루프 또는 input() 이용해서 강제로 종료 방지
코드 마지막에 input() 명령을 넣어
사용자의 입력을 받기 전까지 프로그램이 종료 되지 않도록 한다.
어렵고 불친절한 코딩 강의에 지치셨나요?
스타트코딩이 여러분들을 힘껏 도와 드리겠습니다.
★ 스타트코딩과 함께 코딩 공부하기
startcoding.liveklass.com/p/review
.text 하고 .get_attribute() 부분에서 계속 AttributeError 가 뜹니다..
이거 해결했습니다!!! 똑같은 에러 뜨시는 분들 이 사이트 한 번 확인해보십쇼!!
@@YungilovesGirlsDay 어떤사이트일까요
스크롤 까지는 잘 해결 했는데 리스트화에서 막히네요 ㅠㅠ
이리저리 구글링 해봤는데 문제가 뭔지 모르겠어요 들여쓰기 오타 다 확인했는데 어떤 게 문제일까요..?
# 상품정보 div
items = browser.find_elements(By.CSS_SELECTOR,"basicList_info_area__17Xyo")
for item in items:
name = item.find_element(By.CSS_SELECTOR,'basicList_title__3P9Q7').text
try:
price = item.find_element(By.CSS_SELECTOR,'price_num__2WUXn').text
except:
price = '판매중단'
link = item.find_element(By.CSS_SELECTOR,'price_num__2WUXn > a').get_attribute('href')
print(name, price, link)
selenium 입문자입니다.
재밌는 강의와 유익한 내용에 감사드리며 잘 보고 있습니다. 덕분에 도움 많이 되고 있습니다.
실습중 잘 안되는 부분이 있어 문의드립니다.
무한스크롤 작업시
selenium.common.exceptions.JavascriptException: Message: javascript error: windows is not defined 이런 에러가 나면서 실행이 안되는거 같은데
원인과 해결 방법이 있는건지요?
네 안녕하세요 ^^
잘 동작하는 코드인데 오타가 있는지 조금 더 정확히 확인해 보세요 :)
@@startcoding.official ㅎ 오타네요 답글 감사합니다~~
클래스 101 들으면서 유튜브 듣고 오라고 해서 실습 진행중인데 아래와 같이 코드를 짜니 마지막 67line에서 href 속성을 가져올 수 없다고 하네요...ㅠ
AttributeError: 'WebElement' object has no attribute 'href'
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
# 크롬 드라이버 자동 업데이트
from webdriver_manager.chrome import ChromeDriverManager
# 브라우저 꺼짐 방지
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)
# 불필요한 에러 메시지 없애기
chrome_options.add_experimental_option("excludeSwitches",["enable-logging"])
service = Service(executable_path=ChromeDriverManager().install()) #Service라는 객체를 만들어서 service라는 변수
driver = webdriver.Chrome(service=service, options=chrome_options)
# 웹페이지 해당 주소 이동
driver.get("www.naver.com")
driver.implicitly_wait(10) # 로딩이 끝날 때 까지 10초까지는 기다려줌
# 쇼핑 메뉴 클릭
shopbtn = driver.find_element(By.CSS_SELECTOR, 'a.nav.shop')
shopbtn.click()
time.sleep(2)
# 검색창 클릭
searchbtn = driver.find_element(By.CSS_SELECTOR, "input._searchInput_search_text_fSuJ6")
searchbtn.click()
time.sleep(2)
# 검색어 입력
searchbtn.send_keys('아이폰 14')
searchbtn.send_keys(Keys.ENTER)
# 스크롤 전 높이
before_h = driver.execute_script("return window.scrollY")
# 무한 스크롤
while True:
# 맨 아래로 스크롤을 내린다.
driver.find_element(By.CSS_SELECTOR, "body").send_keys(Keys.END)
# 스크롤 사이 페이지 로딩 시간
time.sleep(2)
# 스크롤 후 높이
after_h = driver.execute_script("return window.scrollY")
if after_h == before_h:
break
before_h = after_h
# 상품 정보 div
items = driver.find_elements(By.CSS_SELECTOR, ".basicList_info_area__TWvzp")
for item in items:
name = item.find_elements(By.CSS_SELECTOR, ".basicList_title__VfX3c")
try:
price = item.find_elements(By.CSS_SELECTOR, ".price_num__S2p_v")
except:
price = "판매중단"
price = item.find_elements(By.CSS_SELECTOR, ".price_num__S2p_v")
link = item.find_element(By.CSS_SELECTOR, ".basicList_title__VfX3c > a").__getattribute__('href')
print(name, price, link)
가져온 태그가 href 속성이 없어서 발생하는 에러입니다, 태그 선택자가 제대로 되어있는지 확인해 보세요 :)
@@startcoding.official 희한하네요ㅜ 네이버쇼핑 보니 href 태그가 있긴하던데ㅜ 구글링도 더해봐야겡ㅎ네요