무료
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)
selenium 관련 web push notification 제어 질문
선생님 강의 관련 질문은 아니지만 셀리니움 사용 과정에 어려움을 느껴서 질문드립니다... 셀레니움에 두번째 페이지(window_handle[1]) 에서 웹푸시 알림이 뜨는데 크롬 옵션 설정 제어 안됨 (chrome_options.add_argument("--disable-notifications"))send_key(Keys.ENTER) 전송 X액션체인 X try문으로 WebDriverWait(driver, 10).until (EC.alert_is_present()) , alert.accept() ALERT 인식 못함. 어떤 방법으로 웹푸시 알림 을 확인하거나 취소 할 수 있을까요?
- 미해결파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)
print(soup.a) 태그 값이 None으로 나옵니다.
태그 관련 내용이 반환이 안 되는데 어떻게 하면 될까요?
- 미해결파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)
soup으로 검색한 버튼 또는 text를 click할때 어떻게 하나요 ?
webdriver의 find_element로 찾은 경우 .click()을 붙여주면 click이 되는데, soup으로 찾은 경우 .click()을 붙여주면 오류가 발생하네요.click을 하려면 find_element를 써야 할까요? soup으로 찾은 객체는 click을 할 수 없을까요?
- 미해결파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)
웹툰 사이트 body 안에가 안불러져옵니다.
<body> 태그 하위<div id="root"> 태그 하위에 실제 사이트 html이비어져서 옵니다.
- 미해결파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)
네이버 웹툰을 활용한 BeautifulSoup 강좌에서 인터페이스가 달라졌습나다.
웹 크롤링을 하려 하니까 인터페이스가 완전히 갈아엎어져서 이거 뭐 어떻게 해야할지를 모르겠네요
- 미해결파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)
구글 무비 강좌에서요
movies=soup.find_all("div",attrs={'class':'???}) title=movie.find('span',attrs={'class':'???'}).get_text()attrs 값을 못찾겠습니다.
- 미해결파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)
네이버 IT뉴스 화면 requets.get 에러가 발생합니다ㅜ
네이버 IT 뉴스 링크를 그냥 크롬이나 사파리를 통해서 접속하면 정상적으로 잘 접속이 됩니다.하지만 requests.get을 사용하면 에러가 발생해 파싱을 정상적으로 하기 힘든 상황입니다.ㅠ셀레니움을 사용하던지 다른 뉴스 페이지를 사용해야할거같습니다.저의 경우는 구글뉴스를 파싱 했습니다.좋은 강의 해주셔서 감사합니다.! import re import requests from bs4 import BeautifulSoup weather_url = "https://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&query=%EC%84%9C%EC%9A%B8+%EB%82%A0%EC%94%A8&oquery=%EC%84%9C%EC%9A%B8+%EB%82%A0%EC%8B%9C&tqi=h%2B4nksprvTVssQv3%2BkdssssstAZ-264690" news_url = "https://www.google.com/search?q=%EA%B5%AC%EA%B8%80%EB%89%B4%EC%8A%A4&rlz=1C5CHFA_enKR979KR979&source=lnms&tbm=nws&sa=X&ved=2ahUKEwio8ZP_jIP9AhXnm1YBHfaRBAUQ_AUoAXoECAEQAw&biw=1057&bih=976&dpr=1" english_url = "https://www.hackers.co.kr/?c=s_eng/eng_contents/I_others_english&keywd=haceng_submain_lnb_eng_I_others_english&logger_kw=haceng_submain_lnb_eng_I_others_english" headers = { "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36", "Accept-Language":"ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7" } def create_soup(url): res = requests.get(url, headers=headers) res.raise_for_status() return BeautifulSoup(res.text, "lxml") def get_weather_info(): soup = create_soup(weather_url) current_temp = soup.find("div", attrs={"class": "temperature_text"}).get_text().strip().split()[-1][2:] compare = soup.find("p", attrs={"class": "summary"}).get_text() summary_list = soup.find("dl", attrs={"class": "summary_list"}).get_text().strip() dust = soup.find_all("li", attrs={"class": "item_today level1"})[0].get_text().strip() micro_dust = soup.find_all("li", attrs={"class": "item_today level1"})[1].get_text().strip() uv = soup.find("li", attrs={"class": "item_today level2"}).get_text().strip() sunset = soup.find("li", attrs={"class": "item_today type_sun"}).get_text().strip() rain_ratio = soup.find("li", attrs={"class": "week_item today"}).find_all("span", attrs={"class": "weather_left"}) rain_ratio_am = rain_ratio[0].get_text().strip() rain_ratio_pm = rain_ratio[1].get_text().strip() print("현재 기온 : {}".format(current_temp)) print(compare) print(summary_list) print("{} / {} / {} / {}".format(dust, micro_dust, uv, sunset)) print("강수 확률 : {} / {}\n".format(rain_ratio_am, rain_ratio_pm)) def get_news_headline(): soup = create_soup(news_url) headlines = soup.find_all("div", attrs={"class": "mCBkyc ynAwRc MBeuO nDgy9d"}, limit=6) urls = soup.find_all("a", attrs={"class": "WlydOe"}, limit=6) for idx, headline in enumerate(headlines): print(headline.get_text()) print(urls[idx]["href"] + "\n") def get_eng_sentence(): soup = create_soup(english_url) expression = soup.find_all("b", attrs={"class": "conv_txtTitle"}) sentences = soup.find_all("div", attrs={"id": re.compile("conv_kor_t\d*")}) print("\n< 오늘의 영어 회화 >") print("한글 표현") print("* " + expression[0].get_text()) for sentence in sentences[0:len(sentences)//2]: print(sentence.get_text().strip()) print("\n영어 표현") print("* " + expression[1].get_text()) for sentence in sentences[len(sentences) // 2:]: print(sentence.get_text().strip()) def main(): get_weather_info() get_news_headline() get_eng_sentence() if __name__ == "__main__": main()
- 미해결파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)
23년 2월 7일, 다음 부동산 화면이 다름
23년 2월 7일 현재, 강의해주신 다음부동산의 화면이 상이해 네이버 부동산을 이용해서 비슷하게 따라해봤습니다.import requests from bs4 import BeautifulSoup url = "https://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&query=%EC%86%A1%ED%8C%8C+%ED%97%AC%EB%A6%AC%EC%98%A4%EC%8B%9C%ED%8B%B0+%EB%A7%A4%EB%AC%BC&oquery=%EC%86%A1%ED%8C%8C+%ED%97%AC%EB%A6%AC%EC%98%A4%EC%8B%9C%ED%8B%B0+%EB%A7%A4%EB%A7%A4&tqi=h%2B4thwprvmZss6uUL7ossssstOZ-299895" res = requests.get(url) res.raise_for_status() soup = BeautifulSoup(res.text, "lxml") houses = soup.find_all("tr", attrs={"class": {"_land_tr_row"}}) for num, house in enumerate(houses): info = house.get_text().split() print(f"=========={num+1}번 매물==========") print(f"매매 방식 : {info[0]}") print(f"매물 위치 : {info[1]}") print(f"매물 이름 : {info[2]}") print(f"동 : {info[3][:4]}") print(f"거래 부동산 : {info[3][4:]}") print(f"면적 : {info[4]}") print(f"가격 : {info[5]} 만원") print(f"층 : {info[-2]}")
- 미해결파이썬 무료 강의 (활용편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
- 미해결파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)
bs4 활용 2-1 질문합니다.
코드 실행시 정보가 오지 않고 반응이 없습니다!
- 미해결파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)
csv파일 깨짐
open()메서드에 encoding="utf-8-sig" 써줘도 엑셀에서 한글이 깨지길래 encoding="cp949" 또는 "Euc-KR"로 바꿔줬더니 엑셀에서는 정상적으로 작동하는데 vscode에서 바로 csv파일을 보면����� 이런식으로 깨지네요. 엑셀프로그램에서와 csv파일에서 둘다 정상적으로 출력되는 방법은 없을까요?
- 미해결파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)
url 에러? (\UXXXXXXXX escape)
안녕하세요 선생님 쿠팡 url를 가져오는 과정에서 문제가 생긴 것 같습니다.SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape이 에러가 자꾸 뜨면서 실행이 안되는데요ㅠㅠ 역슬래시가 아니고 슬래시가 사용된 건데 왜 뜨는지 정말 모르겠네요...ㅠㅠ구글링해도 역슬러시를 두 개 써봐라, raw string 설정을 해봐라 등등이 나오는데 이 url과는 전혀 상관없는거 같아서요혹시 아신다면 답변 부탁드립니다! 아래는 제 코드입니다.import requests from bs4 import BeautifulSoup url = 'https://www.coupang.com/np/search?q=%EB%85%B8%ED%8A%B8%EB%B6%81&channel=user&component=&eventCategory=SRP&trcid=&traid=&sorter=scoreDesc&minPrice=&maxPrice=&priceRange=&filterType=&listSize=36&filter=&isPriceRange=false&brand=&offerCondition=&rating=0&page=2&rocketAll=false&searchIndexingToken=1=6&backgroundColor=' res = requests.get(url) res.raise_for_status() soup = BeautifulSoup(res.text, 'lxml') print(res.text)
- 미해결파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)
네이버 쇼핑으로 하면 왜 결과가 안 뜰까요?
이렇게 하면 왜 print들이 다 빈 리스트로 뜨나요? 격자형으로 하면 잘 되던데...import requests import re from bs4 import BeautifulSoup url = "https://search.shopping.naver.com/search/all?frm=NVSCPRO&origQuery=%EA%B3%B1%EC%B0%BD&pagingIndex=1&pagingSize=40&productSet=total&query=%EA%B3%B1%EC%B0%BD&sort=rel×tamp=&viewType=thumb" res = requests.get(url) res.raise_for_status() soup = BeautifulSoup(res.text, "lxml") # 네이버쇼핑 리스트형 items = soup.find_all("li", attrs={"class":re.compile("^basicList_item__0T9JD")}) title = soup.find_all("div", attrs={"class":re.compile("^basicList_title__VfX3c")}) print(items) print(title)
- 미해결파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)
쿠팡대신 네이버 쇼핑에서하는데, 5개 아이템만 나옵니다.
네이버 url 로 진행하는데 페이지 전체 아이템이 아니라, 5개 아이템만 나옵니다. 왜 그럴까요?
- 미해결파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)
쿠팡 requests에 오류가 생기네요
res = requests.get(url , headers = '...') 위처럼 똑같이 하더라도 다른 사이트는 값이 정상적으로 넘어와지는데 쿠팡사이트만 제 주소가 ban당한듯이 값이 안넘어오고 무한로딩중입니다.
- 미해결파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)
URL 문제
URL에 있는 Page 정보를 이용해서 여러 Page에 걸쳐진 정보를 스크래핑 하는 것으로 알고 있습니다. 그런데 일부 사이트에서는 Page를 옮겨도 URL이 전혀 변경되지 않고, 고정으로 있었습니다. 이런 경우엔 어떻게 해결하나요? 개발자 도구에 페이지 정보가 들어있는 URL 정보가 따로 있는지요?
- 미해결파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)
request 설치
pip install requests 후에 import requests를 하려고 했는데 계속 ModuleNotFoundError: No Module named 'requsts'가 뜹니다ㅜㅜ 이럴땐 어떻게 해야하나용
- 미해결파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)
from selenium import webdriver ?
from selenium import webdriver 으로는 수행 못하나요?. 이전 강의에서는 'from selsenium import webdriver'로 시작했었는데 이 강의에서는 import requsets from bs4 import BeautifulSoup로 시작해서요~ 차이점을 알고 싶습니다.
- 미해결파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)
네이버웹툰 랭크가 안불러져요...;;
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 네이버 웹툰 rank01이 아예 안불러져요. 그래서 하단 속성 a 값도 안불러지고요.
- 미해결파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)
안녕하세요 에러문의드려요
안녕하세요 링크를 출력할려고하는데요 아래와같이 에러가 납니다 link = item.find("a",attrs={"class":"search-product-link"})['href'] print(link['href']) if float(별점)>=4.5 and int(인기도)>=150: print('컴퓨터이름',name) print('가격',price) print('별점',별점) print('댓글수',인기도) print('{}').format("https://www.coupang.com"+link) print('-'*100) link = item.find("a",attrs={"class":"search-product-link"})['href']<----- href 리스트를 넣으면아래와같이 에러가 납니다 TypeError: 'NoneType' object is not subscriptable 감사합니다