5.6
5.7
[html]

[찾기]
[find]
- soup.find("p", class_="inner-text second-item")
- soup.find("p", {"class": "outer-text first-item"})
soup.find("p", {"class": "outer-text first-item"}).text.strip()
soup.find("p", {"class": "inner-text first-item", "id":"first"})
list 형태로 반환
list 형태로 반환하기 때문에 find_all에서 특정 태그 찾을 땐 [0]을 붙여 같이 사용해 줘야 함(ex. [0]을 하면 찾은 값 중 첫 번째 값의 text값 반환)
soup.find_all(id= "pw-link")[0].text
p 태그 리스트에서 텍스트 속성만 출력
each_tag in soup.find_all("p"):
print("-" * 50)
print(each_tag.text)
- print(soup.find_all("p")[0].text)
- print(soup.find_all("p")[1].string)
- print(soup.find_all("p")[1].get_text())
- links = soup.find_all("a")
- links[0].get("href"), links[1]["href"]
for each in links:
href = each.get("href") #each["href"]
text = each.get_text()
print(text + "=>" + href)
5.8
from urllib.request import urlopen
from bs4 import BeautifulSoup
주소넣기: url = "https://finance.naver.com/marketindex/"
주소 변수에 넣기: page = urlopen(url) 또는 response = urlopen(url) 사용
soup = BeautifulSoup(page, "html.parser")
print(soup.prettify())
response.status
requests.get(), requests.post()
- find_all 사용할 때: soup.find_all("li", "on")
- exchangeList = soup.select("#exchangeList > li")
len(exchangeList)

df = pd.DataFrame(exchange_datas)
df.to_excel("./naverfinance.xlsx")



list형은 대괄호로 생성
colors = ["red", "blue", "green"]
append: list 제일 뒤에 추가
extend: 제일 뒤에 자료 추가
insert: 원하는 위치에 자료를 삽입
pop: 리스트 제일 뒤부터 자료를 하나씩 삭제
remove: 자료를 삭제
isinstance: 자료형 True/False
5.9






-데이터 안의 링크 가져오기











df.to_csv(경로, sep=",", encoding="UTF-8")

gmaps_key = "사용자 google key"
gmaps = googlemaps.Client(key=gmaps_key)



근데 나는 이거로 코드가 실행이 안된다(folium 라이브러리에서 위치 정보로 사용하는 NaN 값이 지원되지 않는다고 chat GPT가 그랬음 ,, )

그래서 수정해서 코드를 짰다!(chat GPT 이용^_^)

완성~~~!

코드가 변경되었으니 실행이 안되면 꼭 저 형태로 만들고 다시 실행해보기!
우측 상단 ``` > 도움말 > CHrome 정보 > 버전 확인
최신버전은 여기!
https://github.com/GoogleChromeLabs/chrome-for-testing/blob/main/data/latest-versions-per-milestone-with-downloads.json
밑으로 내려서 운영체제에 맞는 "chromedriver" 써있는 주소를 따옴표 제외해서 복사 후 붙여넣기 하면 자동 다운로드 된다.
반드시 pip 명령어로 설치해야 하고, 만약 conda로 설치했으면 삭제 후 재설치 진행하기!
pip uninstall selenium 으로 삭제 후 재설치

driver.quit()
driver.maximize_window()
driver.minimize_window()
driver.set_window_size(600, 600)
driver.refresh()
driver.back()
driver.forward()

driver.execute_script("window.open('https://www.naver.com')")
driver.switch_to.window(driver.window_handles[2])
driver.close()
driver.quit()
driver.execute_script("return document.body.scrollHeight")
-> 출력하면 5732와 같은 숫자 출력
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
driver.save_screenshot("./last_height.png")
driver.execute_script("window.scrollTo(0,0)")
from selenium.webdriver import ActionChains
some_tag = driver.find_element(By.CSS_SELECTOR, '#content > div.cover-list > div > ul > li:nth-child(1)')
action = ActionChains(driver)
action.move_to_element(some_tag).perform()
https://selenium-python.readthedocs.io/
5.11
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://www.naver.com")
keyword = driver.find_element(By.CSS_SELECTOR, "#query")
keyword.clear()
keyword.send_keys("파이썬")
search_btn = driver.find_element(By.CSS_SELECTOR, "#sform > fieldset > button")
search_btn.click()
driver.find_element(By.XPATH, '//*[@id="query"]').send_keys("xpath")
driver.find_element(By.XPATH, '//*[@id="sform"]/fieldset/button').click()
XPATH를 사용할 때는 복사 -> xpath로 복사해서 링크 입력하기
- 검색 버튼의 주소를 넣고 코드를 실행했을 때 오류가 뜨면, 검색 버튼에 동적 페이지 기능이 들어갔을 수도 있다
- 동적 페이지 기능은 버튼을 눌렀을 때 class명이 바뀌는 것을 말한다
from selenium.webdriver import ActionChains
search_tag = driver.find_element(By.CSS_SELECTOR, '.search')
action = ActionChains(driver)
action.click(search_tag)
action.perform()
keyword = driver.find_element(By.CSS_SELECTOR, "#header > div.search > input[type=text]").send_keys('딥러닝')
driver.find_element(By.CSS_SELECTOR, '#header > div.search > button').click()
driver.page_source
from bs4 import BeautifulSoup
- req = driver.page_source
- soup = BeautifulSoup(req, 'html.parser')
soup.select('.post-item')
contents = soup.select('.post-item')
contents[2]
- pip install selenium
- from selenium import webdriver
- from selenium import webdriver
- from selenium.webdriver.common.by import By
- url = "https://www.opinet.co.kr/searRgSelect.do"
- driver = webdriver.Chrome()
- driver.get(url)
import time
def main_get():# 페이지 접근 url = "https://www.opinet.co.kr/searRgSelect.do" driver = webdriver.Chrome() driver.get(url) time.sleep(3) # 팝업창으로 전환 driver.switch_to_window(driver.window_handles[-1]) # 팝업창 닫아주기 driver.close() time.sleep(3) # 메인화면 창으로 전환 driver.switch_to_window(driver.window_handles[-1]) # 접근 URL 다시 요청 driver.get(url)main_get()
- sido_list_raw = driver.find_element(By.ID, "SIDO_NM0")
- sido_list_raw.text
- sido_list = sido_list_raw.find_elements(By.TAG_NAME, "option")
- len(sido_list), sido_list[17].text
실행 결과: (18, '제주')
sido_list[1].get_attribute("value")
실행 결과: '서울특별시'

sido_list_raw.send_keys(sido_names[0])



파일을 불러왔는데 열 이름이 이상하게 뜬다면 header를 사용해 목차가 있는 인덱스 번호를 입력해 준다
사용법: header = 2 이런식으로!
glob("../data/지역_*.xls")
- stationsfiles = glob("../data/지역*.xls")
- stations_files[:5]
- tmp = pd.read_excel(stations_files[0], header = 2)
- tmp.tail(2)
- 형식이 동일하고 연달아 붙이기만 하면 될 때는 concat 사용하기
- stations_raw = pd.concat(tmp_raw)
- stations_raw
stations_raw.info()
stations_raw.columns







- stations.reset_index(inplace=True)









- import time
- time.sleep(3)
elements 사용해야 함(한개 일 때 element 사용)