월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결이것이 진짜 크롤링이다 - 실전편
파이썬 실행 오류
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하십니까 선생님, 같은걸로 계속 질문드려 죄송하지만 오류가 해결이 안됩니다 ㅠ run python filr 눌러서 실행도 해보고 터미널을 커맨드 프롬프트로 설정을 하고 돌려도 저 코드가 실행이 안됩니다.. 그리고 디버깅으로 되는것도 변경해도 계속 다시 자바 스크립트 디버그로 설정이 되있구요 구글링을 몇시간 정도 했는데도 기본터미널 설정이 변경이 안된다는 말은 못찾아서 죄송하지만 한번 더 봐주시면 감사하겠습니다 다른 실습 파일은 그래도 코드가 잘 실행이 되는데 쿠팡쪽에서 url 이후 실행이 안되는것도 좀 이상합니다 ㅠ
- 미해결이것이 진짜 크롤링이다 - 실전편
실행 오류 디버깅
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 쌤, 위에 문구로 했는데 디버깅 으로 설정이 되어있어서 그런지 모르겠는데 실행이 아무것도 안됩니다 ㅠ 다른 예제파일로 가서 실행하면 되는데 문제점을 모르겠습니다
- 미해결이것이 진짜 크롤링이다 - 실전편
파이썬 기본 터미널 파워쉘
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 쌤! 혹시 파이썬 기본 터미널을 파워쉘? 처럼 실행하면 프롬프트 창이 따로 뜨는걸로 설정하고 싶은데 갑자기 아래 터미널에 출력되는 형식으로 바뀌었습니다 기본 터미널 선택을 파워쉘로 누르는데도 강제로 디버깅 쪽으로 체킹되어있습니다 혹시 변경법 알려주실 수 있을까요 기본 프롬프트로 설정하고 재시작 하였는데도 디버깅으로 설정이 된게 안바뀝니다 ㅠ 처음에는 프롬프트 창이 따로 뜨면서 실행이 됐는데 복구법 알려주시면 감사하겠습니다 ㅠ_ㅠ 참고로 기본 터미널을 command prompt로 클릭하고 재접속까지 진행하였지만 똑같이 디버깅 으로 설정이 되어있습니다..
- 미해결이것이 진짜 크롤링이다 - 실전편
연애 뉴스 크롤링 8:52 부터 막힙니다
출력을 할 때마다 계속 print(content.text) AttributeError: 'NoneType' object has no attribute 'text' 메시지만 뜹니다 해결책은 계속 찾고 있습니다만 코드 입력이 문제인지 아니면 업데이트가 되서 그런지 물어보고 싶습니다 코드는 다음과 같습니다. import requests from bs4 import BeautifulSoup import time response = requests.get("https://search.naver.com/search.naver?sm=tab_sug.top&where=news&query=%EB%B8%94%EB%9E%99%ED%95%91%ED%81%AC&oquery=%EC%86%90%ED%9D%A5%EB%AF%BC&tqi=hPGDksp0Yidss4HuFwdssssstKV-439002&acq=%EB%B8%94%EB%9E%99&acr=1&qdt=0") 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'] response = requests.get(url, headers={'User-agent':'Mozila/5.0'}) html = response.text soup = BeautifulSoup(html, 'html.parser') # if calls ent-news if "entertain" in response.url: content = soup.select_one("#articleBody") else: content = soup.select_one("#articleBodyContents") print(content.text) time.sleep(0.3)
- 미해결이것이 진짜 크롤링이다 - 실전편
안녕하세요 개발자도구 F12 갯수 확인법
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 선생님, 혹시 사이트에서 HTML구조 확인시 F12로 개발자 도구 확인하는데 검색창에서 제가 찾은 소스를 입력하면 1of 40 이런식으로 갯수가 떠야 하는데 이게 안뜨고 옆에 다른 메뉴들이 떠서 해결 방법 확인해주실 수 있으실까요?..
- 미해결이것이 진짜 크롤링이다 - 실전편
openpyxl에서 2중 반복문 사용중 append 사용법에 관해 문의드립니다.
안녕하세요 선생님, 우선 선생님의 쉽고 친절한 강의 덕분에 날로 실력이 늘어감을 느껴서 무한한 감사를 느끼고 있습니다. 강의를 완강한 후 나름대로 이것저것 찾아보며 네이버 지도 크롤링을 해보고 있는데요, 한 가지 해결되지 않는 문제가 있어 이렇게 문의 드립니다. 다름이 아니라 네이버 지도를 json 형태로 받아내서 크롤링을 하고 있는데 타겟 키워드를 입력하면 미리 파일로 되어있는 동네 이름을 불러와서 반복적으로 해당 동네의 타겟 키워드 상점을 크롤링 해오는 구조입니다. 배운대로 openpyxl의 append를 이용해서 저장을 하는데 2중 반복문을 쓰다보니 자꾸 마지막 동네의 결과만 가져와서 파일에 저장되는데 이걸 어떻게 해야 전체 결과물을 한 파일로 다 저장할 수 있을지 여쭤봅니다. 참고로 제 코드는 아래와 같습니다. import requests import urllib, openpyxl, time print('구동중입니다. 잠시만 기다려주세요 ') target_word = input('검색어를 입력하세요>>> ') with open('C:/startcoding_crawling/town_list.txt', 'r', encoding='utf-8') as tf: keywords = tf.readlines() for keyword in keywords: keyword = keyword.strip().replace('\t', '') + target_word print(keyword, ' 동네의', target_word, ' 결과입니다.\n\n') url_keyword = urllib.parse.quote(keyword) wb = openpyxl.Workbook() ws = wb.active ws.append(['상호명', '주소', '연락처']) try: for i in range(1, 100): 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'] print(name, address, tel) ws.append([name, address, tel]) time.sleep(1) except: print('끝났습니다.') wb.save(f'{target_word}결과.xlsx') tf.close() 분명 append 한 부분을 다시 변수 처리하던지 해서 더 앞 1차 반복문쪽에 append로 넣어야 할 것 같은데 방법을 도저히 모르겠네요.. 구글에 찾아봐도 쉽게 결과가 나오지 않아 이렇게 문의를 남깁니다. 가르침 주시면 감사드리겠습니다. 항상 좋은 강의 감사합니다.
- 미해결이것이 진짜 크롤링이다 - 실전편
이미지 탭 클릭방법
안녕하세요! 네이버 이미지 크롤링 과제 진행하면서 생긴 의문점입니다. 저같은 경우에는 강의와는 다르게 네이버 메인페이지를 열고, 검색어를 입력한 다음, 이미지탭을 클릭하는 것으로 구현하고자 하였는데요, 여기서 '이미지탭' 클릭을 css 선택자로 어떻게 표현하면 좋을지 잘 모르겠어서 질문 드립니다!!! 아래 태그 두개는 각각 이미지, 뉴스탭에 해당하는 a태그인데요, 두 태그에는 아이디나 클래스 등이 나와있지 않아 어떻게 이미지태그만을 구분하여 선택하면 좋을지 감이 잘 안잡힙니다...!! 어떻게하면 좋을까요? <a role="tab" href="?where=image&sm=tab_jum&query=%EC%95%84%EC%9D%B4%EC%9C%A0" onclick="return goOtherCR(this,'a=tab*i.jmp&r=2&i=&u='+urlencode(this.href));" class="tab" aria-selected="false">이미지</a> <a role="tab" href="?where=news&sm=tab_jum&query=%EC%95%84%EC%9D%B4%EC%9C%A0" onclick="return goOtherCR(this,'a=tab*n.jmp&r=3&i=&u='+urlencode(this.href));" class="tab" aria-selected="false">뉴스</a> 찾아본 결과, 개발자 모드 내에서 이미지 탭에 해당하는 태그를 우클릭하여 copy > copy selector 기능을 활용하여 #lnb > div.lnb_group > div > ul > li:nth-child(2) > a 를 복붙하면 어찌어찌 과제는 수행 완료 할 수 있는데요!!! copy selector기능을 사용하지 않고 배운대로 해보고자 한다면...? 강사님이라면 어떻게 선택하실지 궁금하여 이렇게 질문작성하게 되었습니다. 감사합니다.
- 해결됨이것이 진짜 크롤링이다 - 실전편
탐색기에서 파일 실행 vs IDE에서 파일 실행 결과물이 다릅니다
(코드는 하단에) pycharm을 통해 실행하면 큰 사진으로 잘 긁어오는데, 파일 탐색기에서 파일을 더블클릭해서 실행하는 경우 큰 사진으로 안 되네요. 물론 pyinstaller를 이용해 exe 파일로 만들어도 사진은 작게 나와요... - 탐색기 실행 - pycharm에서 버튼 눌러서 실행 Code from selenium import webdriver import urllib.request as request import pyautogui import os import time import random # Activate chromedriver driver = webdriver.Chrome() driver.implicitly_wait(5) search_word = pyautogui.prompt("검색어를 입력해주세요.") driver.get(f'https://www.google.co.kr/search?q={search_word}') driver.maximize_window() # '이미지 검색' click image_search = driver.find_element_by_xpath('//*[@id="hdtb-msb"]/div[1]/div/div[2]/a') image_search.click() # Make a folder if not os.path.exists(search_word): os.makedirs(search_word) # Scroll last_height = driver.execute_script('return document.body.scrollHeight') while True: driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(5) new_height = driver.execute_script('return document.body.scrollHeight') if new_height == last_height: break last_height = new_height # 이미지 개별 클릭 image_click = driver.find_elements_by_css_selector('.rg_i.Q4LuWd') for i, image in enumerate(image_click, start=1): driver.execute_script('arguments[0].click();', image) time.sleep(random.randint(10, 30) * 0.1) target_image = driver.find_element_by_xpath('//*[@id="Sva75c"]/div/div/div[3]/div[2]/c-wiz/div/div[1]/div[1]/div[' '2]/div/a/img') target_source = target_image.get_attribute('src') # src 출력해보면 확장자가 안 뜨니까 그냥 일괄적으로 통일함 opener = request.build_opener() opener.addheaders = [('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ' 'Chrome/36.0.1941.0 Safari/537.36')] request.install_opener(opener) print('작업이 완료되었습니다.') driver.close()
- 미해결이것이 진짜 크롤링이다 - 실전편
안녕하세요. G마켓에서 해당태그를 찾는데 너무 어렵습니다.
교육받은데로 스마트스토어에서는 잘 찾는데 G마켓에서는 구조가 달라서 찾기가 어렵습니다. 제거 어떤걸 빼먹었는지 몰라서 계속 해봐도 안되서 결국 여기에 질문을 올리게 되었습니다. 제가 찾는거는 제품리스트에서 <구매 1>이 찍힌것만 필터링해서 리스트로 뽑아내려고 하고 있습니다. 해당 주소는 아래와 같습니다. https://browse.gmarket.co.kr/search?keyword=%ec%95%8c%ea%b5%ac%ec%8a%ac&f=is:cb 구조는 아래와 같습니다. <div class="box__information-score"> <ul class="list__score"> <li class="list-item list-item__pay-count"><span class="text">구매 <!-- --> 1</span><span class="for-a11y">건</span></li> </ul> </div> item_containers = soup.select(".box__item-container") for item_container in item_containers : # item_score = item_container.select('.list-item__pay-count') # print(item_score) if item_container == '.list-item__pay-count' : print('test') 어려운점은 list-item__pay-count까지 확인이 되는데 if in으로 검색해서 해당 링크만 추출하려는데 나오질 않더라구요. 제발 가르쳐주세요!!
- 미해결이것이 진짜 크롤링이다 - 실전편
[SSL: CERTIFICATE_VERIFY_FAILED] 에러
발생에러: urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:997)> 검색어 '고양이' 경우에 위의 에러가 떴습니다. import ssl #_ssl.c:997 ssl._create_default_https_context = ssl._create_unverified_context # _ssl.c:997 에러처리 그래서 위의 문구를 검색해서 추가해줬지만, 여전히, urllib.error.URLError: <urlopen error [SSL: WRONG_SIGNATURE_TYPE] wrong signature type (_ssl.c:997)>에러가 뜹니다. 결국, try로 에러를 처리했는데요. try없이 에러 조치가 가능할까요? from selenium import webdriver from selenium.webdriver.common.keys import Keys import time import os import urllib.request import ssl #_ssl.c:997 import pyautogui keyword = pyautogui.prompt() if not os.path.exists(f'06_구글이미지크롤링/{keyword}'): os.mkdir(f'06_구글이미지크롤링/{keyword}') main_url = f"https://www.google.com/search?q={keyword}&newwindow=1&tbm=isch&sa=X&ved=&biw=1000&bih=900&dpr=1" browser = webdriver.Chrome("C:/chromedriver.exe") browser.implicitly_wait(10) browser.maximize_window() browser.get(main_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") #자료형은 리스트 for i, img in enumerate(imgs, 1): browser.execute_script("arguments[0].click();", img) 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') opener = urllib.request.build_opener() opener.addheaders = [('User-Agent', 'Mozila/5.0')] urllib.request.install_opener(opener) ssl._create_default_https_context = ssl._create_unverified_context # _ssl.c:997 에러처리 try: urllib.request.urlretrieve(img_src, f'06_구글이미지크롤링/{keyword}/{i}.jpg') except: continue
- 미해결이것이 진짜 크롤링이다 - 실전편
구글 큰 이미지 다운받기 관련 에러처리 문의드립니다.
안녕하세요 구글 강의 큰 이미지 다운로드 받기 중 에러가 생겨 문의드립니다. [현상] 강사님께서 말씀해주신 키워드 '고양이' 등을 입력하면 문제 없는데 예를들어 '아이유', '블랙핑크'와 같은 키워드로 검색을 하면, 아래와 같은 메시지가 뜨면서 중단됩니다. (연예인키워드에서 문제가 발생하는 것으로 추정됩니다) [제가 처리한 방식] 소스코드 마지막 줄 예외처리를 하여 진행은 되게했습니다. try: urllib.request.urlretrieve(url=img_src, filename=f"{keyword}/{i}.jpg") except: pass [처리방법 문의] 구글링을 해보니 인증서에 관한 문제라고는 되어 있으나, 특정 키워드는 문제 없이 작동해서 이유를 잘 모르겠습니다. 왜 이러한 현상이 발생하는지, 이를 처리할수 있는 더 나은 코드는 없는지 여쭙고 싶습니다 (나름대로 이유를 찾아본 결과 연예사 기사와 연결된 링크에서 문제가 발생하는 것도 같긴 합니다.. ) [에러메시지] urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expirte 바쁘시겠지만 답변부탁드리겠습니다. 강의는 항상 잘 듣고 있습니다. 기회를 빌어 감사말씀 드립니다.
- 미해결이것이 진짜 크롤링이다 - 실전편
실제로 가져오는 뉴스 자료가 적은데 왜 이럴까요?
#사용자입력 keyword = pyautogui.prompt("검색어를 입력하세요") lastpage = int(pyautogui.prompt("몇 페이지까지 크롤링 할까요?")) page_num = 1 for i in range(1, lastpage * 10, 10): print(f"{page_num}페이지 크롤링 중입니다=========================") response = requests.get(f"https://search.naver.com/search.naver?where=news&query=%ED%97%88%EA%B0%9C%EC%97%B4&sm=tab_opt&sort=1&photo=0&field=0&pd=0&ds=&de=&docid=&related=0&mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so%3Add%2Cp%3Aall&is_sug_officeid=0={keyword}&start={i}") html = response.text soup = BeautifulSoup(html, 'html.parser') articles = soup.select("div.info_group") # 뉴스 기사 div 10 for article in articles: links = article.select("a.info") # 리스트 if len(links) >= 2: # 링크가 2개 이상이면 url = links[1].attrs['href'] # 두번째 링크의 href를 추출 response = requests.get(url, headers={'User-agent':'Mozila/5.0'}) html = response.text soup = BeautifulSoup(html, 'html.parser') # 만약 연예 뉴스라면 if "entertain" in response.url: title = soup.select_one(".end_tit") content = soup.select_one("#articeBody") elif "sports" in response.url: title = soup.select_one("h4.title") content = soup.select_one("#newsEndContents") #본문 내용에 불필요한 내용 삭제 divs = content.select("div") for div in divs: div.decompose() paragraphs = content.select("p") for p in paragraphs: p.decompose() else: title = soup.select_one("#articleTitle") content = soup.select_one("#articleBodyContents") print("=======링크========\n", url) print("=======제목========\n", title.text.strip()) print("=======본문========\n", content.text.strip()) time.sleep(0.3) page_num = page_num + 1 이렇게 한 다음 뉴스는 3페이지까지 가져오기했는데 1페이지에서 4개 2, 3페이지 각각 1개정 가져오네요 ㅠㅜ
- 해결됨이것이 진짜 크롤링이다 - 실전편
질문이 있습니다..
번외 질문이긴한데 유튜브 크롤러 강의 중 제가 썸네일도 추가로 또 뽑고싶은데 에러가 나는게 자꾸 있어서요 이유만 좀 알고싶어서..검색해도 안 나와서요 # 썸네일 뽑기 if "http" in contents[idx].select_one("img#img").attrs["src"] : thumbnail = contents[idx].select_one("img#img").attrs["src"] else : thumbnail = None 저 코드에서 썸네일 추출 시 특정 영상들에 대해서 KeyError : src 가 뜹니다. 모든 영상들의 img태그에 src 속성이 있는것을 확인 했는데 왜 에러가 뜨는걸까요? 이유만이라도 좀 알려쥬시면 감사하겠습니땅
- 미해결이것이 진짜 크롤링이다 - 실전편
광고상품 제외하기에서 아예 제외하고 나머지만 출력하려면 어떻게 해야하나요?
광고상품 제외하기에서 if len(link.select('span.ad-badge-text')) > 0: print("광고상품입니다.") 로 하셨는데 이렇게 하면 결과물 출력시 광고상품은 광고상품이라고 표시되서 나오는데 혹시 무시하고 아예 출력을 안하려면 어떻게 해야하나요? 결과물에 광고가 아닌 상품들만 출력하고 싶을때의 경우도 알려주시면 감사드리겠습니다.
- 해결됨이것이 진짜 크롤링이다 - 실전편
+= 의 용법에 대해 좀 더 자세히 알고싶습니다.
워드 클라우드 강의에서 나온 total_content += content.text.strip()의 += 용법에 대해 좀 설명해주시면 감사드리겠습니다. total_content 변수 안에 반복문으로 실행되는 결과를 계속해서 붙여넣는것 같은데 맞나요?