묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
pyinstall로 exe파일을 만들었는데 코드 한줄만 수정하고선 다시 pyinstall -w -F 파일명 해주면 되는건가요?
한 줄만 수정하고 업데이트 하고싶은데다시 pyinstaller -w -F 파일명 하면 새로운 exe를 만드는게 아닌가요?
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 기본편
강의 "requests, Beautifulsoup4 사용법 빠르게 알아보기"에서 질문이있습니다.
7:59초에 출력값을 여러개로 하고 싶은데 선생님 같이 똑같이 설정을 해도 출력값이 한 줄로만 나옵니다 .
-
미해결남박사의 파이썬 기초부터 실전 100% 활용
파이썬 예외 처리 try / except 파일 처리 코드가 실행이 안됩니다.
except 이후에 실행이 안되는데 finally가 되려면 finally 코드를 영상말고 다르게 수정해주어야 되는건가요?
-
해결됨Node.js로 웹 크롤링하기
3-2 axios로 이미지 저장하기에서 axios 관련 오류..
안녕하세요.. 3-2강을 따라하고 있습니다. 3-1강에서 발생한 선택자 관련 문제는 docuemnt.querySelector를 이용해서 포스터 이미지 태그의 src를 가져오는 것은 되었습니다.추출된 url을 이용하여 웹브라우저에서 해당 이미지를 확인할 수 있었습니다. 그런데,3-2강에 나와있는대로, axios를 이용하여 해당 이미지를 다운로드 받으려고 하니, 오류가 발생합니다. 오류 내용은 아래 이미지와 같습니다.커뮤니티 게시판에 AxiosError 메시지 걺색을 했는데 결과가 없어서.. 바로 질문 올립니다. 어떻게 해결해야 할까요?
-
미해결Node.js로 웹 크롤링하기
3-1 이미지 다운로드 준비하기 에서 선택자 구성 질문
안녕하세요.. 현재 3-1강을 따라 하고 있씁니다.현재 네이버 영화사이트가 강의시점하고 달라서 현재 url에 맞게 테스트 하면서 따락 가고 있습니다.그런데 지금 네이버가 보여주는 웹사이트에서 영화포스터 이미지를 다운로드 받으려고, css 선택자를 구성하고자 하는데, 잘 안됩니다. 도움을 주시면 좋겠습니다. 현재의 네이버 영화url에서 포스터 이미지는 위의 이미지에서 빨간선에 둘러싸인 이미지라고 판단햇습니다. 요소 선택자로 해당 요소를 선택하니, 제생각에는 '.detail_info a.thumb._item ._img' 라고 생각했는데, 콘솔창에서 .$('.detail_info a.thumb._item img._img')를 입력했더니 null 이 나옵니다. 어떻게 선택자를 구성해야 하는지 알 수 있을까요? 콘솔에서 해당 이미지의 src를 추출되어야 할 텐데.. 이미지가 선택안되어서 계속 오류가 발생합니다.
-
해결됨Node.js로 웹 크롤링하기
2-4 csv 출력하기에서 오류 발생
안녕하세요.. 최근에 강의를 수강하고 있습니다.2-4강을 따라서 테스트하고 있습니다.그런데 총 10개의 링크를 가져와서 puppeteer를 이용해서 평점값을 가져오는데, 중간에 하나의 결과를 저장하지 않는 오류가 발생합니다. 왜 그럴까요? 처음에는 인덱스 번호 2번이 undefined 되더니, 이번에는 인덱스 7번이 생성이 안되어서 cs 파일 생성시 오류가 발생합니다. 이런 현상은 왜 발생할까요?
-
미해결LLM 데이터 분석 - 웹 크롤링부터 추천 시스템까지
selenium chrome driver click시 화면이 공백으로 나옵니다.
from selenium.webdriver.common.by import Byeconomy = driver.find_element(By.CSS_SELECTOR,'#gnbContent > div > ul > li:nth-child(4) > a > span')economyeconomy.click()driver.implicitly_wait(5)시 화면이 공백으로 나오네요
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
pyqt5와 pyside가 충돌
pyqt5와 pyside가 충돌을 해서 .exe 파일이 만들어지지 않아서 pyqt5를 uninstall 했는데도 exe 파일이 만들어지지 않네요. 이럴 때 파이썬을 다시 삭제하고 설치하는 방법밖에 없나요?
-
미해결[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
크롤링해서 엑셀 파일 만들기
강사님이 주신 그대로 주피터에 복붙해서 실행하였는데 엑셀파일을 대체 어디서 찾아야하나요. 주피터 노트북을 크롬으로 실행하여 연습하고 있는데 따로 컴퓨터에 저장하는 경로가 있나요?
-
미해결[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
사용 api 설정
강의와 다르게 사용 api를 설정해야만 다음 페이지로 넘어가는데 어떻게 하면 되나요? web 설정이라는게 없습니다. 신규로 등록할 수 없는 api 라고 합니다
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
네이버 자동입력 방지 문자 우회안됨
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import time import pyperclip driver = webdriver.Chrome() driver.get("https://nid.naver.com/nidlogin.login?mode=form&url=https://www.naver.com/") #네이버 로그인 페이지 링크 time.sleep(1) id = driver.find_element(By.CSS_SELECTOR, "#id") pyperclip.copy(user_id) id.send_keys(Keys.COMMAND, 'v') time.sleep(1)pw = driver.find_element(By.CSS_SELECTOR, "#pw") pyperclip.copy(user_pw) #pw.send_keys(pyperclip.paste()) pw.send_keys(Keys.COMMAND, 'v') time.sleep(1) driver.find_element(By.CSS_SELECTOR, "#log\\.login").click()\ 안녕하세요 위와 같이 네이버 자동로그인 시도해도 여전히 자동입력방지 문자 입력화면 우회가 현재는 안되는데요. 다시 해보니 대부분 우회되는데 가끔씩 안되는 경우가 있네요. id, password를 복붙하는 것이 현재로는 유일한 우회방법인 것이죠?
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
xpath로 크롤링이 안됩니다.
위와 같이 되어있는 구조에서 FABRIC에 대한 CSS 주소가 없어서 XPATH 주소로 아래와 같이크롤링 코드를 작성하였습니다.fabric = driver.find_element(By.XPATH, '//*[@id="prod_goods_form"]/div[1]/div/p[3]').text.strip() 그런데 계속해서 오류가 납니다. 왜그런걸까요?안에 내용이 text인데 뒤에 또 text를 붙여서 그런건가요? 에러는 아래와 같이 나옵니다.return self.execute(Command.FIND_ELEMENT, {"using": by, "value": value})["value"] Session info: chrome=128.0.6613.138); For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#invalid-selector-exceptionStacktrace:
-
미해결12시간 안에 끝내는 파이썬을 활용한 크롤링
Beautifulsoup실습도중 발생한 문제
Beautifulsoup라이브러리 네이버 "메일"추출하기를 수행하고 있는데 일단 네이버 사이트에 있는 것이 강의와 다르고강사분의 코드를. 동일하게 하고 안에 태그를 span으로만 해도 아무것도 추출되지 않습니다.어떻게 해야하나요
-
해결됨[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
집합 set 값 출력 순서
data_set = {'apple', 'dell', 'samsung', 'lg'}if 'apple' in data_set: print(data_set)출력 시 {'lg', 'apple', 'samsung', 'dell'}이렇게 순서가 뒤섞여 나옵니다.왜 그런걸까요?
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
GUI를 변형하여 네이버 쇼핑에서 가져오는것 성공했지만... 도와주세요
안녕하세요.네이버 지식인 GUI 강의하신 내용 참고하여,네이버 쇼핑을 GUI 로 만들어 보았습니다.여러번 버버벅 거리면서 수정하여, GUI 에 제품명을 담고, 엑셀로도 제품명과 링크 저장하는데 까지 성공했습니다.그런데, 네이버로 부터 ip 일시적 차단 경고 받았습니다.사전에 ip 차단 염려하여 1 페이지만 크롤링했고, 코드에서는 2군데 time.sleep(2)도 두었는데도 , 네이버로 부터 경고 받았습니다. 그래서, 더 진행하다가 아예차단될까 두려워서 방법 문의 드립니다.네이버 쇼핑 경고 ;쇼핑 서비스 접속이 일시적으로 제한되었습니다.네이버는 안정적인 쇼핑 서비스 제공하고자 시스템을 통해 아래와 같은 비정상적인 접근이 감지될 경우 해당 네트워크의 접속을 일시적으로 제한하고 있습니다.상품 구매, 탐색과 무관한 외부 이벤트를 통한 접속짧은 시간 내에 너무 많은 요청이 이루어진 IPVPN을 사용하여 접속한 IP특정 확장 프로그램 이용 시위와 같은 접근이 아님에도 접속이 제한된 경우,네이버앱을 업데이트 또는 원클릭 진단을 부탁드립니다.해당 방법을 통해서도 접속이 불가한 경우 네이버쇼핑 고객센터로 문의 부탁드립니다.적용된 코드 입니다;차단 원인과 해결방법 도와주세요~~감사합니다from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from PySide6.QtWidgets import QApplication,QWidget from nShopping_c_ui import Ui_Form import requests import sys import time from bs4 import BeautifulSoup import pandas as pd from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC class MainWindow_c2(QWidget,Ui_Form): def __init__(self): super().__init__() self.setupUi(self) self.start_btn.clicked.connect(self.start) self.reset_btn.clicked.connect(self.reset) self.save_btn.clicked.connect(self.save) self.quit_btn.clicked.connect(self.quit) def start(self): input_keyword=self.keyword.text() input_page=int(self.page.text()) self.result=[] # 적재창고 건설 # 크롬 드라이버 생성 self.driver=webdriver.Chrome() for i in range(1, input_page+1): self.textBrowser.append(f'{i}페이지 크롤링...') self.driver.get(f"https://search.shopping.naver.com/search/all?adQuery={input_keyword}&origQuery={input_keyword}&pagingIndex={i}&pagingSize=40&productSet=total&query={input_keyword}&sort=rel×tamp=&viewType=list") #스크롤 전 높이 확인 last_height=self.driver.execute_script("return document.body.scrollHeight") while True: #스크롤 끝까지 내리기 self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight)") #잠시대기 time.sleep(2) # 스크롤 후 높이 new_height=self.driver.execute_script("return document.body.scrollHeight") # 비교(if, break) if new_height==last_height: break # 스크롤 전 높이 업데이트 last_height=new_height html=self.driver.page_source soup=BeautifulSoup(html,'html.parser') #나무태그 찾기 items=soup.select(".product_item__MDtDF") for item in items: # 각 아이템에서 제목과 링크 추출 name=item.select_one(".product_title__Mmw2K>a").text link=item.select_one(".product_title__Mmw2K>a").attrs['href'] self.textBrowser.append(name) self.result.append([name, link]) QApplication.processEvents() time.sleep(2) self.textBrowser.append('크롤링 완료...') def reset(self): self.textBrowser.setText("") self.keyword.setText("") self.page.setText("") def save(self): input_keyword=self.keyword.text() df=pd.DataFrame(self.result,columns=['제목','링크']) df.to_excel(f'{input_keyword}_d.xlsx') def quit(self): self.driver.quit() # 크롬 드라이버 종료 sys.exit() app=QApplication() window=MainWindow_c2() window.show() sys.exit(app.exec())
-
미해결[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
주피터 노트북 결과가 안나옵니다.
css selector 사용해서 크롤링하기 1 강의도중에 아래와같이 작성후 run 실행시켜도 결과가 안나오고 아무런 반응이없습니다.에러도 안뜨고 보시다싶이 다른셀 실행되는것도 없는데 이런문제는 어덯게 해결하나요?
-
미해결12시간 안에 끝내는 파이썬을 활용한 크롤링
selenium 버전이 4.x 대가 되면서 메서드가 달라졌고, 크롬드라이버 다운도 방식이 달라졌습니다(24.09.07 기준)
현재 지원되는 selenium 4.x 버전에서는,driver.find_element_by_id() 메서드가 더 이상 지원되지 않습니다. 라이브러리에from selenium.webdriver.common.by import By을 추가하시고search = driver.find_element(By.ID, 'query')menu = driver.find_element(By.CSS_SELECTOR,'div.dp2 > ul >li:nth-child(1) > a')이렇게 하셔야 현재 24.09 기준으로 selenium 설치하신 분들은 코드가 무리 없이 돌아가실 거에요. 크롬 드라이버 역시 버전 115 이후부터는 통합으로 운영되어https://googlechromelabs.github.io/chrome-for-testing/여기 페이지로 들어가셔서 아래쪽 stable(안정화) 버전에서본인에게 맞는 운영체계의 크롬드라이버의 url을 주소창에 넣으시면 크롬드라이버를 다운 받으실 수 있습니다. 크롬과 셀레니움의 경우 계속해서 버전이 자동적으로 업되는 경우가 많아,바로 전에 되던 코드가 실행이 되지 않는 경우도 있으니 버전들을 잘 확인하셔야 해요.
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
어떤 경우에 get_attribute 이걸 사용하나요?
동적 페이지 크롤링 하고 있는데..어떤 경우에는 select_one를 사용하또 다른 경우에는 get_attribute이걸 쓰더라고요..어떤 때에 각각 쓰는건지 아직 이해를 못했어요.뭔가 알것같기도 하고.. 또 사용도 할 수는 있을 것 같은좀 더 정확하게 이해하고 싶어요. 예를 들면 (맞는 코드는 아니지만)# 제목 가져오기 from bs4 import BeautifulSoup html = driver.page_source soup = BeautifulSoup(html, 'html.parser') items = soup.select('#main-area > div:nth-child(4)') for item in items: title = item.select_one('.article').text.strip() link = item.select_one('.article').attrs['href'] print(title,link) 이런 식으로 쓰기도 하니까 좀 헷깔립니다.단순히 정적페이지/동적페이지에 따라 맞게 쓰는걸까요?
-
미해결실습으로 끝장내는 웹 크롤링과 웹 페이지 자동화 & 실전 활용
네이버 쇼핑 크롤링 1 코드 사용 시, 접속 제한됐을 때의 해결 방법이 궁금합니다.
import requests from bs4 import BeautifulSoup keyword = input("검색할 상품을 입력하세요 : ") url = f"https://search.shopping.naver.com/search/all?&query={keyword}" user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36" headers = {"User-Agent" : user_agent} req = requests.get(url, headers=headers) html = req.text soup = BeautifulSoup(html, "html.parser") print(soup)위 코드 사용 시 아래와 같은 결과가 나타납니다.keyword = input("검색할 상품을 입력하세요 : ") url = f"https://search.shopping.naver.com/search/all?&query={keyword}" user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36" headers = {"User-Agent" : user_agent} req = requests.get(url, headers=headers) # req = requests.get(url, headers=headers) # print(req.request.headers) html = req.text soup = BeautifulSoup(html, "html.parser") print(soup)<title>네이버쇼핑</title></head><body><div class="content_error"><div class="head">쇼핑 서비스 접속이 일시적으로 제한되었습니다. </div><div class="desc">네이버는 안정적인 쇼핑 서비스 제공하고자 시스템을 통해 아래와 같은 비정상적인 접근이 감지될 경우 해당 네트워크의 접속을 일시적으로 제한하고 있습니다.</div><ul class="reason"><li>상품 구매, 탐색과 무관한 외부 이벤트를 통한 접속</li><li>짧은 시간 내에 너무 많은 요청이 이루어진 IP</li><li>VPN을 사용하여 접속한 IP</li><li>특정 확장 프로그램 이용 시</li></ul><div class="footer">위와 같은 접근이 아님에도 접속이 제한된 경우,네이버앱을 업데이트 또는 <a href="https://help.naver.com/service/30016/category/5278" target="_blank"> 원클릭 진단</a>을 부탁드립니다.<br/> 해당 방법을 통해서도 접속이 불가한 경우 <a href="https://help.pay.naver.com/mail/form.help?alias=shopping_stop" target="_blank">네 이버쇼핑 고객센터</a>로 문의 부탁드립니다.</div></div></body></html>이런 상황에서 대안이 있을까요?
-
미해결내 업무를 대신 할 파이썬(Python) 웹크롤링 & 자동화 (feat. 주식, 부동산 데이터 / 인스타그램)
전일비 상승,하락때문에 int화를 못하고 있는데
5.4 영상보면 전일비는 숫자로만되어있네요영상보면 전일비는 숫자로만되어있네요 제 코드는 아래와 같고 어떻게 상승,하락을 없애는지 모르겠습니다. import requestsimport bs4import reimport timetotal_data_list = [] # 추출하고자 하는 데이터 리스트를 모아놓을 곳 page_number = 1 pre_data_time_set = set() # 이전 페이지에서 추출한 데이터를 모아놓는 곳 cuz 중복되면 그만두게 하기 위해 while True: # 특정 조건이 만족하면 break로 루프 끝냄 # 페이지 번호를 포함한 url 생성 - {}.format을 사용해서 동적으로 사용 url2 = "https://finance.naver.com/item/sise_day.naver?code=453450&page={}".format(page_number) # 해당 url로 요청 res2 = requests.get(url=url2, headers=headers2) # 요청한 정보를 .text로 만든 뒤 파싱 soup3 = bs4.BeautifulSoup(res2.text, "lxml") tr_eli = soup3.select("table.type2 > tr[onmouseover='mouseOver(this)']") current_time_set = set() # 현재 페이지의 날짜 데이터를 저장할 set for a in tr_eli: # tr_eli라는 ResultSet에서 하나씩 추출 td_eli = a.select("td") # a.select("td") = 위에서 추출한 것에서 'td' 태그를 포함한 것을 추츨하고 ResultSet으로 반환 # a는 태그지만 td_eli는 ResultSet이다 : data_list = [] # 추출한 데이터를 담을 리스트 for i, td_real2 in enumerate(td_eli): # 추출한 ResultSet(열)들과 인덱스를 같이 순회 clean_data = re.sub(r'\s+', " ", td_real2.text.replace(",","")) # 숫자가 아닌 모든 문자를 제거 if clean_data == " ": break if i == 0: # 첫 번째 인덱스는 무조건 날짜임 current_time_set.add(clean_data) data_list.append(clean_data) if len(data_list) > 0: # data_list가 빈칸이 아닐경우에 total에다가 추가 total_data_list.append(data_list) else: # eliment를 가져오는거 자체를 그만두게 하는 것 break # 이전에 수집한 날짜와 현재 페이지의 날짜가 동일하면 루프 중단 if pre_data_time_set == current_time_set: print("끝났다", page_number) break else: pre_data_time_set = current_time_set # 현재 페이지의 날짜로 업데이트 time.sleep(3) # or random.random() * 2 page_number += 1 # 페이지 번호를 1씩 증가# 결과 출력 for data in total_data_list: # total_data_list는 리스트 형식이라 리스트안에 리스트를 빼내는 작업하는 것 print(data)# 중복되는 내용 없애는거는 나중에 DataFrame 사용하면 편한데 로직내에서도 가능하긴 하다.