본문 바로가기
카테고리 없음

TIL-17

by 오우지 2021. 10. 7.

으아 화이팅! 벌써 4분의 1이 지나간다 너무 소중한 시간

from bs4 import BeautifulSoup
from selenium import webdriver
from time import sleep

driver = webdriver.Chrome('./chromedriver')  # 드라이버를 실행합니다.


url = "https://www.melon.com/chart/day/index.htm"
# headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
# data = requests.get(url, headers=headers)

driver.get(url)  # 드라이버에 해당 url의 웹페이지를 띄웁니다.
sleep(5)  # 페이지가 로딩되는 동안 5초 간 기다립니다.

req = driver.page_source  # html 정보를 가져옵니다.
driver.quit()  # 정보를 가져왔으므로 드라이버는 꺼줍니다.

# soup = BeautifulSoup(data.text, 'html.parser')
soup = BeautifulSoup(req, 'html.parser')  # 가져온 정보를 beautifulsoup으로 파싱해줍니다.

songs = soup.select("#frm > div > table > tbody > tr")
print(len(songs))

for song in songs:
    title = song.select_one("td > div > div.wrap_song_info > div.rank01 > span > a").text
    artist = song.select_one("td > div > div.wrap_song_info > div.rank02 > span > a").text
    likes_tag = song.select_one("td > div > button.like > span.cnt")
    likes_tag.span.decompose()  # span 태그 없애기
    likes = likes_tag.text.strip()  # 텍스트화한 후 앞뒤로 빈 칸 지우기
    print(title, artist, likes)

bs4만 사용하면 동적인 페이지는 끌어오지 못하는 단점이 있었기 때문에 창을 띄운 다음에 잡아오는 셀레니움 라이브러리를 사용할거다.

 

기존에 스크롤 하면 사진이 더 뜨는 네이버 창에 대해서는 이미지를 다 가져오지 못하기 때문에 스크롤링을 위한 코드도 넣어준다. 네이버 이미지 사용

from bs4 import BeautifulSoup
from selenium import webdriver
from time import sleep


driver = webdriver.Chrome('./chromedriver')

url = "https://search.naver.com/search.naver?where=image&sm=tab_jum&query=%EC%95%84%EC%9D%B4%EC%9C%A0"
driver.get(url)
sleep(3)
driver.execute_script("window.scrollTo(0, 1000)")  # x좌표는 0, y는 1000픽셀만큼 내리기
sleep(1)
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
sleep(10)

req = driver.page_source
driver.quit()

soup = BeautifulSoup(req, 'html.parser')
images = soup.select(".tile_item._item ._image._listImage")
print(len(images))

for image in images:
    src = image["src"]
    print(src)

 

그 다음은 네이버 지도 API를 가져온다. 그냥 가입하고 ID만 입력해주면 된다.

<script type="text/javascript"
                src="https://openapi.map.naver.com/openapi/v3/maps.js?ncpClientId=xw5bgsivg1"></script>
                
                $(document).ready(function () {
                let map = new naver.maps.Map('map', {
                    center: new naver.maps.LatLng(37.4981125, 127.0379399),
                    zoom: 10
                });
            })

 

 

JWT란?

Json Web Token의 줄임말로, JSON 객체를 사용해 정보를 안정성 있게 전달하는 웹표준

 

function toggle_sign_up() {
  if ($("#sign-up-box").hasClass("is-hidden")) {
  	$("#sign-up-box").removeClass("is-hidden")
  } else {
  	$("#sign-up-box").addClass("is-hidden")
  }
  }

제이쿼리를 이용 하지 않으면 하나하나 만들어줘야 하지만 toggleClass()를 이용해서 조금 더 간단하게 사용 가능하다.

function toggle_sign_up() {
  $("#sign-up-box").toggleClass("is-hidden")
  $("#div-sign-in-or-up").toggleClass("is-hidden")
  $("#btn-check-dup").toggleClass("is-hidden")
  $("#help-id").toggleClass("is-hidden")
  $("#help-password").toggleClass("is-hidden")
  $("#help-password2").toggleClass("is-hidden")
}

정규표현식 - 형식을 확인하여 결과를 참/거짓으로 반환하는 함수

function is_nickname(asValue) {
    var regExp = /^(?=.*[a-zA-Z])[-a-zA-Z0-9_.]{2,10}$/;
    return regExp.test(asValue);
}

function is_password(asValue) {
    var regExp = /^(?=.*\d)(?=.*[a-zA-Z])[0-9a-zA-Z!@#$%^&*]{8,20}$/;
    return regExp.test(asValue);
}

 

 


오늘은 넘 힘ㄷ르어 내일열심히할게요 미안