본문 바로가기

WIL (Weekly I Learned)

[WIL] 2021년 9월 둘째 주 WIL

📝 9월 6일 (월)

▪️ Tistory 커스터마이징

 

하이퍼링크 색상 설정

 

내 티스토리의 하이퍼링크는 링크답지가 않았기 때문에.... 

이게 어딜봐서 링크..

스킨 편집 > CSS > 맨 아래에 코드를 추가해주었다.

 

.entry-content a {
    color: #0366d6 !important;
        text-decoration: none; # 밑줄 추가하고 싶다면 none -> underline
}
.entry-content a:hover {
    color: #0366d6 !important;
}

드디어 클릭할 수 있는 아이라는 것이 드러났다.

인라인 코드 테마 설정

 

인라인 코드 또한 정말 자기 주장이 없었다.

여기서 인라인 코드가 뭐게요~? 

 

스킨 편집 > CSS > html, body { } 아래에 코드를 추가해주었다.

 

code {
     background-color: #272822;
     color: #f8f8f2;
     padding: 3rem;
     border-radius: 3px;
     font-family: "Consolas", "Sans Mono", "Courier", "monospace";
     font-size: 0.9rem;
     font-weight: bold;
 }

변경 후!

 

 

코드 블럭 테마 설정

 

Highlights.js 사용하기

 

Atom One Dark 테마를 적용해보았다!

스킨 편집 > HTML >태그 사이에 아래 코드를 추가해주면

 

<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/styles/atom-one-dark.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.2/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>

훨씬 생동감 넘치는구나 ~

 

Ref.

https://keony.tistory.com/196

https://wordbe.tistory.com/entry/인라인-코드블럭-코드-강조-코드-박스처리

https://minimin2.tistory.com/95

 

▪️ Python 웹 크롤링

중앙일보는 기사 목록에서 페이지의 가장 아래로 스크롤 한 뒤 더보기 를 눌러야 다음 기사들이 하단에 등장한다.

( 정말 이해할 수 없는 구시대적인 방식.. )

 

개발자 도구로 확인해 보면 더보기를 누르는 순간 아래와 같이 뿅! 하고 기사 list들이 추가가 되는데, 업데이트 된 리스트들을 드라이버로 받아올 때 문제가 발생하였다.

 

 

분명 더보기 엘레먼트를 click( ) 하였는데 받아온 기사 수는 그대로인 것이다.

 

Whyrano

 

어디선가 Implicitly Wait를 사용하라고 해서 10초동안 기다리라고 지시했는데, 드라이버는 기다리지 않고 계속 기사를 불러오는 코드를 바로 수행해버렸다.

 

 

💡해결

Implicitly Wait가 아닌 time.sleep을 써야했던 것이다!

Implicitly Wait vs time.sleep

 

Implicitly Wait

from selenium import webdriver

driver = webdriver.Chrome('chromedriver.exe')
driver.implicitly_wait(10)

 

time.sleep

from time import sleep

sleep(1) #1초간 기다림
  • Implicitly Wait는 쉽게 설명하자면 페이지 이동등의 명령어를 줬을 때 다음 웹페이지가 넘어올때까지 기다리라는 뜻이다.
  • 주의 할 것은 페이지가 넘어오기까지 최대 10초까지 기다리겠다는 의미이지 요청하고나서 무조건 10초를 기다리겠다는 것이 아니다.
  • 무조건 10초를 기다리려면 time.sleep 을 쓰면 된다!

예를 들어서 임플리시틀리 웨이트를 10초로 설정하고 특정 사이트에 접속했는데 웹페이지가 1초만에 넘어왔다면 1초후에 다음 명령어를 실행하게 된다. 다시 말하자면 페이지가 다 넘어왔으면 10초가 지나지 않아도 다음 명령어를 실행하는 것이고 안넘어온다면 최대 10초까지만 기다려보고 10초가 지나도록 안넘어오면 그냥 다음 명령어를 실행하겠다는 의미이다.

 

 

Ref.

https://pythondocs.net/selenium/셀레니움-wait-개념-이해하기-implicitly-wait-vs-explicitly-wait/

 

 

 

 


 

📝 9월 7일 (화)

 

 

▪️ Python 웹 크롤링

Selenium에서 자식 창, 부모 창 이동 및 변환

Ref.

https://noodle-dev.tistory.com/43

 

▪️ GIT .gitignore 적용안되는 오류

  • .gitignore에 무시할 파일을 추가했으나 적용되지 않았다.
  • 이미 기존에 명시되어있던 파일은 무시가 잘 되고있는데, 추가한 파일만 무시되지 않은 경우

💡 해결

  1. 일단 현재 상태에서 무시하고자 하는 파일을 제외하고 commit을 해준다. (안 해주면 다 날아가므로 주의하자)
  2. 루트 폴더(최상위 폴더)에 간 후 git rm -r --cached 파일명1 파일명2 ... 명령어 수행

          ⇒ 이제부터는 선택한 파일의 git index가 다 초기화되었으니 .gitignore가 다시 적용

 

     3. 평상시대로 git add 해주고 commit 하면서 git status를 쳐보면 추적됐던 파일들이 gitignore에 따라 무시된 것을 확인

 

 

Ref.

https://coding-groot.tistory.com/59

 

 

 

▪️ 하둡(Hadoop)의 HDFS 기본개념

  • 하둡은 여러 대의 서버에 데이터를 저장하고, 저장된 각 서버에서 동시에 데이터를 처리
  • 하둡은 RDBMS와 경쟁하는 것이 아닌 협력하는 것
    • 쇼핑몰에서 회원가입이나 결제 진행과 같은 무결성 을 보장해야하는 것
    • ⇒ RDBMS가 적합
    • 회원이 관심있는 물품 ,이동경로, 머무르는 시간 등 배치성으로 저장되는 데이터
    • ⇒ 하둡이 적합
  • HDFS는 Hadoop Distributed File System의 약자
  • 네임노드(마스터)데이터노드(슬레이브)로 구현되어 있음

 

 클라이언트가 HDFS에 데이터를 저장하려면?
  1. 반드시 네임노드에 먼저 접속
  2. 기존 파일의 저장여부와 권한 확인 절차를 거쳐 저장이 승인됨
  3. 데이터노드는 클라이언트가 HDFS에 저장하는 파일을 로컬 디스크에 유지한다.

 

 


 

📝 9월 9일 (목)

 

▪️ Spark 환경 설정

spark.createDataFrame 에서 ValueError: Cell is empty 에러 해결

Spark3 관련하여

  • PySpark를 위한 Python은 3.8+ 이상만 사용할 수 있다고 한다.
  • 따라서 기존 Python 3.6버전을 3.8로 교체한 후 해결하였다.

Ref.

https://www.mail-archive.com/issues@spark.apache.org/msg294260.html

 

 


 

📝 9월 10일 (금)

 

 

▪️ Boj 알고리즘 단계별 - 문자열

 


 

📝 9월 11일 (토)

 

▪️뉴스 데이터 전처리

Window에서 Mecab 형태소 분석기 설치

일본 NTT에서 개발한 Mecab은 일본어 형태소 분석기로, 개발자가 미역줄기를 좋아해서 이름을 mecab으로 지었다고 한다(?)

와카메케에......

 

은전한닢 프로젝트는 Mecab을 한국어에 사용할 수 있도록 개선 & 발전시킨 라이브러리인데, mecab-ko는 윈도우 환경을 지원하지 않는다.

하지만! Konlpy의 하위프로젝트인 koshort 프로젝트의 pyeunjeon 을 통해 은전한닢 프로젝트의 mecab을 윈도우에서도 쉽게 설치가 가능하다.

 

설치법

$ pip install eunjeon

사용법

>>> from eunjeon import Mecab  # KoNLPy style mecab wrapper
>>> tagger = Mecab() 

>>> tagger.nouns("고양이가 냐 하고 울면 나는 녜 하고 울어야지")
['고양이', '나', '녜']

>>> poem = "흘러내린 머리카락이 흐린 호박빛 아래 빛난다."
>>> tagger.morphs(poem)  # 형태소 단위로 나누기
['흘러내린', '머리카락', '이', '흐린', '호박', '빛', '아래', '빛난다', '.']

>>> tagger.pos("다람쥐 헌 쳇바퀴에 타고 파")
[('다람쥐', 'NNG'), ('헌', 'XSV+ETM'), ('쳇바퀴', 'NNG'), ('에', 'JKB'), ('타', 'VV'), ('고', 'EC'), ('파', 'VX+EC')]

Ref.

GitHub - koshort/pyeunjeon: (deprecated) 은전한닢 프로젝트와 mecab 기반의 한국어 형태소 분석기의 독립형 python 인터페이스

 


 

📝 9월 12일 (일)

 

▪️ Boj 알고리즘 단계별 - 기본수학 1