활용3. 웹스크래핑(0825-0829)15 티스토리 test 중 보호되어 있는 글 입니다. 2022. 10. 22. urllib.request 와 requests 1 2 3 4 5 6 7 8 9 10 11 12 # common module import requests import urllib.request # BeautifulSoup from bs4 import BeautifulSoup as bs # Selenium from selenium import webdriver from scrapy.selector import Selector from selenium.webdriver.common.by import By from selenium.common.exceptions import NoSuchElementException cs 1. requests 먼저 requests는 데이터를 전송할 때 딕셔너리 형태로 보낸다. 만약 존재하지 않는 페이지를 요청해도, 500, .. 활용3. 웹스크래핑(0825-0829)/urllib 2022. 9. 10. 스크래핑: urllib 필수 기초 파이썬에서는 웹과 관련된 데이터를 쉽게 다룰 수 있도록 urllib모듈을 제공한다. python2 버전에서의 urlparse가 python3에서는 urllib.parse로 변경됐다. docs.python.org/3/library/urllib.html#module-urllib urllib — URL handling modules — Python 3.9.1 documentation docs.python.org urllib.request urllib.request 모듈은 다이제스트 인증, 리디렉션, 쿠키등과 같은 URL이나 HTTP를 여는 데 도움이 되는 함수와 클래스를 정의한다. 즉, urlib.request를 사용하면 간단하게 웹 페이지 요청 및 데이터를 가져오는 것이 가능하다. 중요내용 위주로 정리해 보.. 활용3. 웹스크래핑(0825-0829)/urllib 2022. 9. 10. 스크래핑: urllib, BeautifulSoup 뷰티풀 수프는 크롤링 프로젝트에서 scrapy와 같이 가장 많이 사용되는 도구중 하나다. HTML 문서에서 필요한 부분만 출력해서, 크롤링의 속도를 올려주는 모듈이다. # BeautifulSoup 추가하기 1 2 3 4 5 6 7 from bs4 import BeautifulSoup as bs from urllib import request url = 'https://www.example.com' html = request.urlopen(url) soup = bs(html, 'html.parser') Colored by Color Scripter cs # 정갈하게 출력하기 prettyfy() 사용 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 .. 활용3. 웹스크래핑(0825-0829)/urllib 2022. 9. 8. 웹스크래핑3 셀레니움 2 구글무비 휴... 꾸역꾸역 여기까지 왔다. ㅠㅠ 와웃... 결국, 이게 거의 결정판인데, 아쉽게도 페이지가 업데이트돼서 제대로 실습을 못했다. 하지만, 이제 웹상에 있는 다른 크롤 예제들을 봐도, 이해하고 사용할 수 있겠다. 주로 표형태를 추출, 재가공(db 저장포함) 하고 싶으니, 다른 예제들로 더 공부해가야겠다. 나도코딩님 리스펙~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 후기 : 하루이틀이면 끝날 줄 알았는데, 실습하는데 하루 3-4시간씩 약 일주일 걸렸다. 흑. 삽질 2020 강의라서, 2022 년엔 ui가 태블릿 친화적으로 바껴버렸다. 빨리 했어야해.. 흑 1독 (포인트만 기록하며, 가급적 끊지 않고 보기) 보면서, 따라치면서 하니 ... 진도도 안나가고, 너무 힘들었다 ㅠ 먼저 1회 시청을 똑바.. 활용3. 웹스크래핑(0825-0829)/selenium 2022. 8. 29. 웹스크래핑3 셀레니움 1 네이버 항공권 WebDriverWait(browser, 30).until(EC.presence_of_element_located((By.XPATH, xpath_str))) 삽질 기존 강의로 꾸역꾸역 따라하다가, 변화된 것이 많아서 울고 있다가, 2022버전으로 업데이트 강좌가 있어서 진행할 수 있었다. 하기 예제에서 xpath 추출 시, find_element"s" 로 배열로 추출할 경우, 배열값이 [0] 이 아닌, [1]도 있을 수 있으므로, xpath 절대경로를 사용하는 것이 좋겠다. 단, 예제대로 따라하면, xpath 경로 추출시, text 포함, 일치의 조건 사용방법을 익힐 수 있었다. 나도코딩님은 강의 천재야... 난이도가 분명히 올라갔는데, 슬쩍슬쩍 할 수 있을만큼 올라간다. +_+ 키포인트 클릭 후, 로딩되기 전까지 기다리기 find_element(By.XPATH, '//button[text() = "가는 날"]') # (By.XPATH, '//button[ .. 활용3. 웹스크래핑(0825-0829)/selenium 2022. 8. 29. 웹스크래핑3 셀레니움 기초: 네이버 로그인 send_keys("키") 이 예제만으로는 네이버에 로그인할 수 없다. 나도코딩님이 고정댓글로 안내해주신 주소를 참조해서 실습만 해봤음. capcha 가 나타나서 제길! 2. 네이버 로그인 import time from selenium import webdriver from selenium.common.by import By from selenium.common.keys import Keys browser = webdriver.Chrome() # "./chromedriver.exe" # 1. 네이버 이동 browser.get("http://naver.com") # 2. 로그인 버튼 클릭 elem = browser.find_element_by_class_name("link_login") elem.click() # 3. id, pw .. 활용3. 웹스크래핑(0825-0829)/selenium 2022. 8. 29. 네이버 웹툰 (urllib: request, request.urlretrieve) # https://foxtrotin.tistory.com/173 파이썬 beautifulsoup로 웹툰 크롤링, 다운로드 하기 *본 글은 공부목적으로만 참고하세요 파이썬 크롤링 시리즈 네이버 웹툰 이미지 크롤링, 저장하기: 현재글 셀레니움으로 웹 게임 자동 매크로 만들기: foxtrotin.tistory.com/179 네이버 실시간 검색어 foxtrotin.tistory.com request.urlopen() request.urlretrieve(url, 저장명) os.chdir("..") # 상위폴더 re.sub() : 태그제거 https://wikidocs.net/4308 from bs4 import BeautifulSoup import urllib.request import os, re #태그 제거 .. 활용3. 웹스크래핑(0825-0829)/기타 2022. 8. 29. 스크래핑 iframe 처리 (네이버 홈: 우측 쇼핑몰) selenium 셀레니움 접속 후, 엘리먼트를 찾아도 안되는 경우들이 있다. 네이버 홈화면 우측에 보이는 쇼핑몰들이 대표적인데, 이럴 때는 iframe 이동처리를 해야함 네이버 쇼핑 https://jaeseokim.dev/Python/python-Selenium%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%9B%B9-%ED%81%AC%EB%A1%A4%EB%A7%81-%EA%B0%84%EB%8B%A8-%EC%82%AC%EC%9A%A9%EB%B2%95-%EB%B0%8F-%EC%98%88%EC%A0%9C/ from selenium import webdriver import time import random # 다운받은 webdriver의 경로설정 driver = webdriver.Firefox(e.. 활용3. 웹스크래핑(0825-0829)/selenium 2022. 8. 29. ★스크래핑 3-1 : 셀레니움 기초 실습 (ver. 4.2 이하) DeprecationWarning: executable_path has been deprecated, please pass in a Service object 오류 해결 앞서 배운 beautifulsoup 으로만 안되는 사이트들이 있어서, (브라우저로 접속해서 로그인이나 클릭 등이 필요한 사이트들) 셀레니움을 학습 무작정 따라하다 발생하는 대표적 오류 (셀레니움 버전 문제) DeprecationWarning: executable_path has been deprecated, please pass in a Service object 오류 해결 pip install selenium==4.2.0 pip install selenium==4.2.0 Selenium 4.x : OS 별 Broswer 버전을 자동 감지하여 Web Driver 설치를 자동으로 할 수 있습니다.Selenium 4.0부터는 OS와 Web Broswer에 맞는 Web Driver를 자동으로 다운로드하고 로딩.. 활용3. 웹스크래핑(0825-0829)/selenium 2022. 8. 28. 스크래핑 2-3 네이버 주식 (csv 모듈 ) 네이버 주식 (테이블->csv 모듈) import csv --> csv.writer(f) , writer.writerow(title) writer.writerow(리스트형데이터) 파일쓰기 : filename = "시가총액1-200.csv" f = open(filename, "w", encoding="utf-8-sig", newline="") writer = csv.writer(f) 엑셀에서 한글 깨질 때, utf-8-sig 로 newline="" 이 없으면, row 마다 빈 줄이 추가됨. 탭 기준으로 split :: title .split('\t") 빈 줄 skip( td colspan="10" 같은..의미없는 줄은 출력X ) --> if len(columns) tbody->find_all("tr") -.. 활용3. 웹스크래핑(0825-0829)/requests 2022. 8. 28. 스크래핑 2-2 다음 영화 이미지 저장( requests ) DAUM 영화. 이미지 저장 페이지 반복 응용 -> in range(2015,2020) http: 없는 url 에 http:// 붙이기 --> if image_url.startswith("//") 추출한 이미지 url 로 다시 접속! --> requests.get(url) 과 raise_for_status() 파일 쓰기(이미지 저장) with open("파일명".format(변수), "wb") as f: f.write(image_res.content) 반복횟수 제한해서, 상위 top 5 만 추출 --> if idx >= 4: break import requests from bs4 import BeautifulSoup # for year in range[2018:2023]: for year in range.. 활용3. 웹스크래핑(0825-0829)/requests 2022. 8. 28. 스크래핑 2-1 쿠팡 (User-Agent 헤더) 쿠팡 실습 헤더옵션에 User-Agent 외 추가 정보 필요. 문제는 헤더옵션만으로도 접속이 안돼서, 거의 하루 순삭하고, 스트레스 이뽜이. 답도 쉽게찾기가 어려웠다. ㅠ ( 이런 문제 하나 발생하면, 하루 순삭 ㅠ ) 이를 제외하면, 접속트러블만 없다면, 쉽지만 뿌듯한 예제 (대형사이트는 접속이 문제긴 하다. ㅠ ) soup.find_all 에서 블록을 선택시, 반복하는 가장 상위 객체를 선택하기. re.compile() 사용 : 이 예시에서는 필수적이지 않음 페이지 반복 --> in range(1,6) enumerate 함수 사용 if 조건문 : 텍스트 포함과 참/거짓 import requests from bs4 import BeautifulSoup import re # headers = { # "A.. 활용3. 웹스크래핑(0825-0829)/requests 2022. 8. 28. 스크래핑 1 : 웹툰 가우스 전자 평균 매우 기초적인 예제지만 재밌었다. 기초 문법에서 평균내는건 아무런 감흥이 없었는데 +_+ 가우스 전자 평점 구하기 import requests from bs4 import BeautifulSoup url = "https://comic.naver.com/webtoon/list.nhn?titleId=675554" res = requests.get(url) res.raise_for_status() soup = BeautifulSoup(res.text, "lxml") # cartoons = soup.find_all("td", attrs={"class":"title"}) # title = cartoons[0].a.get_text() # link = cartoons[0].a["href"] # print(title).. 활용3. 웹스크래핑(0825-0829)/requests 2022. 8. 27. 스크래핑 0. 기초 requests, headers , re, BeautifulSoup HTML, XPath, 정규식 BeautifulSoup4 : 네이버 웹툰, 가우스 전자, 쿠팡, 다음 CSV : 네이버 금융 Selenium 네이버 로그인, 네이버 항공권, 구글무비 Headless 크롬, Wrap Up 웹사이트 접속 후, 전체 text 읽어오기 import requests res = requests.get("http://google.com") res.raise_for_status() print("응답코드 :", res.status_code) #200이면 정상 # print(len(res.text)) # print(res.text) with open("mygoogle.html", "w", encoding="utf8") as f: f.write(res.text) # if res.status.. 활용3. 웹스크래핑(0825-0829)/requests 2022. 8. 25. 이전 1 다음