html = '''
<html><body>
<div id ='potal'>
<h1>포털 목록</h1>
<u1 class = 'items'>
<li><a href='http://www.naver.com'>naver</a></li>
<li><a href='http://www.daum.net'>daum</a></li>
</ul></div></body></html>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, "html.parser")
links = soup.find_all("a")
for a in links :
# attrs : 속성값
# 이름이 href인 속성의 값을 리턴
href = a.attrs["href"] #http://www.naver.com
text = a.string #a 태그의 내용 #daum
print(text,">",href)
# select_one : 선택된 태그 1개
div#potal > h1 : id속성의 값이 potal인 div 태그의
하위태그 중 태그의 이름이 h1 태그 선택
=> 선택자.
# potal : id = 'potal' 태그
> : 하위태그. 자식노드 (바로 하위)
: 하위태그. 자손노드 (하위)
.string : 선택된 태그의 값 (Text노드의 값)
'''
h1 = soup.select_one("div#potal > h1").string
print('h1=',h1)
'''
div#potal : id='potal'인 div 태그
ul.items : class='items'인 ul 태그
'''
li_list = soup.select("div#potal > ul.items > li")
print(type(li_list))
for li in li_list:
print(li)
print("li=",li.string)
# 인터넷에서 데이터 가져오기
from bs4 import BeautifulSoup
import urllib.request as req
url = "https://www.weather.go.kr/weather/forecast/mid-term-rss3.jsp"
res = req.urlopen(url)
# url이 전달해준 데이터
print(res)
soup = BeautifulSoup(res,'html.parser')
title = soup.find('title').string
wf = soup.find('wf').string
print(title)
print(wf)
for w in wf.split("br />"):
print(w)
# "https://www.weather.go.kr/weather/forecast/mid-term-rss3.jsp"
# 내용을 받아서 forecast.xml 파일로 저장하기
import os.path
# forecast.xml 파일이 없으면
if not os.path.exists("forecast.xml") :
req.urlretrieve(url,"forcast") #파일에 저장
# BeautifulSoup 객체를 이용해서 작성된 날짜와 시간 정보
# 출력하기
pubDate = soup.select_one("rss pubDate").string
print(pubDate)
pudDate = soup.find("pubDate")
print(pubDate)
# 모든 location 태그의 하위태그중 city 태그를 조회하기
for location in soup.find_all("location"):
name = location.find("city").string
weather = location.find("wf").string
print(name, weather)
#books.html 파일에 저장된 html 내용 분석
from bs4 import BeautifulSoup
fp = open("books.html")
soup = BeautifulSoup(fp,"html.parser")
#li 태그들 중 4번째 태그의 값 출력
print(soup.select("li")[3].string) #Numbers
print(soup.find_all("li")[3].string) #Numbers
#태그 중 id=nu인 태그의 값 출력
print(soup.select_one('#nu').string)
print(soup.select('#nu')[0].string)
#li 태그 중 id=nu인 태그의 값 출력
print(soup.select_one('li#nu').string)
#ul 태그의 하위 태그인 li 태그 중 id=nu인 태그의 값 출력
print(soup.select_one('ul > li#nu').string)
#id 속성이 bible인 태그의 하위 태그인 li 태그 중 id=nu인 태그의 값
print(soup.select_one('#bible > li#nu').string)
#람다식을 이용하여 출력하기
sel = lambda q : print(soup.select_one(q).string)
sel("#nu")
#li 태그중 4번째 태그의 값을 출력
sel("li:nth-of-type(4)")
#id 속성이 nu인 li태그의 값을 출력
sel("li[id='nu']")
# 네이버에 공시된 환율 정보를 출력하기
from bs4 import BeautifulSoup
import urllib.request as req
url="https://finance.naver.com/marketindex/?tabSel=exchange"
res = req.urlopen(url)
soup = BeautifulSoup(res,"html.parser",from_encoding="euc-kr")
sel = lambda q : soup.select(q)
# class 속성이 head_info div태그 들. 환율, 상승/하락 값, 상승/하락
hlist = sel("div.head_info")
# class 속성이 h_lst인 h3 태그 들. 통화량
htitle = sel("h3.h_lst")
print(htitle)
for tag, title in zip(hlist,htitle):
# 통화명
print(title.select_one("span.blind").string, end='\t')
# 환율 정보
value = tag.select_one("span.value").string
print(value, end=" ")
# 환율 변동값
change = tag.select_one("span.change").string
# 상승, 하락
print(change, end='\t')
blinds = tag.select("span.blind") #상승 하락
b = tag.select("span.blind")[-1].string
print(b, end="*******\n")
# 셀레니움 예제
#pip install selenium
from selenium import webdriver
'''
chromedriver.exe 파일 다운로드
1. https://chromedriver.chromium.org/downloads
2. 크롬의 버전확인하기
크롬 도움말 > 크롬 정보
3. 사용중인 크롬에 가장 가까운 버전의 드라이버 다운받기
운영체제에 맞는 크롬드라이버 다운받기
4. 압축풀기
chromedriver.exe 파일을 복사하기
'''
#크롬 브라우저 제어 기능 객체
driver = webdriver.Chrome("chromedriver")
driver.get("http://python.org")
'''
#top ul.menu li
#top : id 속성값이 top인 태그 선택
ul.menu : #top 하위 ul 태그 중 class='menu'인 태그
li : ul.menu 하위의 li 태그들
'''
menus = driver.find_elements_by_css_selector('#top ul.menu li')
print(type(menus))
pypi = None #pypi 객체값이 없음.
for m in menus :
# m : li 태그의 문자값이 PyPI 태그 선택
if m.text == "PyPI":
pypi = m
print(m.tag_name,m.text)
pypi.click() #프로그램으로 클릭하기.
import time
time.sleep(5) #5초동안 대기.
driver.quit() #크롬 브라우저 닫기.
## 네이버에 로그인 하기
driver = webdriver.Chrome("chromedriver")
driver.get("https://nid.naver.com/nidlogin.login?mode=form&url=https%3A%2F%2Fwww.naver.com")
id = input("네이버 아이디를 입력하세요.")
'''
execute_script : 자바스크립트 함수 사용
getElementsByName : html 페이지에서 name = 'id' 태그 선택
document.getElementsByName('id')[0].value = ...
현재 페이지에서 name='id'인 첫번째 태그 선택
'''
driver.execute_script("document.getElementsByName('id')[0].value='"+id+"'")
pw = input("네이버 비밀번호를 입력하세요 : ")
time.sleep(1)
driver.execute_script("document.getElementsByName('pw')[0].value='"+pw+"'")
tiem.sleep(1)
driver.find_element_by_xpath('//*[@id="log.login"]').click()
# //*[@id="log.login"]
# // : 루트노드. 화면에 처음
# * : 모든태그
# @id : id 속성
# [@id="log.login"] : id = "log.login"인 태그 선택
# : 로그인 버튼 태그 선택됨.
driver.find_element_by_xpath('//*[@id="log.login"]').click()
#다음 페이지에서 이미지를 다운받아 저장하기
from selenium import webdriver
import time
import urllib.request as req
import os
driver = webdriver.Chrome("chromedriver")
driver.get("https://search.daum.net/search?w=img&nil_search=btn&DA=NTB&enc=utf8&q=%EC%9E%A5%EB%AF%B8")
time.sleep(3)
images = driver.find_elements_by_css_selector("#imgList > div > a > img")
img_url = [] #이미지 url 정보를 리스트로 저장하는 있는 리스트.
for image in images:
# image : 이미지태그
# get_attribute('src') : img 태그의 src 속성의 값
# url : https~
url = image.get_attribute('src')
img_url.append(url)
print(img_url)
driver.quit()
img_folder = './img' #이미지를 저장할 폴더 선택.
# isdir : 해당 폴더가 존재?
# 해당 폴더가 없으면 폴더를 새로 생성하는 조건문
if not os.path.isdir(img_folder):
os.mkdir(img_folder) #폴더를 생성해주는 함수
# enumerate : 리스트 값과 인덱스를 조회 (zip)
# index : 리스트의 인덱스
# link : 리스트의 값
for index, link in enumerate(img_url) :
req.urlretrieve(link, f'./img/{index}.jpg')
# 네이버 홈화면을 이미지 파일로 저장하기
from selenium import webdriver
url = "http://www.naver.com/"
driver = webdriver.Chrome("chromedriver")
driver.get(url)
driver.save_screenshot("naverhome.png")
driver.quit()
'Python' 카테고리의 다른 글
Python - 서울시 CCTV수를 파악해서 시각화하기 (산점도, 회귀선) (0) | 2021.07.14 |
---|---|
Python - 웹크롤링 후 텍스트 마이닝 (seleium) (0) | 2021.07.13 |
Python - 변수저장, 데이터프레임 필터(조회기능), 데이터프레임 병합 (0) | 2021.07.05 |
Python - 결측값처리 (0) | 2021.07.02 |
Python - 인구 구조가 비슷한 지역 그래프 그리기 (0) | 2021.07.02 |