링크 : www.acmicpc.net/problem/20056 20056번: 마법사 상어와 파이어볼 첫째 줄에 N, M, K가 주어진다. 둘째 줄부터 M개의 줄에 파이어볼의 정보가 한 줄에 하나씩 주어진다. 파이어볼의 정보는 다섯 정수 ri, ci, mi, si, di로 이루어져 있다. 서로 다른 두 파이어볼의 위치 www.acmicpc.net 🎈문제 어른 상어가 마법사가 되었고, 파이어볼을 배웠다. 마법사 상어가 크기가 N×N인 격자에 파이어볼 M개를 발사했다. 가장 처음에 파이어볼은 각자 위치에서 이동을 대기하고 있다. i번 파이어볼의 위치는 (ri, ci), 질량은 mi이고, 방향은 di, 속력은 si이다. 위치 (r, c)는 r행 c열을 의미한다. 격자의 행과 열은 1번부터 N번까지 번호가 매겨져..
1. 표준 스트림과 리다이렉트 2. 파이프 3. 웹 페이지 추출 4. 문자코드 인코딩 방식(문자 코드) 정하는 방법 HTTP 헤더에서 추출 meta 태그에서 추출 5. 웹 페이지에서 데이터 추출 정규 표현식 HTML을 단순한 문자열로 취급 XML 파서 XML 태그를 분석하고, 필요한 부분을 추출 RSS처럼 많은 정보가 XML로 제공되기 떄문에 XML파서를 사용하면 편리 from xml.etree import ElementTree 6. SQLite 파일 기반의 관계형 데이터베이스 파일 쓰는데 걸리는 시간이 김 대용량의 데이터를 계속해서 쓰면 크롤러의 병목지점이 될 것 동시 처리 불가 7. Session 여러개의 페이지를 연속으로 크롤링할 때 사용하면 효율적 HTTP 헤더 또는 Basic 인증 설정을 재사용..
🚫인증이 필요한 페이지 웹 애플리케이션의 관리 기능이나 개인 정보를 다루는 경우가 대부분 공개하면 안되는 페이지를 포함한 경우 원칙적으로는 접근하면 안됨 그러나 필요한 경우가 있음 뱅크샐러드와 같이 은행과 증권 등 보유하고 있는 금융 계좌를 한 번에 관리하는 서비스 자산 총액 확인을 하기위해 은행을 각기 확인하는 것은 번거로움 이를 크롤러가 한꺼번에 수집해줌 분산형 미디어 직접 미디어 시스템을 가지지 않고 Facebook, Twitter, Instagram 등의 소셜 미디어 등의 미디어에 콘텐츠를 제공하는 것 동일한 콘텐츠를 페이스북, 트위터 등의 SNS에 올려야 하는 경우에 주로 운용 딩고 미리 SNS에 접근할 권한을 확보 한 후 한번에 모든 SNS에 미디어를 업로드하고 사용자의 반응을 추출한 뒤 시각..
Q. 효율적인 크롤링이란? A. 크롤러를 운용하는 서버의 리소스를 효율적으로 활용하는 정도 웹 사이트의 변경 시점이나 변경 빈도 학습 정기적으로 크롤링을 하면 대상 사이트의 경향을 알 수 있음 예 1> 매주 화요일에 자료가 업데이트 된다. 5시부터 10시까지는 접속이 지연된다. → 매주 화요일 10시 30분에 크롤링 예 2> 매일 자료가 업데이트 된다고 공지가 올라와있다. 9시부터 20시까지는 트래픽이 높다. → 8시 30분 또는 20시 30분에 크롤링을 하는 등 트래픽이 높은 시간을 피해서 크롤링 예 3> 매주 수요일 9시마다 오류가 발생한다. → 해당 요일, 시간을 피해서 크롤링 크롤링에 필요한 시간은 웹 사이트에 따라 다름 웹 사이트 내부의 페이지가 같아도 응답 간격과 응답 속도의 차이가 존재 크롤..
정의 HTTP는 클라이언트와 서버 사이에 이루어지는 요청/응답(request/response) 프로토콜이다. 예를 들면, 클라이언트인 웹 브라우저가 HTTP를 통하여 서버로부터 웹페이지(HTML)나 그림 정보를 요청하면, 서버는 이 요청에 응답하여 필요한 정보를 해당 사용자에게 전달하게 된다. 이 정보가 모니터와 같은 출력 장치를 통해 사용자에게 나타나는 것이다. 위키 백과 HTTP - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. HTTP(HyperText Transfer Protocol, 문화어: 초본문전송규약, 하이퍼본문전송규약)는 W3 상에서 정보를 주고받을 수 있는 프로토콜이다. 주로 HTML 문서를 주고받는 데에 ko.wikipedia.org 개발자를 위한 웹 기술 한국어 ..
라이브러리/프레임워크의 종류 Anemone (RUBY) 깃 허브 저장소 주소 > github.com/chriskite/anemone chriskite/anemone Anemone web-spider framework. Contribute to chriskite/anemone development by creating an account on GitHub. github.com 소개와 사용 예시 > www.rubyinside.com/web-spidering-with-anemone-1927.html Easy Web Spidering in Ruby with Anemone Easy Web Spidering in Ruby with Anemone By Ric Roberts / July 2, 2009 Anemone i..
크롤링 잘하는 방법 콘텐츠 수집 → HTTP 통신(백엔드) 스크래핑 → 추출한 HTML 분석(프론트엔드) HTTP/HTML 관련 지식 없이 쉽게 크롤링/스크래핑을 하게 해주는 다양한 라이브러리와 프레임워크가 존재 그러나 제대로 크롤러를 개발하고 운영하려면 라이브러리/프레임워크의 표준 기능만으로는 부족하거나 예외 상황에 대처할 수 없는 경우가 많음 따라서 크롤링을 잘하기위해서는 HTTP통신과 HTML등 웹 기술에대한 지식이 필요 빠른 HTTP/CSS 이해를 위한 무료 강의(칸 아카데미) HTML/CSS: 웹 페이지 제작이란? | 컴퓨터 프로그래밍 | 컴퓨팅 | Khan Academy 웹페이지를 만들기 위해 HTML과 CSS를 사용하는 방법을 배워 봅시다. HTML은 내용을 둘러싸는데 이용하고 브라우저에게 ..
크롤러 인터넷에 있는 콘텐츠를 기계적으로 수집해 데이터로 저장 파일, 데이터베이스 등에 저장 검색 서비스, 데이터 분석, 머신러닝 등에 활용 참고하면 좋은 자료 - 클라우드 페어 클라우드 페어에서는 크롤링의 개념 뿐만 아니라 나쁜 봇과 좋은 봇의 차이를 알려준다. 사용 예시 구글, 네이버 등 포탈은 콘텐츠를 크롤링해서 저장해서 검색 서비스를 제공 특정 분야나 용도에 초점을 맞춘 검색 서비스도 존재(네이버쇼핑의 최저가 사이트 등 가격 비교) RSS 리더 등 회사 인터넷 내부의 서버를 크롤링해서 사내 문서를 검색 네이버 서치와 관련된 정보를 얻을 수 있는 Naver Search Advisor 웹마스터 가이드 - 네이버 서치어드바이저 네이버 검색을 위한 웹마스터 가이드 입니다. 웹마스터 가이드 라인은, 네이버..
www.acmicpc.net/problem/1697 1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 문제 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다. 수빈이와 동생의 위치가 주어졌..
www.acmicpc.net/problem/2178 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net 처음에는 모든 경로 탐색하는 문제에 익숙해져있어서 DFS를 사용해서 구현했다가 시간초과로 실패했다. 그래서 알아보니 BFS와 DFS에는 다음과 같은 차이가 있었다. BFS : 최단 경로를 보장한다. 두 노드간의 최단(임의) 경로를 찾고 싶을 때 사용한다. 큐를 사용한다. 재귀를 통해 구현할 수 없다. DFS : 모든 경로를 탐색한다. → 시간복잡도가 매우 커진다. BFS 보다 구현이 간단하다. 스택을 사용한다. 재귀를 통해 구현할 수 있다. ..
1. Reverse String class Solution: def reverseString(self, s: List[str]) -> None: """ Do not return anything, modify s in-place instead. """ s.reverse() in-place라 reverse()를 사용했지만, slicing(s[:] = s[::-1])이 조금 더 빠르다. 2. Reverse Integer class Solution: def reverse(self, x: int) -> int: if x == 0: return 0 result = int(str(abs(x))[::-1]) # 32-bit 정수 범위를 넘은 경우 0으로 처리 if result2**31-1: return 0 # x가 양..
리트코드 Top Interview Questions 챕터 1 Array 전체 Python3 풀이 Remove Duplicates from Sorted Array class Solution: def removeDuplicates(self, nums: List[int]) -> int: i = 0 while i int: profit = 0 for i in range(len(prices)-1): if prices[i] None: """ Do not return anything, modify nums in-place instead. """ while k!=0: nums.insert(0, nums.pop()) k -= 1 k번만큼 nums 배열 맨 뒤의 원소를 맨 앞으로 이동시키는 문제다. Contains Dupl..