무료
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결이것이 진짜 크롤링이다 - 기본편
driver.implicitly_wait(10)가 웹페이지를 열고 난 후로 코드의 위치를 변경하는 것이 맞지 않나요?
driver.implicitly_wait(10)가 웹페이지를 열고 난 후로 코드의 위치를 변경하는 것이 맞지 않나요?현재는 driver.get('~') 앞 줄에 driver.implicitly_wait(10)을 넣어 놓으셨네요.
- 미해결이것이 진짜 크롤링이다 - 기본편
책 출판이 되었나요?
책 출판이 되었나요?
- 미해결이것이 진짜 크롤링이다 - 기본편
pip 설치 에러
강사님 수업 잘 듣고 있습니다.첫 pip 설치에서 막혔는데요. 제자리에서 실행시켜도 설치가 안되고, 구글 검색을 통해서 exe 파일이 있는 위치에 가서 설치하여도 에러가 뜹니다.
- 미해결이것이 진짜 크롤링이다 - 기본편
12강 데이터 엑셀에 저장하기 관련 질문드립니다
안녕하세요 강사님 다음과 같은 에러가 뜨는데 왜 이런걸까요?에러내용을 보면 튜플이 있어서 작동하지 않는다 이 뜻인거 같은데 만든 적도 없는 튜플이 있다니 이해가 되지 않아서요뭐가 잘못됐는지 모르겠습니다ㅠㅠ
- 미해결이것이 진짜 크롤링이다 - 기본편
Beatifulsoup 말고 다른 방법은 없을까요?
앞쪽에서 Beatifulsoup이 오류가 나니까 뒤쪽에 문제를 따라
- 미해결이것이 진짜 크롤링이다 - 기본편
스크롤 알고리즘에 질문있습니다.
스크롤을 내리기 전과 스크롤을 모두 내린후가 같다면 무한루프를 중지시킨다고 하셨는데요스크롤을 내리기 전 스크롤의 높이는 0, 스크롤을 모두 내린 후 스크롤의 높이는 MAX가 되어서 서로 같지 않게 되는거 아닌가요?그런데 어째서 스크롤을 내리기 전의 높이와 스크롤을 모두 내린후의 높이가 같다고 인식되는 것입니까?파이썬의 browser.execute_script("return document.body.scrollHeight") 코드를 이용해 높이를 측정해 보았을때, 스크롤을 내리기 전과 모두 내린 후의 높이가 다르게 나오고 있는데 이것도 잘못된 것인지 궁금합니다.
- 미해결이것이 진짜 크롤링이다 - 기본편
pyautogui.prompt 사용 시 에러 발생합니다.
안녕하세요 :)pyautogui.prompt 사용시 아래와 갈이 에러가 발생합니다.pyautogui 설치 시, 에러는 없었습니다! 확인 부탁드립니다🙏🏻
- 미해결이것이 진짜 크롤링이다 - 기본편
엑셀 다루기 문의입니다.
안녕하세요 선생님!엑셀 강의대로 코드를 입력하니 아래와 같은 오류가 발생합니다. 혹시 무엇때문에 발생하는 오류인지 아실까요? ㅠㅠ맥북 이용중입니다.[ Traceback (most recent call last):File "/Users/chjo/Desktop/코딩/Chapter01/파이썬엑셀다루기-1.py", line 20, in <module>wb.save('/Users/chjo/Desktop/코딩/Chapter01/파이썬엑셀다루기-1.py/참가자_data.xlsx')File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/openpyxl/workbook/workbook.py", line 407, in savesave_workbook(self, filename)File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/openpyxl/writer/excel.py", line 291, in save_workbookarchive = ZipFile(filename, 'w', ZIP_DEFLATED, allowZip64=True)File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/zipfile.py", line 1249, in initself.fp = io.open(file, filemode)NotADirectoryError: [Errno 20] Not a directory: '/Users/chjo/Desktop/코딩/Chapter01/파이썬엑셀다루기-1.py/참가자_data.xlsx' ]수정하기도 마찬가지로 안되네요 . 수정하기는 아래와 같이 오류메세지가 뜹니다.chjo@Jofresh-2 코딩 % /usr/local/bin/python3 /Users/chjo/Desktop/코딩/Chapter01/파이썬엑셀다루기-엑셀불러오기.pyTraceback (most recent call last): File "/Users/chjo/Desktop/코딩/Chapter01/파이썬엑셀다루기-엑셀불러오기.py", line 3, in <module> fpath = [Users/chjo/Desktop/코딩/참가자_data.xlsx]NameError: name 'Users' is not defined
- 미해결이것이 진짜 크롤링이다 - 기본편
links is not defined 오류
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. links를 정의할 수 없다고 오류가 나오는데 어디서 잘못된걸까요?ㅠㅠ
- 미해결이것이 진짜 크롤링이다 - 기본편
command prompt 문의
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 맥북이용중입니다. command prompt가 안나오는데 이 부분은 어떻게 해결 할 수 있을까요?
- 미해결이것이 진짜 크롤링이다 - 기본편
input과 pyautogui.prompt 차이
안녕하세요! 강의 잘듣고 있습니다! 질문이 있는데 input으로 입력값을 받아도 크롤링이 잘되는데 pyautogui.prompt를 쓰는 이유를 알 수 있을까요??
- 미해결이것이 진짜 크롤링이다 - 기본편
질문있습니다
tr class="trFieldValue" id="Tr_A010_0"> == $0 라는 태그를 크롤링하고 싶어서 코드를 작성했는데 엑셀파일을 열어보니 텍스트가 없더라구요 ㅠㅠ 혹시 뭐가 문제인지 알수있을까요? import requests from bs4 import BeautifulSoup import openpyxl fpath = r'C:\pythonex\경쟁률_1.xlsx' wb = openpyxl.load_workbook(fpath) ws = wb.active codes = [ 'Sl5KTCVDYXwwOExKclc6L0pmZlRm','Sl5KTjlKclc6L0pmZlRm','Sl5KVyVNOWFhOUpyVzovSmZmVGY=','Sl5KOk0mSnJXOi9KZmZUZg==','Sl5KMDpXJkpyVzovSmZmVGY=','Sl5KYDpXJkpyVzovSmZmVGY=','Sl5KOk4mSnJXOi9KZmZUZg==','Sl5KOjhMSnJXOi9KZmZUZg==','Sl5KVyV8JnJXYXxMSnJXOi9KZmZUZg==','Sl5KYGJyOnxMSnJXOi9KZmZUZg==','Sl5KOkxMJUpyVzovSmZmVGY=','Sl5KTThXclc4OUpyVzovSmZmVGY=','Sl5KVyUvYDhWSnJXOi9KZmZUZg==','Sl5KOjBDSnJXOi9KZmZUZg==','Sl5KOjAmSnJXOi9KZmZUZg==','Sl5KVyUmclc4L0M6YWAmSnJXOi9KZmZUZg==','Sl5KV2FOOiZKclc6L0pmZlRm','Sl5Kclc4Ylc4SnJXOi9KZmZUZg==','Sl5KVyVyV2FiSnJXOi9KZmZUZg==','Sl5KOjBpSnJXOi9KZmZUZg==','Sl5KOmk5SnJXOi9KZmZUZg==','Sl5KJWAmVzh8SnJXOi9KZmZUZg==','Sl5Kclc6Jmk6YnxKclc6L0pmZlRm','Sl5KcldhVlc4TjlKclc6L0pmZlRm','Sl5KV2FOclc4OUpyVzovSmZmVGY=','Sl5KV2FOclc4OUpyVzovSmZmVGY=','Sl5KJS9yVzgmSnJXOi9KZmZUZg==','Sl5KZiVgJldhYkpyVzovSmZmVGY=','Sl5KOENDOHxKclc6L0pmZlRm','Sl5KTWJDQzh8SnJXOi9KZmZUZg==','Sl5KOlY5SnJXOi9KZmZUZg==','Sl5KMGE5OUpyVzovSmZmVGY=','Sl5Kclc6Yk1gJkpyVzovSmZmVGY=','Sl5KOi9yV2FgfExKclc6L0pmZlRm','Sl5KcldhL2AmOzhgfWE5SnJXOi9KZmZUZg==','Sl5KOnJySnJXOi9KZmZUZg==','Sl5KOld9YTlKclc6L0pmZlRm','Sl5KQzphYCZNOFdKclc6L0pmZlRm','Sl5KOkJKclc6L0pmZlRm','Sl5KZjpNJkpyVzovSmZmVGY=','Sl5KV2FhTVc6JkpyVzovSmZmVGY=','Sl5KfEwmSnJXOi9KZmZUZg==','Sl5KV2FhTnJXOnxMSnJXOi9KZmZUZg==','Sl5KfExgMDhgfWE5SnJXOi9KZmZUZg==','Sl5KOkxpSnJXOi9KZmZUZg==','Sl5KcldhJmFhTkpyVzovSmZmVGY=','Sl5KJjowQjlKclc6L0pmZlRm','Sl5KOmlNSnJXOi9KZmZUZg==','Sl5Kclc4TjlXYU5Kclc6L0pmZlRm','Sl5KOldCL0pyVzovSmZmVGY=','Sl5KOi9XYWAvSnJXOi9KZmZUZg==','Sl5KOlclfCZyV2FWSnJXOi9KZmZUZg==','Sl5KOkxNSnJXOi9KZmZUZg==','Sl5KYWk5YU1Kclc6L0pmZlRm','Sl5KV2F8TFc6JkpyVzovSmZmVGY=','Sl5Kclc4VmF8TEpyVzovSmZmVGY=','Sl5KYDY6L3JXOE45SnJXOi9KZmZUZg==','Sl5KOk45SnJXOi9KZmZUZg==','Sl5KOkJNOFdKclc6L0pmZlRm','Sl5KVzomYXxMSnJXOi9KZmZUZg==','Sl5KOi9yV2FgYnJKclc6L0pmZlRm','Sl5KfGFNOjlKclc6L0pmZlRm','Sl5KV2FgfExNJXJKclc6L0pmZlRm','Sl5KOjgwSnJXOi9KZmZUZg==','Sl5KZjk6cnJXYVZKclc6L0pmZlRm','Sl5KcldhVlc4SnJXOi9KZmZUZg==','Sl5KOmJKclc6L0pmZlRm','Sl5KYDpMSnJXOi9KZmZUZg==','Sl5KTCZMSnJXOi9KZmZUZg==','Sl5KOk05SnJXOi9KZmZUZg==','Sl5KYDpXVkpyVzovSmZmVGY=','Sl5KJjlKclc6L0pmZlRm','Sl5KVyUmYTlKclc6L0pmZlRm','Sl5KOmBWSnJXOi9KZmZUZg==','Sl5KOiZiSnJXOi9KZmZUZg==','Sl5KOmFNOUpyVzovSmZmVGY=','Sl5KVzgmQzpKclc6L0pmZlRm','Sl5KOlc6L2AvSnJXOi9KZmZUZg==', ] row = 2 for code in codes: url = f"http://ratio.uwayapply.com/{code}" response = requests.get(url) html = response.text soup = BeautifulSoup(html,'html.parser') ratio = soup.select(".trFieldValue") print(ratio) ws[f'D{row}'] row = row + 70 wb.save(fpath)
- 미해결이것이 진짜 크롤링이다 - 기본편
robots.txt
안녕하세요 네이버 쇼핑은 robots.txt파일에 User-agent: * Disallow: / User-agent: Yeti Disallow: /v1 Disallow: /my Disallow: /cart Allow: / 로 되어있는데 크롤링 하는것 만들어서 데이터를 가져와도 되는건가요?? 데이터를 모두가 볼수있는 곳에 업로드하지 않으면 문제가 되지 않는건가요?? 아니면 주기적 크롤링이 아닌 일회성의 크롤링은 허용이 되는건가요?? 강의용으로 크롤링을 하신거라면 실제로 네이버쇼핑 크롤링 프로그램을 만들어달라는 외주가 있으면 그건 하면 안되는건가요??
- 미해결이것이 진짜 크롤링이다 - 기본편
'href' 에러
계속 이렇게 오류가 뜨는데, 링크 자체가 잘못 인식되어서 안되는 걸까요?
- 미해결이것이 진짜 크롤링이다 - 기본편
오류의 원인이 뭘까요...
도저히 모르겠습니다..
- 미해결이것이 진짜 크롤링이다 - 기본편
for in 반복문 사용시 에러 ㅜㅜ
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. for link in links: 부터 에러가납니다..
- 미해결이것이 진짜 크롤링이다 - 기본편
질문드립니다.
혹시 파이썬 크롤링, 자동화 프로그램 만들며 월 100만원 벌기 강의는 인프런에 업로드 안되나여?
- 미해결이것이 진짜 크롤링이다 - 기본편
질문드립니다
import requests from bs4 import BeautifulSoup from openpyxl import Workbook keyword = input("검색어를 입력하세요") lastpage = input("마지막 페이지 번호를 입력해 주세요") pageNum = 1 for i in range(1, int(lastpage) * 10, 10): print(f"{pageNum}페이지 입니다.~~~~~~~~~~~~~~~~~") response = requests.get(f"https://search.naver.com/search.naver?sm=tab_hty.top&where=news&query={keyword}&start={i}") html = response.text soup = BeautifulSoup(html, 'html.parser') links = soup.select(".news_tit") wb = Workbook() ws1 = wb.active ws1.title = "연습" ws1.append(["제목", "링크"]) print(links) for link in links: title = link.text url = link.attrs['href'] print(title, url) ws1.append([title, url]) pageNum = pageNum + 1 wb.save(filename='연습.xlsx') 네이버 기사 제목과 url 수집한 걸 엑셀에 옮겨보려고 합니다. 터미널에서는 마지막 페이지 번호 입력를 4로 했다고 하면 총 40개의 제목과 링크가 나타나는데 엑셀에는 옮겨지기는 하는데 10개의 기사 제목, 링크만 옮겨집니다. 어떻게 수정해주어야 할까요?
- 해결됨이것이 진짜 크롤링이다 - 기본편
셀레니움_for 문 질문
안녕하십니까양질의 강의 잘 듣고 있습니다. 감사합니다. 네이버 쇼핑에 아이폰13을 검색하는 부분에 관하여질문드리고 싶은 부분이 있습니다. 무한스크롤에 크롤링까지는 잘 되지만, 가장 상단의 결과 딱 하나만 가져와지고, 나머지 항목들은 크롤링이 되지 않습니다. 반복문에 문제가 있는 것으로 추정되는데 어디가 문제인지 찾는데 어려움이 있습니다. 긴 글 읽어주셔서 감사하고, 아래는 제가 강사님 따라한 코드입니다. # 셀레니움에서 스크롤을 자동으로 내리고 크롤링하는 방법을 알아보자. import imp from lib2to3.pgen2 import driver from tkinter import BROWSE 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"]) # 셀레니움으로 웹브라우저 자동으로 띄우기 # ChromeDriverManager를 통해서 ChromeDriver를 설치하고, Service라는 객체를 만든 뒤, service라는 변수에 저장한다 service = Service(executable_path=ChromeDriverManager().install()) driver = webdriver.Chrome(service=service, options=chrome_options) # 특정 웹페이지 주소로 이동 driver.implicitly_wait(5) # 웹페이지가 로딩 될때까지 5초는 기다려준다 driver.maximize_window() # 화면 최대화 driver.get('https://www.naver.com/') # 네이버 열기 # 쇼핑 배너 클릭 banner = driver.find_element(By.CSS_SELECTOR, '#NM_FAVORITE > div.group_nav > ul.list_nav.type_fix > li:nth-child(5) > a') # 네이버 쇼핑 배너의 selector banner.click() # id라는 변수를 클릭하라는 명령어다 time.sleep(2) # 쇼핑 배너를 클릭한 뒤, 아직 페이지가 뜨지도 않았는데 바로 다음 명령어가 실행될 수도 있으니까, 2초 정도 여유를 준다. # 쇼핑 페이지에서 검색 클릭 search = driver.find_element(By.CSS_SELECTOR, '#_verticalGnbModule > div > div._header_header_REoTl > div > div._gnb_header_shop_Xd6Hq > div > div._gnbSearch_search_area_3LAyd > form > fieldset > div > input') # 네이버 쇼핑 배너의 selector search.click() # id라는 변수를 클릭하라는 명령어다 # 검색어 입력 search.send_keys('아이폰 13') search.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) # 대부분의 웹페이지는 body 태그가 다 있다. 이걸 이용하고, END를 통해 맨 아래까지 스크롤 내림 # 너무 빠르면 오류가 생기니까 스크롤 사이에 페이지 로딩 시간을 주자. time.sleep(1) # 스크롤 후 높이 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, '#__next > div > div.style_container__1YjHN > div.style_inner__18zZX > div.style_content_wrap__1PzEo > div.style_content__2T20F > ul > div > div:nth-child(1) > li > div > div.basicList_info_area__17Xyo') for item in items: name = item.find_element(By.CSS_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(1) > li > div > div.basicList_info_area__17Xyo > div.basicList_title__3P9Q7').text price = item.find_element(By.CSS_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(1) > li > div > div.basicList_info_area__17Xyo > div.basicList_price_area__1UXXR > strong > span > span.price_num__2WUXn').text link = item.find_element(By.CSS_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(1) > li > div > div.basicList_info_area__17Xyo > div.basicList_title__3P9Q7 > a').get_attribute('href') print(name, price, link)
- 미해결이것이 진짜 크롤링이다 - 기본편
webdriver_manager.chrome.ChromeDriverManager 질문드립니다
안녕하세요! 강의에서 수동으로 크롬드라이버를 설치하는 번거로움을 해결하기위해 webdriver_manager모듈에 있는 ChromeDriverManager를 사용한다고 말씀해주셨는데, ChromeDriverManager가 최신 크롬드라이버를 제 컴퓨터 경로 어딘가에 대신 직접 다운받아 주는 건가요? 그렇다면 만약 크롬 버전이 업데이트되면 해당 버전에 맞는 크롬드라이버를 ChromeDriverManager가 다운받고 이전 버전은 삭제해주는 식으로 관리를 해주는지, 아니면 이전 버전은 제가 따로 직접 삭제해줘야하는지 궁금합니다.