묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결쉽게 처음하는 파이썬 고급 크롤링 [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초 이내로 반응합니다. 강의 내용과는 조금 벗어날 수도 있는 부분인 것 같으나..현업이나 교육 중에 이런 현상을 보신 적이 있으실까 싶어서 여쭤보네요.강의는 정말 잘 듣고 있습니다.양질의 강의 찍어주셔서 정말 감사드려요!!^^
-
미해결[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
쇼핑몰 크롤링 select, select_one 차이
잔재미코딩 선생님 우선 강의 정말 잘 듣고 있습니다.감사합니다. ^^ 크롤링 프로그램 완성: 크롤링한 데이터에서 다시 크롤링하기1 (업데이트)에서 질문드립니다. 수업자료에 올려주신 select로 태그를 가져오는 과정에서지마켓 bestitems는 왜 one으로만 작동하는 건지 궁금합니다.강의 찍어주시던 시기에는 bestitems 클래스가 2개가 있어서 select_one이 아닌 select를 사용하셨거든요. 이렇게 넣으면 왜 오류가 나는지 궁금해서 글을 남깁니다. 인터넷에 select와 select_one의 차이에 대해 찾아 봤으나 답을 얻지는 못해 문의드리게 되었습니다. 소중한 강의로 코딩을 알아가게 해주신 점 다시 한번 감사드립니다. ^^ #해당 코드import requestsfrom bs4 import BeautifulSoupres = requests.get('http://corners.gmarket.co.kr/Bestsellers?viewType=G&groupCode=G06')soup = BeautifulSoup(res.content, 'html.parser')# 2022.09.13 수정사항 (웹사이트 코드가 수시로 변경되면서, best-list class 를 가진 태그가 하나이기 때문에 해당 태그만 선택하도록 수정)bestitems = soup.select('div.best-list') # select_one() 은 해당 조건에 맞는 태그 하나만 선택하는 함수products = bestitems.select('ul > li')for index, product in enumerate(products): title = product.select_one('a.itemname') price = product.select_one('div.s-price > strong') print (title.get_text(), price.get_text(), title['href']) #문의 내용bestitems = soup.select('div.best-list') ^찾는 값이 1개인 경우에는 무조건 one을 적어야 하는 것일까요?
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
해결이 안되네요
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 webdriver_manager.chrome import ChromeDriverManager # 크롬 드라이버 자동 업데이트 from selenium.webdriver.common.keys import Keys import time import pyautogui import pyperclip # 브라우져 꺼짐 방비 chrome_options = Options() chrome_options.add_experimental_option("detach", True) # 불필요한 에러 메시지 없애기 chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"] ) 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://map.naver.com/v5") search = driver.find_element(By.CSS_SELECTOR,"input.input_search") search.click() time.sleep(1) search.send_keys("제주 게스트하우스") time.sleep(1) search.send_keys(Keys.ENTER) time.sleep(1) # iframe 안으로 들어가기 driver.switch_to.frame("searchIframe") # iframe 나올 때 # driver.switch_to_default_content() # 무한스크롤 하기 ## iframe 안쪽을 한번 클릭하기 driver.find_element(By.CSS_SELECTOR,"#_pcmap_list_scroll_container").click() ## 로딩된 데이터 갯수 확인 lis = driver.find_elements(By.CSS_SELECTOR,"li.Fh8nG.D5NxL") before_len = len(lis) while True : # 맨 아래로 스크롤을 내린다. driver.find_element(By.CSS_SELECTOR,"body").send_keys(Keys.END) # 페이지 로딩 시간을 준다 time.sleep(1.5) # 스크롤 후 로딩된 데이터 개수 확인 lis = driver.find_elements(By.CSS_SELECTOR,"li.Fh8nG.D5NxL") after_len = len(lis) # 로딩된 데이터 개수가 같다면 반복 멈춤 if before_len == after_len: break before_len = after_len # 데이터 수집 ## lis에 모든 가계의 정보가 담겨있음 for li in lis: # 별점 있는 것만 선택 stars = driver.find_elements(By.CSS_SELECTOR,"span.XGoTG.cN3MU> em") if len(stars)>0: # 가계이름 store_name = li.find_element(By.CSS_SELECTOR,"span.place_bluelink.moQ_p").text star_point = li.find_element(By.CSS_SELECTOR,"span.XGoTG.cN3MU> em")위에서 store_name까지는 출력이 잘 되는데...star_point를 추가하고 출력하면 아래와 같은 에러가 발생합니다. 아무리 해봐도 해결이 안되네요..
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
네이버 금융 크롤링 질문
안녕하세요. 네이버 금융 크롤링 강의 중 질문이 있어서, 글 남깁니다. 우선 강의를 보면 아래와 같이, 코딩되어있습니다.soup.select() 코드 중 "onmouseover%" 이 부분 통해서 필요한 정보를 가지고 오고 있습니다.다만, 제가 실습할때는 참고할 수 있는 값들이 좀 달랐습니다.(아래 캡쳐 화면 참고 부탁드리겠습니다.) 제가 작성한 코드는 가장 아래 코드 참고 부탁드립니다.우선, 아래와 같이 정보를 가져옵니다.trs = soup.select("table.type_5 > tbody")-> 이 경우 trs값은 [] 빈 리스트로 찍히고 있는데, 제가 혹시 잘못 가져온걸까요? 그 이후, 빈칸의 경우 td[colspan]값으로 확인해서, 아래 코드로 해당 정보는 지우도록 하였습니다.td_cols = tr.select("td[colspan]") for td_col in td_cols: td_col.decompose() import requests from bs4 import BeautifulSoup url = "https://finance.naver.com/sise/field_submit.naver?menu=lastsearch2&returnUrl=http://finance.naver.com/sise/lastsearch2.naver&fieldIds=per&fieldIds=roe&fieldIds=pbr&fieldIds=reserve_ratio" response = requests.get(url) html = response.text soup = BeautifulSoup(html, "html.parser") ## 변경 코드 ## trs = soup.select("table.type_5 > tbody") #trs = soup.select("table.type_5") print("================================") print(trs) print("================================") for tr in trs: print("Sdsd") """td_cols = tr.select("td[colspan]") for td_col in td_cols: td_col.decompose() """ # nth-child 사용하는 방법 name = tr.select_one('td:nth-child(2)').text per = tr.select_one('td:nth-child(7)').text roe = tr.select_one('td:nth-child(8)').text pbr = tr.select_one('td:nth-child(9)').text reserve_ratio = tr.select_one('td:nth-child(10)').text print(name, per, roe, pbr, reserve_ratio) 위 말씀드린 과정을 통해서 코드 수행 시 정상적으로 동작하지 않는데, 관련해서 답변 주시면 감사하겠습니다!!
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 기본편
pyautogui 모듈을 다운 받았는데
ModuleNotFoundError: No module named 'pyautogui' 모듈을 찾을수가 없다고 하네요. 지우고 다운 받고 반복 했으나 찾을수가 없다고 합니다.. 버전이 안맞는건지 모르겠네요
-
미해결파이썬 무료 강의 (활용편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
-
미해결[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
69번 질문드립니다.
- 본 강의 영상 학습 관련 문의에 대해 답변을 드립니다. (어떤 챕터 몇분 몇초를 꼭 기재부탁드립니다)- 이외의 문의등은 평생강의이므로 양해를 부탁드립니다- 현업과 병행하는 관계로 주말/휴가 제외 최대한 3일내로 답변을 드리려 노력하고 있습니다- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 12분 25초에 함수를 만들때 return이 3번 들어가도 되는건가요?마지막에 함수 끝날때만 들어가야하고 조건문에서는 else로 조건문을 닫는다던가 해야하는거 아닌지 궁금합니다.
-
미해결[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
57번 질문입니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 16:20 초 가량data.keys() 를 item 에 집어넣으셨는데그럼 item 은 data 의 키값을 가져오는건데data[item] 을 하니 벨류값이 나오는지도무지 이해가 안갑니다 ㅠ56번도 같은 맥락으로 이해가 안갑니다.감사합니다
-
미해결[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
답이 다 있어요.
올려주신 자료 답이 다 있는데, 답이 없는 자료는 따로 없나요?
-
미해결파이썬 증권 데이터 수집과 분석으로 신호와 소음 찾기
fdr.StockListing("KRW") 불러올때 오류가 납니다.
ValueError: unknown format code 'd' for object of type 'str' 이라고 뜨네요 krx/listing.py 에서 df_listing['Symbol'] = df_listing['Symbol'].apply(lambda x: '{:06d}'.format(x)) 이부분에서 x값이 string으로 들어가서 문제가 생기는듯 합니다. 버전은 선생님 버전이랑 같은데 뭐가 문제인지 몰겠네요
-
해결됨현존 최강 크롤링 기술: Scrapy와 Selenium 정복
scrapy shell에서 실행이 너무 복잡하게 보입니다
scrapy shell로 css 값을 확인할려고 하면 이렇게 다 붙어져서 나옵니다.(오류는 없습니다) 동영상에 나오듯 하나씩 띄어쓰게 나오게 하는 방법은 없나요?? 확인할려고 하면 너무 꼬여서 가독성이 떨어집니다ㅠㅠ 터미널은 iterm2를 사용하고 있습니다
-
미해결현존 최강 크롤링 기술: Scrapy와 Selenium 정복
iterm2를 사용하면서 터미널에서 오류가 발생합니다...
안녕하세요! 크롤링 강의를 듣고 더 배우고 싶어서 스크래피를 듣고 있는 학생입니다. 저는 맥을 사용하고 있기 때문에 영상에서 iterm2를 보고 따라하면서 사용을 하는데 자꾸 zsh: command not found: scrapy 라는 문구가 나옵니다. 이 오류때문에 계속 나아가질 못해서 해결방법이 궁금합니다ㅜㅜ 만약 iterm2 자체 문제이면 기본적으로 설치되어있는 터미널이나, 아나콘다 터미널을 계속 사용해야 하는지 궁금합니다!