월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결이것이 진짜 크롤링이다 - 실전편
구글 이미지 링크 추출 오류!
늘 좋은 강의 잘 듣고 있습니다!! 이해 할때까지 반복 연습중인데.. 에러 가 자꾸나서 확인 부탁드립니다 실행 코드 from selenium import webdriver import time from selenium.webdriver.common.keys import Keys import os import urllib.request if not os.path.exists('인프런유료chapter05/고양이'): os.mkdir('인프런유료chapter05/고양이') url = f"https://www.google.com/search?q=%EA%B3%A0%EC%96%91%EC%9D%B4&hl=en&sxsrf=APq-WBtpNohfQWx-Rbg-cQ9NS2_CSdScmQ:1649047497463&source=lnms&tbm=isch&sa=X&ved=2ahUKEwiggrfSzPn2AhXPD94KHdkUDcUQ_AUoAXoECAIQAw&biw=1291&bih=934&dpr=1" browser = webdriver.Chrome("C:\startcoding\chromedriver.exe") browser.implicitly_wait(10) browser.maximize_window() browser.get(url) # 무한스크롤 구문 # 스크롤 전 높이 before_h = browser.execute_script("return window.scrollY") # 무한 스크롤 while True : # 맨 아래로 스크롤을 내린다 browser.find_element_by_css_selector("body").send_keys(Keys.END) # 스크롤 사이 페이지 로딩 시간 time.sleep(1) # 스크롤 후 높이 after_h = browser.execute_script("return window.scrollY") if after_h == before_h: break before_h = after_h #이미지 추출 imgs = browser.find_elements_by_css_selector(".rg_i.Q4LuWd") # class가 띄어 쓰기 있는 경우 .으로 대체하고 맨 앞에서 .붙인다 for i, img in enumerate(imgs,1): # 이미지를 클릭해서 큰 사이즈를 찾아줘라 img.click() time.sleep(1) # 큰이미지 추출 target = browser.find_element_by_css_selector("img.n3VNCb") img_src = target.get_attribute('src') # 이미지 다운로드 # 크롤링 하다보면 HTTP Error 403: Forbidden 에러가 납니다 opener = urllib.request.build_opener() opener.addheaders = (['User-Agent','Mozila/5.0']) urllib.request.install_opener(opener) #url 이미지 저장하기 urllib.request.urlretrieve(img_src, f'인프런유료chapter05/고양이/{i}.jpg') 오류 C:\startcoding>C:/Users/hellonature/AppData/Local/Programs/Python/Python310/python.exe c:/startcoding/인프런유료chapter05/08.구글이미지주소추 출.py c:\startcoding\인프런유료chapter05\08.구글이미지주소추출.py:13: DeprecationWarning: executable_path has been deprecated, please pass in a Service object browser = webdriver.Chrome("C:\startcoding\chromedriver.exe") DevTools listening on ws://127.0.0.1:54093/devtools/browser/39af353b-7fc6-4b96-a4e0-1e656c87d831 c:\startcoding\인프런유료chapter05\08.구글이미지주소추출.py:25: DeprecationWarning: find_element_by_css_selector is deprecated. Please use find_element(by=By.CSS_SELECTOR, value=css_selector) instead browser.find_element_by_css_selector("body").send_keys(Keys.END) c:\startcoding\인프런유료chapter05\08.구글이미지주소추출.py:38: DeprecationWarning: find_elements_by_css_selector is deprecated. Please use find_elements(by=By.CSS_SELECTOR, value=css_selector) instead imgs = browser.find_elements_by_css_selector(".rg_i.Q4LuWd") # class가 띄어 쓰기 있는 경우 .으로 대체하고 맨 앞에서 .붙인다 c:\startcoding\인프런유료chapter05\08.구글이미지주소추출.py:46: DeprecationWarning: find_element_by_css_selector is deprecated. Please use find_element(by=By.CSS_SELECTOR, value=css_selector) instead target = browser.find_element_by_css_selector("img.n3VNCb") Traceback (most recent call last): File "c:\startcoding\인프런유료chapter05\08.구글이미지주소추출.py", line 57, in <module> urllib.request.urlretrieve(img_src, f'인프런유료chapter05/고양이/{i}.jpg') File "C:\Users\hellonature\AppData\Local\Programs\Python\Python310\lib\urllib\request.py", line 241, in urlretrieve with contextlib.closing(urlopen(url, data)) as fp: File "C:\Users\hellonature\AppData\Local\Programs\Python\Python310\lib\urllib\request.py", line 216, in urlopen return opener.open(url, data, timeout) File "C:\Users\hellonature\AppData\Local\Programs\Python\Python310\lib\urllib\request.py", line 516, in open req = meth(req) File "C:\Users\hellonature\AppData\Local\Programs\Python\Python310\lib\urllib\request.py", line 1300, in do_request_ for name, value in self.parent.addheaders: ValueError: too many values to unpack (expected 2) C:\startcoding>[20968:20972:0404/150023.007:ERROR:device_event_log_impl.cc(214)] [15:00:23.007] USB: usb_device_handle_win.cc:1049 Failed to read descriptor from node connection: 시스템에 부착된 장치가 작동하지 않습니다. (0x1F) [20968:20972:0404/150023.007:ERROR:device_event_log_impl.cc(214)] [15:00:23.008] USB: usb_device_handle_win.cc:1049 Failed to read descriptor from node connection: 시스템에 부착된 장치가 작동하지 않습니다. (0x1F) C:\startcoding>[21456:16916:0404/150208.726:ERROR:gpu_init.cc(440)] Passthrough is not supported, GL is disabled, ANGLE is
- 미해결이것이 진짜 크롤링이다 - 실전편
img. click()
- img. click()과 이미지 저장이 안됩니다. 네이버 이미지의 경우 from selenium import webdriver import time from selenium.webdriver.common.keys import Keys import os from selenium.webdriver.common.by import By import urllib.request # 이미지 저장 모듈 keyword = input("검색어 입력 ") url = f"https://search.naver.com/search.naver?sm=tab_hty.top&where=image&query={keyword}" s = Service('D:\programs\chromedriver.exe') browser = webdriver.Chrome(service=s) # 폴더 만들기 if not os.path.exists(f'{keyword}'): # 해당 폴더의 존재여부를 boolean값으로 출력해줌 # not True = False : 해당폴더가 기존에 존재하지 않으면 새 폴더를 만든다! os.mkdir(f'{keyword}') browser.implicitly_wait(5) browser.maximize_window() # 화면크기 최대화 browser.get(url) time.sleep(2) # 무한스크롤 # 스크롤 전 높이 before_h = browser.execute_script("return window.scrollY") #execute_script = 자바스크립트 명령어 실행 # 무한 스크롤 - 반복문 while True: # 맨 아래로 스크롤을 내린다. body = 모든 웹사이트에 존재 # 키보드의 END키 누르면 웹페이지 맨아래로이동 browser.find_element(By.CSS_SELECTOR, "body").send_keys(Keys.END) time.sleep(1) # 스크롤 사이 페이지 로딩시간 after_h = browser.execute_script("return window.scrollY") if after_h == before_h: break before_h = after_h # 스크롤 후 높이가 다르면 before_h를 업데이트 # 이미지 태그 추출 imgs = browser.find_elements(By.CSS_SELECTOR, 'img._image._listImage') for i, img in enumerate(imgs, 1): # enumerate(대상, 시작값) # 이미지 다운을 위해선 태그에있는 이미지의 주소가 필요하다. img_src = img.get_attribute('src') print(i, img_src) # img를 index값의 파일명으로 png파일로 저장 urllib.request.urlretrieve(img_src, f'{keyword}/{i}.png') 이렇게 했는데 이미지 저장이 안됩니다. 구글 이미지는 from selenium import webdriver import time from selenium.webdriver.common.keys import Keys from selenium.webdriver.chrome.service import Service import os from selenium.webdriver.common.by import By import urllib.request s = Service('D:\programs\chromedriver.exe') browser = webdriver.Chrome(service=s) url = "https://www.google.com/search?q=%EA%B3%A0%EC%96%91%EC%9D%B4&sxsrf=APq-WBsz993sMMBhQOIcEjQ2XF3mjmQK_A:1648550317533&source=lnms&tbm=isch&sa=X&ved=2ahUKEwiHpMjAkOv2AhXCQPUHHZg7AoEQ_AUoAXoECAEQAw&biw=1280&bih=937&dpr=1#imgrc=kaRLNYgN2jiJpM" browser.implicitly_wait(10) #브라우저가 다 열릴때까지 기다림 browser.maximize_window() browser.get(url) before_h = browser.execute_script("return window.scrollY") while 1: #맨 아래로 스크롤을 내린다. browser.find_element(By.CSS_SELECTOR, "body").send_keys(Keys.END)#END는 스크롤을 제일 아래로 내일 수 있다. time.sleep(1) after_h = browser.execute_script("return window.scrollY") if after_h == before_h: break befor_h = after_h if not os.path.exists('./고양이'): os.mkdir("./고양이") cats = browser.find_elements(By.CSS_SELECTOR,".rg_i.Q4LuWd") for i, cat in enumerate(cats, 1): #각 이미지 테그의 주소추출 #src의 속성값을 가져온다. cat.click() time.sleep(1) big_img = browser.find_elements(By.CSS_SELECTOR,"img.n3VNCb") big_img_src = big_img.get_attribute("src") print(i, big_img_src) urllib.request.urlretrieve(big_img_src,f"./고양이/{i}.png") 이렇게 했는데 이미지 저장도 안되고 404에러도 안 납니다. 무엇이 문제일까요?
- 미해결이것이 진짜 크롤링이다 - 실전편
DeprecationWarning
<ipython-input-35-536ea89e098a>:5: DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead오류가 생깁니다.https://stackoverflow.com/questions/69875125/find-element-by-commands-are-deprecated-in-selenium의 방법처럼 from selenium.webdriver.common.by import Bynams = browser.find_element(By.CSS_SELECTOR,"._image _listImage")이렇게 해도 오류가 생깁니다.
- 미해결이것이 진짜 크롤링이다 - 실전편
다음과 같은 오류가 뜹니다. 어떻게 해결해야 하나요
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
- 미해결이것이 진짜 크롤링이다 - 실전편
개발자도구에서 마우스우클릭이 안되는 경우
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 강의 너무 쉽게 설명 잘해주셔서 잘 듣고 있습니다. ^^ 다만 갑작스럽게 개발자도구(F12)에서 마우스 우클릭이 안되어 element를 확인할 수 없는 현상이 일어나고 있습니다. 정확한 현상은 아무것도 건들지 않은 상태에서 F12를 누르고 마우스 우클릭 할 경우 잘 실행되지만, 크롤링을 위해 특정요소를 마우스로 클릭하여 경로복사 하려고 하면 마우스 우클릭이 동작하지 않는 현상이 나타납니다. 관련해서 구글링 결과, ( https://www.thewindowsclub.com/enable-right-click-on-websites ) 사이트별로 javascript:void(document.oncontextmenu=null); 로 입력하면 마우스 우클릭이 활성화되는 현상이 나타나고 있습니다.. 특정 페이지만 막힌 것이 아니라, 네이버 구글 등 모든 기본페이지에서 마우스 우클릭이 안됩니다. 현재 크롬은 초기화까지 해보았으나 안되고 있습니다. 다른 구글아이디로 변경하여 들어갈 경우, 마우스 우클릭이 잘 됩니다. 현상 및 해결책 알려주시면 정말 감사할 것 같습니다 !! ^^ 현재 쓰고 있는 구글 아이디만 크롤링 못하도록 막힌 것인지.. 아니면 어떤 설정 부분으로 인해 그런것인지 .. 확인 어려우시겠지만 부탁드리겠습니다 항상 좋은 강의 감사합니다. 감사합니다 !! 추가사항) 확인해 본 결과 방식이 바뀐 것 같은데 왜 바뀌었는지는 모르겠습니다.
- 미해결이것이 진짜 크롤링이다 - 실전편
코드 예제 파일은 어디에 있나요?
오늘 결제 했는데 예제파일이 어디 있는지 모르겠네요?
- 해결됨이것이 진짜 크롤링이다 - 실전편
크롤링 외주에 대해 질문드립니다
이 쪽 강의에다 묻는 게 맞는지는 모르겠지만.. 외주 소개 페이지들 가격을 보면 꽤 고가던데, (외주 받을 때) 내가 이 정도 액수를 받아도 될까? 하는 걱정(?)이 생겼습니다. 구글 이미지 검색 크롤링도 동적 사이트에 해당되는 것 같은데 ㄷㄷ...
- 미해결이것이 진짜 크롤링이다 - 실전편
궁금해요
from selenium import webdriver import time url = "https://search.naver.com/search.naver?where=image&sm=tab_jum&query=%EA%B0%95%EB%AF%BC%EA%B2%BD" browser = webdriver.Chrome("C:/chromedriver.exe") browser.implicitly_wait(10) browser.maximize_window() browser.get(url) 이걸 입력 후 Windows PowerShell Copyright (C) Microsoft Corporation. All rights reserved. 새로운 크로스 플랫폼 PowerShell 사용 https://aka.ms/pscore6 PS C:\crawliling> & C:/Users/조진오/AppData/Local/Programs/Python/Python38/python.exe c:/crawliling/chapter07/01.이미 지주소추출.py c:/crawliling/chapter07/01.이미지주소추출.py:13: DeprecationWarning: executable_path has been deprecated, please pass in a Service object browser = webdriver.Chrome("C:/chromedriver.exe") Traceback (most recent call last): File "C:\Users\조진오\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\common\service.py", line 71, in start self.process = subprocess.Popen(cmd, env=self.env, File "C:\Users\조진오\AppData\Local\Programs\Python\Python38\lib\subprocess.py", line 854, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, File "C:\Users\조진오\AppData\Local\Programs\Python\Python38\lib\subprocess.py", line 1307, in _execute_child hp, ht, pid, tid = _winapi.CreateProcess(executable, args, FileNotFoundError: [WinError 2] 지정된 파일을 찾을 수 없습니다 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "c:/crawliling/chapter07/01.이미지주소추출.py", line 13, in <module> browser = webdriver.Chrome("C:/chromedriver.exe") File "C:\Users\조진오\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\chrome\webdriver.py", line 70, in __init__ super(WebDriver, self).__init__(DesiredCapabilities.CHROME['browserName'], "goog", File "C:\Users\조진오\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\chromium\webdriver.py", line 90, in __init__ self.service.start() File "C:\Users\조진오\AppData\Local\Programs\Python\Python38\lib\site-packages\selenium\webdriver\common\service.py", line 81, in start raise WebDriverException( selenium.common.exceptions.WebDriverException: Message: 'chromedriver.exe' executable needs to be in PATH. Please see https://chromedriver.chromium.org/home PS C:\crawliling> 이렇게 뜨는데 무슨 뜻인가여.. 혹시나 해서 pip install selenium 하고 했는데도 이렇게 뜹니다
- 미해결이것이 진짜 크롤링이다 - 실전편
"FileNotFoundError: [WinError 2] 지정된 파일을 찾을 수 없습니다" 오류 문제 문의드려요
선생님께, 기본편 실습때는 문제가 없었는데 실전편 들어오자마자 실행이 안되어 구글링해서 계속 방법 찾아보고 시도했는데도 해결이 안되어 도움 요청드리게 되었습니다. path도 다 지정했는데 ... 확인부탁드립니다. Traceback (most recent call last): File "c:\startcoding\크롤링-실전편\셀레니움_기본설정.py", line 13, in <module> service = Service(executable_path=ChromeDriverManager().install()) File "C:\Users\ys\AppData\Local\Programs\Python\Python310\lib\site-packages\webdriver_manager\chrome.py", line 32, in install driver_path = self._get_driver_path(self.driver) File "C:\Users\ys\AppData\Local\Programs\Python\Python310\lib\site-packages\webdriver_manager\manager.py", line 23, in _get_driver_path driver_version = driver.get_version() File "C:\Users\ys\AppData\Local\Programs\Python\Python310\lib\site-packages\webdriver_manager\driver.py", line 40, in get_version return self.get_latest_release_version() File "C:\Users\ys\AppData\Local\Programs\Python\Python310\lib\site-packages\webdriver_manager\driver.py", line 63, in get_latest_release_version self.browser_version = get_browser_version_from_os(self.chrome_type) File "C:\Users\ys\AppData\Local\Programs\Python\Python310\lib\site-packages\webdriver_manager\utils.py", line 163, in get_browser_version_from_os OSType.WIN: windows_browser_apps_to_cmd( File "C:\Users\ys\AppData\Local\Programs\Python\Python310\lib\site-packages\webdriver_manager\utils.py", line 142, in windows_browser_apps_to_cmd powershell = determine_powershell() File "C:\Users\ys\AppData\Local\Programs\Python\Python310\lib\site-packages\webdriver_manager\utils.py", line 252, in determine_powershell with subprocess.Popen( File "C:\Users\ys\AppData\Local\Programs\Python\Python310\lib\subprocess.py", line 966, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, File "C:\Users\ys\AppData\Local\Programs\Python\Python310\lib\subprocess.py", line 1435, in _execute_child hp, ht, pid, tid = _winapi.CreateProcess(executable, args, FileNotFoundError: [WinError 2] 지정된 파일을 찾을 수 없습니다
- 미해결이것이 진짜 크롤링이다 - 실전편
네이버지도 검색어입력중 태그 못찾는 문제
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요! 강의 잘 듣고있습니다. 다름아니라 네이버지도 크롤링 검색어 입력구현 과정중 검색박스를 찾는 과정에서 생긴 질문인데요, 강의자분께서 하신대로 클래스 선택자(Input.input_serach)를 이용하면 잘 찾아지나, 똑같은 코드에 Id선택자로만 변경 할 시 검색어 입력이 제대로 구현되질 않습니다. 사실 클래스와 아이디가 모두 있을때, 아이디는 보통 고유한 값이기에 아이디를 쓰는게 좋다!라고 배워온 기억이 있어서 아이디로 시도했지 애초에 클래스로는 할 생각을 못했구요.... 크롬 개발자모드의 copy selcector 기능도 '#input_search1645599001993' 의 아이디로 선택하길래 오랫동안 고민하다가 안돼서 강의 들어서 클래스로 하면 되긴 하는구나,,,, 를 확인은 했습니다만 왜 ID선택자로는 안되고 클래스 선택자로 밖에 구현이 안되는지 궁금합니다! 아래는 강의듣고 복기한 코드에서 클래스 선택자를 아이디 선택자로만 바꾼 코드입니다. 감사합니다. from selenium import webdriver from selenium.webdriver.common.keys import Keys import time browser = webdriver.Chrome('./chromedriver') browser.get('https://map.naver.com/v5/') browser.implicitly_wait(10) #browser.maximize_window() # 검색창 입력 #search = browser.find_element_by_css_selector("input.input_search") search = browser.find_element_by_css_selector("input#input_search1645599001993") search.click() # 클릭 굳이 없어도 실행된다 time.sleep(1) search.send_keys('강남역 맛집') time.sleep(1) search.send_keys(Keys.ENTER) time.sleep(2)
- 미해결이것이 진짜 크롤링이다 - 실전편
IndexError: list index out of range 오류가 뜹니다.
똑같이 적어서 실행을 했는데, 제 컴퓨터에선 IndexError Traceback (most recent call last) c:\windows\temp/ipykernel_99852/1573255598.py in <module> 66 # 큰 이미지 주소 추출 67 if i == 1: ---> 68 target = browser.find_elements_by_css_selector("img.n3VNCb")[0] 69 else: 70 target = browser.find_elements_by_css_selector("img.n3VNCb")[1] IndexError: list index out of range이렇게 계속 에러가 뜹니다.. 뭐가 잘못된 걸까요?------------------------------------------------------ from selenium import webdriver from selenium.webdriver.common.keys import Keys import time import os import urllib.request import pyautogui keyword = pyautogui.prompt("검색어를 입력하세요>>>") if not os.path.exists(f'{keyword}'): os.mkdir(f'{keyword}') url=f"https://www.google.com/search?q={keyword}&rlz=1C1ASRM_enKR736KR736&sxsrf=APq-WBsr3Zy2hTZpd5_ruEiKeetlCYhZUw:1644073269541&source=lnms&tbm=isch&sa=X&ved=2ahUKEwiAstyZ6uj1AhVSZ94KHbp4DjwQ_AUoAXoECAEQAw&biw=1920&bih=979&dpr=1" browser=webdriver.Chrome("D:/python/chromedriver.exe") browser.implicitly_wait(10) browser.maximize_window() browser.get(url) before_h=browser.execute_script("return window.scrollY") # 무한스크롤 while True: browser.find_element_by_css_selector("body").send_keys(Keys.END) time.sleep(1) after_h=browser.execute_script("return window.scrollY") if after_h == before_h: break before_h = after_h imgs = browser.find_elements_by_css_selector(".rg_i.Q4LuWd") i=1 for i, img in enumerate(imgs, 1): browser.execute_script("arguments[0].click();",img) img.click() time.sleep(1) if i == 1: target = browser.find_elements_by_css_selector("img.n3VNCb")[0] else: target = browser.find_elements_by_css_selector("img.n3VNCb")[1] img_src = target.get_attribute('src') # 이미지 다운로드 # 크롤링 하다보면 http error 403 이 발생함 opener = urllib.request.build_opener() opener.addheaders = [('User-agent', 'Mozila/5.0')] urllib.request.install_opener(opener) i = i+1 urllib.request.urlretrieve(img_src,f'{keyword}/{i}.png')
- 미해결이것이 진짜 크롤링이다 - 실전편
궁금한 거 있어요
from os import link import requests from bs4 import BeautifulSoup response = requests.get("https://search.naver.com/search.naver?where=news&sm=tab_jum&query=%EC%8A%A4%EB%A7%88%ED%8A%B8%EC%8A%A4%ED%86%A0%EC%96%B4") html = response.text soup = BeautifulSoup(html,"html.parser") articles = soup.select("div.info_group") for article in articles: links = article.select("a.info") if len(links) >= 2: url = links[1].attrs['href'] print(url) links = articles.select에서 a.info가 a태그에서 class가 info로 시작하는 애들을 찾으라는 의미로 아는데 links에 들어있는 링크가 2개인데 하나는 info press 하나는 info 인데 info는 하나 아닌가요? 궁금해서.. 그리구 기본편 듣고 하고 있는데 어떻게 공부를 해야 될까요 효율적인 방법을 알고 싶습니다.
- 미해결이것이 진짜 크롤링이다 - 실전편
코드 실행이 안됩니다 ㅜ
import requests from bs4 import BeautifulSoup response = requests.get("https://m.search.naver.com/search.naver?where=m_news&sm=tab_jum&query=%EC%82%BC%EC%84%B1%EC%A0%84%EC%9E%90") html = response.text soup = BeautifulSoup(html, 'html.parser') articles = soup.select("div.info_group") #뉴스 기사 div 15개 추출 for article in articles: links = article.select("a.info") # 리스트 if len(links) >= 2: #링크가 2개 이상이면 url = links[1].attrs['href'] # 두번째 링크의 href를 추출 print(url) 해당 웹사이트의 html 속성이 변해서 안되나 싶어서 다시 살펴봤는데 이상 없는거 같습니다. 왜 실행이 안될까요..
- 미해결이것이 진짜 크롤링이다 - 실전편
구글 큰 이미지 클롤링에서 자바스크립트로 변경해도 403 : Forbidden Error 발생 합니다.
for i, img in enumerate(imgs, 1): # 이미지를 클릭해서 큰 사이즈를 찾아요 # 클릭하다 보면 element click intercept error가 나요 # javascript로 클릭을 직접하도록 만들어 준다. #img.click() # selenium 으로 클릭 browser.execute_script("arguments[0].click();", img) time.sleep(1) ~~~ 에러 내용 ~~~ Traceback (most recent call last): File "c:/cra/06_구글_이미지_크롤링/02_큰이미지다운로드.py", line 67, in <module> urllib.request.urlretrieve(img_src, f'06_구글_이미지_크롤링\{keyword}\{i}') File "C:\python37\lib\urllib\request.py", line 247, in urlretrieve with contextlib.closing(urlopen(url, data)) as fp: File "C:\python37\lib\urllib\request.py", line 222, in urlopen return opener.open(url, data, timeout) File "C:\python37\lib\urllib\request.py", line 531, in open response = meth(req, response) File "C:\python37\lib\urllib\request.py", line 641, in http_response 'http', request, response, code, msg, hdrs) File "C:\python37\lib\urllib\request.py", line 569, in error return self._call_chain(*args) File "C:\python37\lib\urllib\request.py", line 503, in _call_chain result = func(*args) File "C:\python37\lib\urllib\request.py", line 649, in http_error_default raise HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError: HTTP Error 403: Forbidden
- 미해결이것이 진짜 크롤링이다 - 실전편
네이버 지도 상세주소 크롤링
현재 네이버 지도 크롤링 시도 중인데, 클릭하지 않으면 나오지 않는 가게의 상세 주소까지 크롤링하고 싶습니다 첫 번째 방법으로는 하나씩 누르면서 크롤링하는 방법과 두 번째 방법으로 개발자도구에 script 에 있는 가게 code를 따서, url에 넣어서 결합한 뒤 새로 코드를 짜서 반복문으로 돌려서 상세 주소를 가져오는 방법을 생각 중입니다 제 생각에는 2번이 수월할 것 같아 하려고하는데, 아래와 같이 script라는 것 아래에 json 형태로 저장되어 있는 것 같습니다 다만, 제 실력이 미숙하여 어떤 방식으로 입력해도 잘 못따오는데 가게 코드를 따오기 위해 혹시 참고할 강의나.. 방법이 있을까요!? 현재 하고 있는 코드는 아래와 같으며, 첫번째 방법도 가능할지 선생님께 조언 구해봅니다 from selenium.webdriver.common.keys import Keys from selenium import webdriver import time import openpyxl from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By wb = openpyxl.Workbook() ws = wb.create_sheet("1페이지") ws.append(["순위","이름","방영일","프로그램"]) browser.get("https://pcmap.place.naver.com/restaurant/list?query=%EB%A7%9B%EC%9E%88%EB%8A%94%EB%85%80%EC%84%9D%EB%93%A4%20%EB%A7%9B%EC%A7%91&x=127.510209&y=36.5851932&bounds=125.8897257%3B35.304463%3B131.3279581%3B37.8016307&isCurrentLocationSearch=true&tvProgram=false&x=128.4255012&y=36.254532&ts=1644222834366&mapUrl=https%3A%2F%2Fmap.naver.com%2Fv5%2Fsearch%2F%25EB%25A7%259B%25EC%259E%2588%25EB%258A%2594%25EB%2585%2580%25EC%2584%259D%25EB%2593%25A4%2520%25EB%25A7%259B%25EC%25A7%2591%3Fc%3D14194371.5368239%2C4381444.7119141%2C7%2C0%2C0%2C0%2Cdh#") browser.implicitly_wait(10) wait = WebDriverWait(browser, 10) # element = wait.until(EC.element_to_be_clickable((By.XPATH, "//*[@id='_pcmap_list_scroll_container']"))) element.click() #로딩된 데이터 개수 확인 lis = browser.find_elements_by_css_selector("li._1EKsQ._12tNp") before_len = len(lis) while True: #맨 아래로 스크롤 내린다 browser.find_element_by_css_selector("body").send_keys(Keys.END) #스크롤 사이 페이지 로딩 시간 time.sleep(2) #스크롤 후 로딩된 데이터 개수 확인 lis = browser.find_elements_by_css_selector("li._1EKsQ._12tNp") after_len = len(lis) #로딩된 데이터 개수가 같다면 반복 멈춤 if before_len == after_len: break before_len = after_len # 데이터 기다리는 시간을 0으로 만들어 줘요. (데이터가 없더라도 빠르게 넘어감) browser.implicitly_wait(0) rank = 1 for li in lis: #광고 상품 아닌 것만 if len(li.find_elements_by_css_selector("svg._2ulu3")) == 0: #별점이 있는 가게만 크롤링 if len(li.find_elements_by_css_selector("span._2FqTn._1mRAM>em")) > 0: #가게명 name = li.find_element_by_css_selector("span.OXiLu").text # 프로그램 program = li.find_element_by_css_selector("div._1fp5H._1tGBC > div").text #방영일 star = li.find_element_by_css_selector("div._3hn9q > div > a").text print(rank, name, star, program) ws.append([rank, name, star, program]) rank = rank + 1 wb.save("1페이지.xlsx")
- 해결됨이것이 진짜 크롤링이다 - 실전편
네이버 지도 크롤링 관련 질문
안녕하세요 선생님 만들어주신 크롤링 강의 신청해서 잘 수강하고 있는 한 학생입니다 다름이 아니라, 업무에서 '생생정보통 맛집'에 대한 네이버지도 크롤링이 필요하여 셀레니움으로 메뉴까지 크롤링하는 방법에 도전하던 중 커뮤니티에 json으로 크롤링하는 방법을 올려주신 분이 있어서 활용해보았습니다 다만, json의 경우 '생생정보통맛집 서울'이라는 쿼리로는 제대로 값이 생성이 안되더라구요 아무래도 이게 키워드라기보단 필터라서 그런 것 같긴한데 api 주소로 요청해서 받아오는데 필터를 아무리 검색해도 찾아볼 수가 없더라구요.. 유튜브때처럼 api에 해당하는 필터 값을 알려주는 사이트가 있으면 좋으련만... 고민해봤는데, 위도경도가 현재 컴퓨터 위치를 자동으로 보내서 탐색하기 때문이라고 생각합니다 이런건 혹시 어떤 값으로 바꿔줄 수 있을지.. 아니면 제대로 크롤링 될 수 있도록 해보고싶은데 힌트나.. 방법을 얻을 수 있을까요? 감사합니다 import requests import urllib, openpyxl, time wb = openpyxl.Workbook() ws = wb.active ws.append(['상호명', '주소', '연락처', '메뉴']) with open('C:/program_list.txt', 'r', encoding='utf-8') as tf: keywords = tf.readlines() for keyword in keywords: keyword = keyword.strip().replace('\t', '') print(keyword, '에 나온 맛집입니다.\n\n') url_keyword = urllib.parse.quote(keyword) try: for i in range(1, 20): print('\n', i,'페이지입니다.\n') response = requests.get(f'https://map.naver.com/v5/api/search?caller=pcweb&query={url_keyword}&type=all&page={i}&displayCount=40&lang=ko', headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'}).json() numbers = response['result']['place']['list'] for i in range(0,len(numbers)): name = response['result']['place']['list'][i]['name'] address = response['result']['place']['list'][i]['roadAddress'] tel = response['result']['place']['list'][i]['telDisplay'] menuinfo = response['result']['place']['list'][i]['menuInfo'] print(name, address, tel, menuinfo) ws.append([name, address, tel, menuinfo]) time.sleep(1) except: print('끝났습니다.') wb.save(f'{target_word}결과.xlsx') tf.close()
- 미해결이것이 진짜 크롤링이다 - 실전편
[Mac] pyautogui 오류(검은 프롬프트창)
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 강사님! 수업 잘 듣고있습니다. 다름이아니라, 과거 해당 강의내용을 잘 수강하여 코드실행까지 확인하고 개인프로젝트에서까지 해당내용 잘 활용하였는데요... 제가 사정이 있어 제 노트북을 한번 포맷 후, 강의내용 복기를 위해 다시한번 코드를 따라치면서 복습해보니 pyautogui에서 실행오류가발생합니다. 이런식으로 Pyautogui 사용시 프롬프트창이 검정색으로 나와서 메시지 및 입력칸이 보이질 않아 입력하기가 힘든상황인데요, 사실 보이지 않을뿐이지 뭐가 입력이 되긴 하는지 뭐라도 적고 ok를 누르면 코드가 잘 실행되긴합니다. pip uninstall로 삭제후 재설치또한 해봐도 동일하였구요, 해당내용 한글로도, 영어로도 열심히 구글링해봤으나, 제 검색실력의 문제인건지 관련내용을 찾을 수 없어 오류 해결이 안되어서 혹시나 이런 경험 또한 겪어보신적이 있으신지 궁금하여 이렇게 질문드리게되었습니다 ㅜㅜ 해결방법 혹시 아실까요? 감사합니다.
- 미해결이것이 진짜 크롤링이다 - 실전편
don flag달지 않고 그냥 if 문을 두번 써도 되네요
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. if rank > 100: break if rank > 100: print("100개가 출력되었음") break 로만 써도 되네요.
- 미해결이것이 진짜 크롤링이다 - 실전편
product_price = soup.selet_one("span.total-price>strong").text에서 'NoneType' object is not callable
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 검색어는 usb허브였습니다. try except도 해봤는데 모든 상품 가격이 모두 0원으로 나옵니다. 개발자 도구에서 확인했는데 "span.total-price>strong"가 맞습니다. 전체 두개 밖에 없는게 맞구요. 어쩄든 오류가 나는데 해결방안이 보이지 않습니다.
- 미해결이것이 진짜 크롤링이다 - 실전편
구글 이미지 크롤링 오류
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 선생님, 해당 오류확인 부탁드립니다!