오늘은 동적인 페이지를 파싱해야 할 일이 있었다. 평소와 같이 BeautifulSoup4를 사용해 크롤링하려던중, 페이지의 엘리먼트와 크롤링해온 html이 서로 다름을 알고 이상하게 여겨 찾아보니 동적인 페이지란것을 알게되었다. 스승께 이러한 일이 있었음을 보고하니 CSR과 SSR에 대해 설명해 주었다. 클라이언트사이드렌더링(CSR)과 서버사이드렌더링(...
1. 겪은것 연쇄 할인마 진행 중 예전에 작업했던 uplay의 판매목록중 할인이 끝낫음에도 불구하고 여전히 목록에 남아있음을 발견했다. 할인이 끝나 원가로 판매하는 상품의 코드는 당연히 할인중인 상품과 코드의 구성이 달랐다. 그러니 당연히 기존의 작성했던 코드는 오류가 발생했고, 약간의 수정을 거쳐야 했다. 2. 해당 코드 오류가 발생했던 코드였다. 만...
1. 오늘의 과제(였던것) 연쇄 할인마 사이트에서 크롤링 해오는 정보중에 원가, 할인가, 할인율 항목이 있다. 그런데 이 할인율을 구하는 방법이 만약 사이트마다 다르다면 같은 할인가임에도 불구하고 할인율이 차이가 나서 내 사이트에서 할인율기준 정렬시 문제가 발생할 수 있다. 할인율이 좀더 낮은곳을 찾아왔는데 정작 판매하는 할인가가 같다면 서비스의 신뢰에 문...

1. 오늘 플랫폼 판매 페이지에서 다른 플랫폼 판매 페이지로 넘어가는 기능을 구현하려했다. 해당 플랫폼을 드롭다운에 담아 드롭다운옵션을 select하는 이벤트로 넘어간다. 2. 문제 지금은 파라미터로 설정돼있는 url을 처음엔 callpage함수 밖에서 변수로 선언했었다. 이후 드롭다운의 클릭이벤트에 조건문 실행내용에 변수값을 변경하여 callpage를...
1. 오늘 GET, POST 방식을 중점으로 공부했다. GET과 POST는 http프로토콜을 이용해 서버에 무언가를 전달할때 사용하는 방식이다. 나같은 경우에는 GET과 POST를 api에 정보를 저장하고 불러오는 식으로 사용한 적이 있을 뿐, 정확한 둘의 차이라거나 방식을 정확히 인지하지 못했다. GET과 POST를 어느때에 어떻게 사용하는지 모르는 상...

1. 오늘 html에서 form형식을 사용해 서버로 querystring을 전달해 url을 분기별로 나누는 작업에 진척이 생겼다. 메인 url 클릭시 url 해당 페이지(/sell_page)에서 querystring으로 받은 parameter을 가져오는 함수를 코딩했다. 로그로 정상수행하는지 확인 이후 flask에서 api를 분기별로 나누어 htm...

1. 오늘 python으로 api를 쿼리스트링값으로 필터링 하는 작업을 완료했다. 위는 ‘스팀, 할인율기준, 내림차순’입니다. 현재 db의 정보가 뒤죽박죽입니다. 이렇게 분류된 api를 바탕으로 필요한 api만을 호출할 수 있게 되었습니다. 아래는 html코드입니다. 아직 분류별 페이지는 설정하지 않아 나머지는 임의로 정했습니다. 이를 바탕으로 임시로 ...
1. 오늘 저번에 삭제했던 mongoDB를 ubuntu서버에만 설치해두었다. 이과정은 아래와 같다. 아래의 과정은 ubuntu에서 진행된다. 1) sudo apt update 최신버전의 repository목록을 갖도록 업데이트 해줍니다. 2) sudo apt install -y mongodb mongoDB패키지를 설치합니다. mongoDB에 유용한 관리...

1. 오늘 로컬에서 서버의 db에 접속하는데에 성공했다. aws의 ec2서버에 db가 저장되어 있었는데, ubuntu를 서버라고 착각해 ubuntu의 ip에서 db를 호출하니 되지 않았다. 위와같은 한줄변경으로 호출에 성공했다. ubuntu는 linux의 배포판 os이고, 내가 db를 설치해두었던 ec2의 인스턴스란것은 하나의 가상컴퓨터 같은것이다. 인...

1. 오늘 플랫폼 페이지간 이동할 수 있는 드롭다운을 완성했다. dropdown부분이다. bootstrap의 dropdown을 가져다 사용했다. 클릭이벤트에 사용되었던 함수는 다음과 같다. 현재 url을 변경할때 location.replace를 사용했다. 이 함수를 사용하기 위해 현재 url의 querystring값이 필요했다. location.hr...

1. 오늘 검색 기능 구현중 검색 기반 데이터가 필요해 스팀의 모든 게임을 크롤링해왔다. 총 7만여개의 데이터를 페이지당 표시하는 데이터수 25로 나누어 반올림해 최대 페이지수를 구했다. 기존엔 다수의 페이지를 크롤링할때 변수를 선언해 크롤링해온 페이지의 텍스트를 해당 변수에 할당한후 해당 변수에서 필요한 태그를 찾아 크롤링해왔다. 페이지수가 이천개가 ...

1. 오늘 페이지네이션을 완성했다. 하지만 개선의 여지가 많이 남았다. 해당 ajax요청은 데이터를 출력해주는 ajax요청의 success 구간에 삽입되었다. ajax의 비동기식 요청에 순서를 주기 위함이다. 2. 오류 및 필요수정사항 플랫폼별로 데이터를 드러내는데에는 문제가 없으나, 모든플랫폼 요청시에는 문제가 발생한다. 위 스크린샷은 유플레이 판매기...

1. 오늘 저번에 완성했던 pagination 의 오류를 수정했다. 모든페이지를 display : none으로 설정한 뒤 현재 페이지와 앞뒤 페이지 2개씩만 드러나게 설정했다. visibility : hidden도 생각해 보았지만 visibility는 영역은 계속 차지한 채로 보이지만 않는 기능이라, 후에 정렬시 문제가 발생할듯 싶어 display : no...
1. 오늘 검색어 자동완성기능을 구현했다. 검색어 자동완성기능 개발과정에서 scope에 관한것을 알게 되었다. 스코프 스코프는 어떤 변수에 접근할 수 있는지를 정의해준다. 일반적으로 전역스코프와 지역스코프, 2개가 존재한다. 전역스코프 어떤 변수가 모든 함수에 속하지 않고, 괄호안에도 들어있지 않다면 그 변수를 전역변수라고 한다. 전역변수를 선언하면 js코...

1. 오늘 document.on과 document.ready의 차이에 대해 알아보았다. document.ready() 보통 위와 같은 형식으로 쓰인다. 위는 DOM이 준비가 됐을때 클릭이벤트를 실행하겠다는 뜻으로 간주할 수 있다. 이것과 비슷하게 $(window).load가 있다. 이는 window에서 모든게 load 된 시점을 뜻한다. 페이지 시작 시에...

1. 오늘 카드폼을 완성했다. 코딩 자체는 난이도가 낮았으나, 좀더 괜찮은 디자인을 보이려고 이것저것 시도하는게 고역이였다. 할인율에 따라서 카드 외부의 glow이펙트를 다르게 주었다. 카드의 배치는 display : flex를 사용했다. 페이지네이션을 전면적으로 수정했다. 기존에는 모든페이지를 생성하고 그 페이지의 클래스에 display :

1. 오늘 css작업의 마무리단계에 올랐다. 항상 메인페이지로 이동하는 상단타이틀은 neon glow effect를 사용했다. css만으로 animation효과를 주는 이펙트가 있길래 적용시켰다. 상단 메뉴에 position을 사용해 드롭다운이벤트 또한 이동시켰다. 모든 카드에 할인율별로 shadow를 사용한 glow가 오히려 난잡해 보여 8

1. 오늘 여태 연쇄할인마 프로젝트는 flask와 mongodb를 사용했다. 하지만 프로젝트의 마무리가 눈앞에 있는 지금 로그인 기능과 여타 여러 이유를 포함해 좀더 범용적으로 이용되는 django와 mysql을 이용하기로 했다. / 그 과정에서 mysql과 mongodb, 둘의 db의 차이점을 알아 보았다. 1) SQL SQL은 ‘구조화 된 쿼리 언어 (...

그동안 flask와 mongoDB를 django와 mySQL로의 변경에 진도가 부진한 점에 TIL을 올릴수 없었다. 1. 오늘 django 설치, 그리고 html을 render하고 css및 js등의 static파일을 적용하는데에 성공했다. django 설치부터 현재 상황까지의 기록이다. 1) django 설치 명령 프롬포트에서 위 커맨드를 실행하는 방법도...

1. 오늘 django로 html파일을 render하고 css,js등의 static파일등을 불러오는 데에 성공했다. 저번 TIL에서는 polls라는 app을 예시로 들었지만, 실제로 작성한 app은 home, salespage, allgamedb이므로 이번엔 home을 예시로 들어서 작성하겠다. 1) templates, static 디렉토리 생성 flask...

1. 오늘 heidiSQL을 이용해 테이블을 생성했다. 테이블 생성시 문자세트(Character Set) 설정을 변경하는 법을 익혔다. 기본 문자세트인 latin1문자세트는 영어를 주 언어로 사용하는 영어권 국가들이 사용한다. 이 경우엔 인코딩 및 디코딩 결과에 문제를 일으키지 않지만 한국을 비롯한 아시아 같은 국가들의 언어는 문자가 깨져서 입력되거나 출력...

1. 오늘 pymysql의 사용법을 익혔다. 1)pymysql로 내 mysql에 연결한다. cursor설정을 해준다. 연결한 DB와 상호작용하기 위해 cursor객체를 생성해주어야 한다. 데이터 분석가에게 익숙한 데이터프레임 형태로 결과를 쉽게 변환할 수 있도록 딕셔너리 형태로 결과를 반환해주는 DictCursor를 사용한다. 2) 테이블생성 삽입, 갱...

1. 오늘 pymysql을 사용해서 python에서 크롤링해온 정보들을 mysql에 insert하는데에 성공했다. heidisql을 이용해 테이블을 만들어준다. 테이블을 생성시 자료형에 주의한다. title부분도 TEXT로 해두고 싶었지만, 빈번한 오류로 인해 수정하지 못했다. 추후 수정할 예정이다. DECIMAL은 고정소수점을 표현할때 쓰이고, DECI...

1. 오늘 DRF(django rest framework)사용법을 숙지했다. 1)먼저 DRF를 설치한다. 2) 새 프로젝트를 생성하고 새 app을 만들어준다. 실제 장고 서버와 REST 서버는 따로 운용되어야 한다. 즉, 2개가 실행되고 있어야 한다. 3)settings.py 설정 ![](https://images.velog.