묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
집합 set 값 출력 순서
data_set = {'apple', 'dell', 'samsung', 'lg'}if 'apple' in data_set: print(data_set)출력 시 {'lg', 'apple', 'samsung', 'dell'}이렇게 순서가 뒤섞여 나옵니다.왜 그런걸까요?
-
미해결[2024 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
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을 주소창에 넣으시면 크롬드라이버를 다운 받으실 수 있습니다. 크롬과 셀레니움의 경우 계속해서 버전이 자동적으로 업되는 경우가 많아,바로 전에 되던 코드가 실행이 되지 않는 경우도 있으니 버전들을 잘 확인하셔야 해요.
-
미해결[2024 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
어떤 경우에 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 사용하면 편한데 로직내에서도 가능하긴 하다.
-
미해결내 업무를 대신 할 파이썬(Python) 웹크롤링 & 자동화 (feat. 주식, 부동산 데이터 / 인스타그램)
일별 시세 데이터 상승/하락 \t\n해결법
사진과 같이 등락률에 상승 \n\t\t\ 이런 결과값이 나오는데 왜이런가요?
-
미해결[2024 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
크롤링을 할 수 있는 사이트와 할 수 없는 사이트를 한번에 구별할 수 있는 방법이 있나요?
상담을 진행할 때, 작업이 일단 가능한지 확인을 해야하는데 크롤링을 할 수 있는 사이트와 할 수 없는 사이트를 한번에 구별할 수 있는 방법이나 꿀팁이 있나요? (어떤 오류를 갖고 캡차가 뜨는지 궁금합니다.)
-
미해결IT 보안 자동화 업무를 위한 파이썬 프로그램 개발 및 활용
파일이 이진이거나 지원되지 않는 텍스트 인코딩을 사용하므로 표시되지 않음
라이브러리 다운 받고 강의에 나온 코드 똑같이 작성하여 실행했는데 계속 이 오류 뜨네요 ㅠㅠpi
-
미해결Python Streamlit을 활용한 대시보드 만들기 (feat. 빅데이터 분석기사 실기 준비)
1) GCP내에서 SSH 통해 깃헙과 연결시 main.py 파일이 연동 2) Powershell Conda 설정
안녕하세요 선생님생각했던것보다 훨씬 다양한 컨텐츠를 배우다보니 정말 좋은것 같습니다. 다만 세팅 부분에서... 강의에서 진행된 부분대로 동일하게 따라해보았는데 일부 활성화가 안되는 듯하여 문의 드립니다. [강의명 : Github Actions, Python Script 예제]gcp ssh와 깃헙 레포지토리 연동 관련해서...main.py 파일 변경 실습 진행중인데 캡쳐 상태의 에러와 같이 에러가 뜨고 main.py 파일을 읽었을때도 아무런 내용이 읽히지 않아서 혹시 실습중 잘못한 부분이 있나 문의드립니다."error: The following untracked working tree files would be overwritten by merge:main.pyPlease move or remove them before you merge." [강의명 : Miniconda 시스템 환경설정, Windows11]miniconda 설치후 Powershell에서 "Get-ExecutionPolicy" Unrestricted 로 변경 후 conda activate / conda activate base 명령후 (base)로 변하지 않아서 그 다음 강의 실습인 VSCODE 내 Powershell에서 conda 가 활성화 되지 않는데 혹시 놓친 부분이 없나 궁금합니다.
-
미해결[2024 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
헤더추가 해도 서버 거부
서버가 거부가 되어서 헤더추가까지 했는데도... 여전히 서버 거부인 듯하네요.. 강사님 그대로 따라 했는데.. 왜 이렇죠.ㅠㅠ import requests from bs4 import BeautifulSoup import pandas as pd # 파라미터 종류가 많은 경우 꿀팁 param = { 'isDetailSearch': 'N', 'searchGubun': 'true', 'viewYn': 'OP', 'strQuery': '패션 인공지능', 'order': '/DESC', 'onHanja': 'false', 'strSort': 'RANK', 'iStartCount': 0, 'fsearchMethod': 'search', 'sflag': 1, 'isFDetailSearch': 'N', 'pageNumber': 1, 'icate': 're_a_kor', 'colName': 're_a_kor', 'pageScale': 100, 'isTab': 'Y', 'query': '패션 인공지능', } reponse = requests.get('https://www.riss.kr/search/Search.do',params=param) html = reponse.text soup = BeautifulSoup(html, 'html.parser') articles = soup.select('.srchResultListW > ul > li') # 헤더가 필요한 경우(서버가 막힌 경우) header = { 'User-Agent' : 'Mozilla/5.0', 'Referer' : 'https://www.riss.kr/search/Search.do?isDetailSearch=N&searchGubun=true&viewYn=OP&queryText=&strQuery=%ED%8C%A8%EC%85%98+%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5&exQuery=&exQueryText=&order=%2FDESC&onHanja=false&strSort=RANK&p_year1=&p_year2=&iStartCount=0&orderBy=&mat_type=&mat_subtype=&fulltext_kind=&t_gubun=&learning_type=&ccl_code=&inside_outside=&fric_yn=&db_type=&image_yn=&gubun=&kdc=&ttsUseYn=&l_sub_code=&fsearchMethod=search&sflag=1&isFDetailSearch=N&pageNumber=1&resultKeyword=&fsearchSort=&fsearchOrder=&limiterList=&limiterListText=&facetList=&facetListText=&fsearchDB=&icate=re_a_kor&colName=re_a_kor&pageScale=100&isTab=Y®nm=&dorg_storage=&language=&language_code=&clickKeyword=&relationKeyword=&query=%ED%8C%A8%EC%85%98+%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5', } for article in articles[:1]: title = article.select_one('.title > a').text link = 'https://www.riss.kr' + article.select_one('.title > a').attrs['href'] # 상세 페이지로 요청(페이지 안에 들어가야 내용이 있는 경우) response = requests.get(link, headers=header)# 여기서 헤더 추가 html = reponse.text soup = BeautifulSoup(html, 'html.parser') print(soup) press = soup.select_one('.infoDetailL > ul > li:nth-of-type(2) > div').text #print(title,link,press)
-
미해결[2024 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
프레임 전환
안녕하세요 강사님! 강의 너무 잘 만들어주셔서 감사합니다. 강사님과 같은 코드를 사용하여 iframe을 전환했는데 저는 자꾸 NoSuchElementException 오류가 뜨네요 위 부분 코드도 그대로 따라했는데 같이 올려봅니다! #셀레니움 기본 템플릿 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import time import pyperclip user_id = "제 아이디" user_pw = "제 비밀번호" #크롬드라이버 생성 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.CONTROL,'v') # time.sleep(1) #패스워드 입력 pw = driver.find_element(By.CSS_SELECTOR, '#pw') pyperclip.copy(user_pw) pw.send_keys(Keys.CONTROL,'v') # time.sleep(1) #로그인버튼 클릭 driver.find_element(By.CSS_SELECTOR,'#log\\.login').click() #드롭다운 메뉴 클릭 driver.find_element(By.CSS_SELECTOR,'#account > div.MyView-module__my_menu___eF24q > div > div > ul > li:nth-child(1) > a > span.MyView-module__item_text___VTQQM').click() #메일함버튼 클릭 driver.find_element(By.CSS_SELECTOR,'#account > div.MyView-module__layer_menu_service___NqMyX > div.MyView-module__service_sub___wix9p > div.MyView-module__sub_left___AIWHR > a').click() #현재 열려있는 창 driver.window_handles #새창으로 전환 driver.switch_to.window(driver.window_handles[1]) #메일쓰기버튼 클릭 driver.find_element(By.CSS_SELECTOR,'#root > div > nav > div > div.lnb_header > div.lnb_task > a.item.button_write').click() #받는사람 recieve = driver.find_element(By.CSS_SELECTOR, '#recipient_input_element') recieve.send_keys('kiyoung3159@naver.com') title = driver.find_element(By.CSS_SELECTOR,'#subject_title') title.send_keys('음하하 아주 잘했어') #프레임전환 iframe = driver.find_element(By.CSS_SELECTOR,"#content > div.contents_area > div > div.editor_area > div > div.editor_body > iframe") driver.switch_to.frame(iframe) 에러 코드는 아래와 같이 뜨네요! NoSuchElementException Traceback (most recent call last) Cell In[61], line 2 1 #프레임전환 ----> 2 iframe = driver.find_element(By.CSS_SELECTOR,"#content > div.contents_area > div > div.editor_area > div > div.editor_body > iframe") 3 driver.switch_to.frame(iframe) File ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\selenium\webdriver\remote\webdriver.py:741, in WebDriver.find_element(self, by, value) 738 by = By.CSS_SELECTOR 739 value = f'[name="{value}"]' --> 741 return self.execute(Command.FIND_ELEMENT, {"using": by, "value": value})["value"] File ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\selenium\webdriver\remote\webdriver.py:347, in WebDriver.execute(self, driver_command, params) 345 response = self.command_executor.execute(driver_command, params) 346 if response: --> 347 self.error_handler.check_response(response) 348 response["value"] = self._unwrap_value(response.get("value", None)) 349 return response File ~\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\selenium\webdriver\remote\errorhandler.py:229, in ErrorHandler.check_response(self, response) 227 alert_text = value["alert"].get("text") 228 raise exception_class(message, screen, stacktrace, alert_text) # type: ignore[call-arg] # mypy is not smart enough here --> 229 raise exception_class(message, screen, stacktrace) NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"#content > div.contents_area > div > div.editor_area > div > div.editor_body > iframe"} ... (No symbol) [0x00007FF7544255E0] (No symbol) [0x00007FF754414A7F] BaseThreadInitThunk [0x00007FFF14F8257D+29] RtlUserThreadStart [0x00007FFF16E4AF28+40] 무엇이 잘못되었는지 1시간 고민하다가 질문 올려봅니다!!
-
미해결[2024 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
RISS논문크롤링하고 있는데 서버 거부..
서버 거부가 되어서 헤더추가까지 했는데도... 여전히 서버 거부인 듯하네요.. 강사님 그대로 따라 했는데.. 왜 이렇죠.ㅠㅠ import requests from bs4 import BeautifulSoup import pandas as pd # 파라미터 종류가 많은 경우 꿀팁 param = { 'isDetailSearch': 'N', 'searchGubun': 'true', 'viewYn': 'OP', 'strQuery': '패션 인공지능', 'order': '/DESC', 'onHanja': 'false', 'strSort': 'RANK', 'iStartCount': 0, 'fsearchMethod': 'search', 'sflag': 1, 'isFDetailSearch': 'N', 'pageNumber': 1, 'icate': 're_a_kor', 'colName': 're_a_kor', 'pageScale': 100, 'isTab': 'Y', 'query': '패션 인공지능', } reponse = requests.get('https://www.riss.kr/search/Search.do',params=param) html = reponse.text soup = BeautifulSoup(html, 'html.parser') articles = soup.select('.srchResultListW > ul > li') # 헤더가 필요한 경우(서버가 막힌 경우) header = { 'User-Agent' : 'Mozilla/5.0', 'Referer' : 'https://www.riss.kr/search/Search.do?isDetailSearch=N&searchGubun=true&viewYn=OP&queryText=&strQuery=%ED%8C%A8%EC%85%98+%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5&exQuery=&exQueryText=&order=%2FDESC&onHanja=false&strSort=RANK&p_year1=&p_year2=&iStartCount=0&orderBy=&mat_type=&mat_subtype=&fulltext_kind=&t_gubun=&learning_type=&ccl_code=&inside_outside=&fric_yn=&db_type=&image_yn=&gubun=&kdc=&ttsUseYn=&l_sub_code=&fsearchMethod=search&sflag=1&isFDetailSearch=N&pageNumber=1&resultKeyword=&fsearchSort=&fsearchOrder=&limiterList=&limiterListText=&facetList=&facetListText=&fsearchDB=&icate=re_a_kor&colName=re_a_kor&pageScale=100&isTab=Y®nm=&dorg_storage=&language=&language_code=&clickKeyword=&relationKeyword=&query=%ED%8C%A8%EC%85%98+%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5', } for article in articles[:1]: title = article.select_one('.title > a').text link = 'https://www.riss.kr' + article.select_one('.title > a').attrs['href'] # 상세 페이지로 요청(페이지 안에 들어가야 내용이 있는 경우) response = requests.get(link, headers=header)# 여기서 헤더 추가 html = reponse.text soup = BeautifulSoup(html, 'html.parser') print(soup) press = soup.select_one('.infoDetailL > ul > li:nth-of-type(2) > div').text #print(title,link,press)
-
미해결파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
연습문제 2번 질문 있습니다!
연습문제 2번에서 아래 코드로 했을 때 안되는데 이유가 뭔지 모르겠습니다! 어차피 1개라서 반복문을 쓰지 않아도 될까 했는데 안되네요..import requests from bs4 import BeautifulSoup url = 'https://davelee-fun.github.io/' res = requests.get(url) soup = BeautifulSoup(res.content, 'html.parser') items=soup.select('.sitetitle') print(items.get_text())(+)print(item.get_text()) 했을때는 잘 추출되는데 item은 선언한적이 없는데 왜 되는걸까요~?
-
미해결파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
[진짜 쉬운 책 추천] 크롤링부터 너무 어렵네여
정말 쉽게 볼 책 추천해주실 수 있나요?? 강의 듣고 책으로도 보면 조금 더 이해가 쉬울까 하구요
-
미해결파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)
2024.08.28 수요일 기준 날씨 정보 가져오기 소스코드입니다 (참고하세요 : ) )
개인적으로 만든거다 보니, 부족한 면이 많습니다. 헷갈리시는 분들이나 조금 어렵다고 느껴지는 분들을 위해서 공유해드려요 !import requests from bs4 import BeautifulSoup ''' [오늘의 날씨] 흐림, 어제보다 00도 높아요 현재 00도 (최저 00도 / 최고 00도) 오전 강수확률 00% / 오후 강수확률 00% 미세먼지 좋음 초미세먼지 좋음 ''' def scrape_weather(): print("[오늘의 날씨]") url = "https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=%EB%82%A0%EC%94%A8" res = requests.get(url) res.raise_for_status() soup = BeautifulSoup(res.text, "lxml") cast = soup.find("p", class_="summary").get_text() curr_temp = soup.find("div", class_="temperature_text").get_text().replace("현재 온도", "") # 현재온도 targets = soup.find_all("li", class_="week_item today") min_temp = targets[0].find("span", class_="lowest").get_text() # 최저 온도 max_temp = targets[0].find("span", class_="highest").get_text() # 최고 온도 morning_and_afternoon = targets[0].find_all("span", class_="weather_left") morning_rain_rate = morning_and_afternoon[0].get_text() # 오전 강수확률 afternoon_rain_rate = morning_and_afternoon[1].get_text() # 오후 강수확률 dust_list = soup.find_all("li", class_="item_today") pm10 = dust_list[0].get_text() # 미세먼지 pm25 = dust_list[1].get_text() # 초미세먼지 # 출력 print(cast) print(f"현재 {curr_temp} ({min_temp} / {max_temp})") print(f"강수확률 {morning_rain_rate.strip()} / {afternoon_rain_rate.strip()}") print() print(f"{pm10.strip()}") print(f"{pm25.strip()}") print() if __name__ == "__main__": scrape_weather() # 오늘의 날씨 정보 가져오기
-
미해결파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)
24년, 부동산 퀴즈 코드입니다. 참고하세요!!
from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from webdriver_manager.chrome import ChromeDriverManager from bs4 import BeautifulSoup # Setup Chrome options options = webdriver.ChromeOptions() options.add_experimental_option("detach", True) options.add_argument("--user-agent=''") # Initialize the browser browser = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options) # 옵션 추가 - 웹페이지 최대화 browser.maximize_window() # 원하는 웹사이트로 이동 url = "https://realty.daum.net/home/apt/danjis/38487" browser.get(url) # 모든 요소가 로드될 때까지 대기 (최대 10초) WebDriverWait(browser, 10).until(EC.presence_of_all_elements_located((By.CLASS_NAME, "css-1dbjc4n"))) # 데이터 뽑기 시작 soup = BeautifulSoup(browser.page_source, "lxml") # 매물 정보 가져오기 targets = soup.find_all("div", class_="css-1dbjc4n r-1awozwy r-s4x47v r-18u37iz r-17s6mgv r-1m04atk") for idx, target in enumerate(targets): # 가격과 거래 방법 추출 price = target.find("div", class_="css-1563yu1 r-aw03qq r-1wbh5a2 r-1w6e6rj r-159m18f r-1b43r93 r-b88u0q r-rjixqe r-13hce6t r-1ff274t r-13wfysu r-q42fyq r-1ad0z5i") if price: plate = price.get_text().split(" ") use = plate[0] final_price = '' for index in range(1, len(plate)): final_price += plate[index] else: continue # 면적과 층수 정보 추출 area_and_floors = target.find_all("div", class_="css-1563yu1 r-1dnsj32 r-1wbh5a2 r-1w6e6rj r-159m18f r-n6v787 r-majxgm r-14yzgew r-fdjqy7 r-13wfysu r-q42fyq r-1ad0z5i") if len(area_and_floors) >= 2: area = area_and_floors[0].get_text() floor = area_and_floors[1].get_text()[-3:] else: area = "N/A" floor = "N/A" print("=" * 10 + " 매물 {0} ".format(idx) + "=" * 10) print(f"거래 : {use}") print(f"가격 : {final_price}".strip()) print(f"면적 : {area}".strip()) print(f"층 : {floor}".strip()) print() browser.quit()
-
미해결파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)
git hub에 push할때 user-agent가 노출되도 상관이 없나요 ?
git hub에 저의 user-agent가 노출되어도 상관이 없을까요 ? git hub에 소스코드를 push하면서 진행을 하고 있는데 괜찮을까요 ?
-
미해결파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
세팅
안녕하세요. 강의 그대로 따라해도 세팅부터 막히는데 어떻게 하나요? 파일을 만들고 나서 셀에 입력하는 화면이 안나오는데요. 강의에서 python3으로 들어가면 강의에서는 셀을 입력할 수 있도록 나오는데 저는 python3이라는게 뜨지를 않습니다.