himy799
2022.03.28
@himy799님이 새 포스트를 작성했습니다.
파이썬 크롤링편 15일차
# 라이브러리 import from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.common.by import By import time chrome_driver = ChromeDriverManager().install() service = Service(chrome_driver) driver = webdriver.Chrome(service=service) # 인터파크 전시 접속 inter_url = 'https://ticket.interpark.com/LesIndex.asp' driver.get(inter_url) # 시간적 여유 원하는 만큼 time.sleep(1) #랭킹 메뉴 클릭 xpath = "/html/body/div[8]/div/div[4]/div[1]/dl/dd[1]/a" rank = driver.find_element(By.XPATH, xpath) rank.click() time.sleep(2) #정적 크롤링으로 주간 전시 top5순위 가져오기 import requests import bs4 URL = 'http://ticket.interpark.com/TPGoodsList.asp?Ca=Eve&SubCa=Eve_O' raw = requests.get(URL) html = bs4.BeautifulSoup(raw.text, 'html.parser') target = html.find('div', {'class' : 'stit'}) arts = target.find_all("td", {'class' : 'RKtxt'}) print("<주간전시랭킹 top5>") for art in arts[:5]: print("전시상품 : ", art.text.strip()) #strip() 공백 제거위해 이용 #월간 전시 랭킹 버튼 클릭 xpath1 = "/html/body/table/tbody/tr[2]/td[3]/div/div/div[1]/div[1]/a[3]/img" monthr = driver.find_element(By.XPATH, xpath1) monthr.click() time.sleep(2) #정적 크롤링으로 top5순위 가져오기 URL1 = 'http://ticket.interpark.com/TPGoodsList.asp?Ca=Eve&SubCa=Eve_O&Sort=3' raw1 = requests.get(URL1) html = bs4.BeautifulSoup(raw1.text, 'html.parser') target = html.find('div', {'class' : 'stit'}) arts = target.find_all("td", {'class' : 'RKtxt'}) print("\n<월간전시랭킹 top5>") for art in arts[:5]: print("전시상품 : ", art.text.strip()) #strip() 공백 제거위해 이용
himy799
2022.03.25
@himy799님이 새 포스트를 작성했습니다.
파이썬 크롤링편 14일차
📖 Python Code # Library 가져오기 from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.common.by import By import time chrome_driver = ChromeDriverManager().install() service = Service(chrome_driver) driver = webdriver.Chrome(service=service) # 네이버 로그인 페이지 접속 login_url = "https://nid.naver.com/nidlogin.login" driver.get(login_url) time.sleep(2) # 아이디, 비밀번호 변수에 저장 my_id = "comu" my_pw = "12345" # 아이디, 비밀번호 입력 driver.execute_script("document.getElementsByName('id')[0].value = '" + my_id + "'") driver.execute_script("document.getElementsByName('pw')[0].value = '" + my_pw + "'") time.sleep(1) # 로그인 버튼 클릭 button = driver.find_element(By.ID, "log.login") button.click() time.sleep(1) # 코뮤니티 접속 comu_url = "https://cafe.naver.com/codeuniv" driver.get(comu_url) time.sleep(1) # '신규회원게시판' 클릭 menu = driver.find_element(By.ID, "menuLink90") menu.click() time.sleep(1) # 프레임 전환 # driver.switch_to.frame({frame name}) # 프레임 확인: 개발자 도구 → iframe 검색 driver.switch_to.frame("cafe_main") time.sleep(1) xpath = "/html/body/div[1]/div/div[4]/table/tbody/tr[1]/td[1]/div[3]/div/a" # 첫번째 글 클릭 writing = driver.find_element(By.XPATH, xpath) writing.click() time.sleep(1) # 글 내용 출력 content = driver.find_element(By.CSS_SELECTOR, "div.se-component-content").text print(content) driver.close()
himy799
2022.03.25
@himy799님이 새 포스트를 작성했습니다.
파이썬 크롤링편 13일차
첫 번째 Source Code 영단어 번역 여러 번 실행 번역 결과를 모두 'my_papago.csv' 파일에 저장 # 필요한 library 가져오기 from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.common.by import By import time import csv # 파파고 웹 페이지 접속 # 자동화된 크롬 창 실행 chrome_driver = ChromeDriverManager().install() service = Service(chrome_driver) driver = webdriver.Chrome(service=service) # 파파고 웹 페이지 접속 papago_url = 'https://papago.naver.com/' driver.get(papago_url) # 시간적 여유 3초 time.sleep(3) # CSV 파일 'my_papago.csv' 생성 # 작성할 'my_papago.csv' 파일을 생성하여 변수 'f'에 저장 f = open('./my_papago.csv', 'w', newline = '', encoding='utf-8-sig') # writer 객체 생성 & 파일의 열 제목 생성 # CSV 파일을 작성하는 객체 변수 'wtr' 생성 wtr = csv.writer(f) # 열 제목 작성 wtr.writerow(['영단어', '번역결과']) # 반복문을 활용하여 번역기 구현 및 CSV 파일에 저장 # 무한 루프 while True: keyword = input("번역할 영단어 입력 (0 입력하면 종료) : ") if keyword == "0": print("번역 종료") break # 영단어 입력, 번역 버튼 클릭 form = driver.find_element(By.CSS_SELECTOR, "textarea#txtSource") form.send_keys(keyword) button = driver.find_element(By.CSS_SELECTOR, "button#btnTranslate") button.click() time.sleep(1) # 번역 결과 저장 output = driver.find_element(By.CSS_SELECTOR, "div#txtTarget").text # my_papago.csv 파일에 [영단어, 번역결과] 작성 wtr.writerow([keyword, output]) # 영단어 입력 칸 초기화 driver.find_element(By.CSS_SELECTOR, "textarea#txtSource").clear() driver.close() f.close() 🔥 두 번째 Source Code 영단어 번역 여러 번 실행 'my_papago.csv' 파일에 있는 영단어 경우, 저장 X 파일에 없는 영단어 경우, 번역 결과 저장 # 라이브러리 import from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.common.by import By import time import csv # 자동화된 크롬 창 실행 chrome_driver = ChromeDriverManager().install() service = Service(chrome_driver) driver = webdriver.Chrome(service=service) # 파파고 웹 페이지 접속 papago_url = 'https://papago.naver.com/' driver.get(papago_url) # 시간적 여유 3초 time.sleep(3) # 읽어올 'my_papago.csv' 파일을 변수 'f'에 저장 f = open('./my_papago.csv', 'r', encoding="utf-8-sig") # CSV 파일의 모든 데이터를 변수 'rdr'에 저장 rdr = csv.reader(f) # 'rdr'의 첫 번째 (열 제목)는 건너뜀 next(rdr) # 딕셔너리 생성 my_dict = {} # 딕셔너리에 영단어와 번역 결과를 모두 저장 for row in rdr: keyword = row[0] korean = row[1] my_dict[keyword] = korean # 파일 닫기 f.close() # 추가 옵션 'a'를 사용하여 파일 다시 열기 f = open('./my_papago.csv', 'a', newline = '', encoding="utf-8-sig") wtr = csv.writer(f) # while문 안에 있는 조건문을 확인해주세요 while True: keyword = input("번역할 영단어 입력 (0 입력하면 종료) : ") if keyword == "0": print("번역 종료") break # 영단어가 'my_dict'의 키 값 중에 있다면, 이 사실을 알려주고 저장되어있던 번역 결과 출력 if keyword in my_dict.keys(): print("이미 번역한 영단어입니다! 뜻은", my_dict[keyword], "입니다.") # 위의 경우에 포함되지 않으면, 딕셔너리와 CSV 파일에 추가 else: driver.find_element(By.CSS_SELECTOR, "textarea#txtSource").send_keys(keyword) driver.find_element(By.CSS_SELECTOR, "button#btnTranslate").click() time.sleep(1) output = driver.find_element(By.CSS_SELECTOR, "div#txtTarget").text # CSV 파일에 행 추가 wtr.writerow([keyword, output]) # 딕셔너리에 추가 my_dict[keyword] = output driver.find_element(By.CSS_SELECTOR, "textarea#txtSource").clear() driver.close() f.close()
himy799
2022.03.21
@himy799님이 새 포스트를 작성했습니다.
파이썬 크롤링 10일차
라이브러리 'selenum' => 동적 크롤링을 위한 라이브러리 => 웹 드라이버(webdriver)를 사용하여 자동화 실현 => 사람이 데이터를 수집하는 방식 그대로 크롤링하는 기계를 만듦 pip install selenium webdriver => 웹 응용 프로그램들의 테스트를 단순화 및 가속화해주는 툴 => 웹 브라우저를 자동으로 조작하기 위해 프로그래밍 언어와 브라우저를 연결하는 매개체 chromdriver => 크롬 브라우저의 웹 드라이버 => 본인이 사용하는 chrome 브라우저의 버전을 확인하여 그에 맞는 웹드라이버 설치 동적 크롤링 맛보기 from selenium import webdriver => 특정 라이브러리(selenium)에서 원하는 메소드/클래스(webdriver)만 불러오겠다는 의미 driver = webdriver.Chrome('./chromdriver') => 웹 드라이버를 로딩하는 코드 => 인자로 받은 드라이버 경로에 존재하는 웹 드라이버를 사용해 자동화된 크롬창을 열 수 있음 driver.get(URL) 시간지연, 자동종료 => selenium은 페이지를 직접 이동하면서 조작하기 때문에 적절한 지연 시간이 필요 => time 라이브러리에서 제공하는 sleep 함수 이용 import time time.sleep(대기시간(초)) => 마지막으로 크롤링 과정이 다 끝나면 크롬창 종료 driver. close()
himy799
2022.03.21
@himy799님이 새 포스트를 작성했습니다.
파이썬 크롤링 9일차
크롤링 9차 관심 있는 키워드 입력, 관련 뉴스 기사 제목 100개 수집하기 url은 한글의 경우 자동으로 인코딩되어 이상한 문자열로 출력됨 -> 검색할 키워드로 넣기 import requests import bs4 URL="https://browse.gmarket.co.kr/search?keyword=%EB%A7%88%EC%8A%A4%ED%81%AC" raw=requests.get(URL) #bs4로 raw.text를 HTML 코드로 변환 html=bs4.BeautifulSoup(raw.text,'html.parser') #HTML 코드에서 해당 태그, 선택자를 찾아 box(변수)에 저장 box=html.find('div',{'class':'section__module-wrap','module-design-id':'15'}) #각 상품 추출 #각 상품에 대한 태그는 <div class="box__item-container"> items=box.find_all('div',{"class":'box__item-container'}) print(len(items)) #상품의 이름, 가격 추출 for item in items[:10]: title=item.find('span',{'class':'text__item'}) #item.find인 이유 - items list 중 n번째 원소 기준 price=item.find('strong',{'class':'text__value'}) print("이름:",title) print("가격:",price) print() 크롤링 기능 추가 입력한 키워드의 상품 정보를 받아오도록 import requests import bs4 #무한 반복 & 0 입력 시 종료 while True: keyword=input("검색을 원하는 키워드를 입력하세요(0입력 시 종료)") if keyword=="0": break #URL="https://browse.gmarket.co.kr/search?keyword=마스크" #URL 수정 URL="https://browse.gmarket.co.kr/search?keyword="+keyword raw=requests.get(URL) html=bs4.BeautifulSoup(raw.text,'html.parser') box=html.find('div',{'class':'section__module-wrap','module-design-id':'15'}) items=box.find_all('div',{"class":'box__item-container}) print"<G마켓의",keyword," 상품 정보>") for item in items[:10]: title=item.find('span',{'class':'text__item}) price=item.find('strong',{'class':text__value'}) print("이름:",title.text) print("가격:",price.text) print() print('\n\n') 최종 코드 import requests from bs4 import BeautifulSoup keyword=input("키워드:") count=0 for page in range(1,11): news_url="https://search.hankyung.com/apps.frm/search.news?query="+keyword+&page=+str(page) raw=requests.get(news_url) soup=BeautifulSoup(raw.text,'html.parser') box=soup.find('ul',{'class':'article'}) all_title=box.find_all('em',{'class':'tit'}) for title in all_title: count+=1 t=title.text print(count,'-',t.strip()) #strip()는 공백 제거