본문 바로가기

전체 글

(28)
python 네이버 영화 댓글 스크래핑(iframe) 웹 스크래핑 2 이번엔 그 영화의 댓글을 가져오는 것을 목표로 스크래핑 하였다. 먼저 그 웹페이지의 url을 가져와야 하는데 내가 가져오려는 웹페이지는 iframe 으로 되어있어서 바로 가져올 수 없다. 그래서 다른 방식으로 가져와야한다. 이렇게 개발자 도구에서 network 탭에서 response를 얻어낸다. cURL을 복사한 뒤 이 사이트에서 cURL을 Python request로 변환한다. https://curl.trillworks.com/ import requests from bs4 import BeautifulSoup import requests headers = { 'authority': 'movie.naver.com', 'sec-ch-ua': '"Google Chrome";v="89", "C..
파이썬 웹 스크래핑 웹 스크래핑하기 네이버 영화 사이트에 접속하여 영화의 제목들을 뽑아오는 것을 목표로 스크래핑을 하였다. 먼저 virtualenv 가상 환경에서 request와 BeatufulSoup 모듈을 설치한 후 진행하였다. import requests from bs4 import BeautifulSoup # response에 requests로 얻은 URL을 할당한다. response = requests.get('https://movie.naver.com/movie/running/current.nhn#') # soup에 BeautifulSoup모듈을 사용하여 URL을 텍스트로 변환하고 파싱한다. soup = BeauifulSoup(response.text, 'html.parser) 내가 스크랩하고 싶은 타겟이 HTM..
set과 frozenset 파이썬이 제공하는 다음과 같은 자료형들을 가리켜 ‘시퀀스 타입(sequence type)’이라 한다. 리스트 : list 클래스의 객체 튜플 : tuple 클래스의 객체 레인지 : range 클래스의 객체 문자열 : str 클래스의 객체 이들에겐 저장된 값의 순서 정보가 존재한다는 특징이 있다. 다음 자료형을 가리켜 ‘매핑 타입(mapping type)’이라 한다. 딕셔너리 : dict 클래스의 객체 매핑 타입은 본직적으로 저장된 값의 순서 또는 위치 정보를 기록하지 않는 자료형이다. 파이썬 3.7부터 저장된 값의 순서를 유지하기 시작했으나 그렇다고 본질이 바뀌지는 않는다. 때문에 이를 대상으로는 인덱싱이나 슬라이싱 연산이 불가능하다. 다음 두 자료형을 가리켜 ‘셋 타입(set type)’이라 한다. 셋..
dict & defaultdict 딕셔너리 새로운 키의 값을 저장할 때 해당 키가 존재하지 않는다면 오류가 발생한다. 그래서 그에 따른 처리를 미리 해 둘 필요가 있다. a = 'roboot' d = {} for k in a: if k in d: d[k] += 1 else: d[k] = 1 print(d) => {'r': 1, 'o': 2, 'b': 2, 't': 1} 위처럼 if ~ else 절을 이용하여 예외 처리가 가능하다. 그런데 이를 대신할 수 있는 방법 두 가지가 있다. setdefault 메서드와 defaultdict 함수이다. setdefault 메서드 a = 'robbot' d = {} for k in a: d[k] = d.setdefault(k, 0) + 1 print(d) => {'r': 1, 'o': 2, 'b': ..
파이썬의 메모리 관리 파이썬의 메모리 관리 가장 아름다운 하나의 답이 존재한다. - 파이썬의 디자인 철학 파이썬의 메모리 관리 / 할당은 어떤 내부 동작으로 되는 것일까? 하는 의문에서 자료를 찾아보았다. 파이콘에서 파이썬의 메모리 관리에 대한 영상이 있어 보게 되었고 그 영상의 내용을 정리해봤다. 메모리 할당에는 두가지 타입이 있다. 1. 정적 메모리 할당 프로그램 컴파일 시 메모리가 할당된다. ex) C / C++ 컴파일이란? → 고급 언어로 작성된 프로그램을 컴퓨터가 실행할 수 있는 프로그램으로 변환하는 방식을 의미 메모리 할당 시 타입이 정해져 있다. “스택”은 정적 할당을 구현하는 데 사용된다. 이 경우 메모리를 재사용할 수 없다. 참조는 스택에 생성된다. 메소드와 변수는 스택 메모리에 저장된다. 메서드가 리턴될 때..
Django ORM ORM이란? ORM(Object-relational Mapping)은 데이터 베이스와 객체지향 프로그래밍 언어 간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법이다. 원래 데이터베이스 서버의 어떤 데이터를 조회, 추가, 수정, 삭제 등을 할 때는 sql이라는 언어를 사용해야 한다. 그런데 sql을 사용하지 않고 각 언어 그대로를 활용해서 sql 코드를 만들어내는 라이브러리가 있다. 그걸 ORM 이라고 한다. 장고에서는 Django Model 이 장고의 ORM이다. Model Manager 데이터 베이스 질의 인터페이스를 제공한다. 기본 Manager로써 모델클래스.object 를 제공한다. Model Manager를 통해서 해당 모델 클래스의 DB 데이터를 추가, 조회, 수정, 삭제가 가능하다. Qu..
제너레이터 함수 제너레이터에 대한 이해와 제너레이터 함수 제너레이터(Generators)는 iterator 객체의 한 종류이다. 때문에 제너레이터를 전달하면서 next 함수를 호출하면 다음 값을 하나씩 얻을 수 있다. 제너레이터를 만드는 두 가지 방법이 있다. 제너레이터 함수(function) : 제너레이터를 만들기 위한 함수 정의 제너레이터 표현식 (expression) : 제너레이터를 만들기 위한 식 함수를 기반으로 제너레이터를 만든 예는 다음과 같다. def gen_num(): # 제너레이터 함수의 정의 print('first number') yield 1 # yield가 하나라도 들어가면 제너레이터가 된다. print('second number') yield 2 print('third number') yield ..
리스트 컴프리헨션(2) 리스트 컴프리헨션을 사용하면 map과 filter 함수를 간단하게 대신할 수 있다. st1 = [1, 2, 3] st2 = list(map(lambda n: n**2, st1)) # 제곱의 결과를 리스트로 묶음 st2 => [1, 4, 9] 위 코드는 map을 사용한 코드이다. 리스트 컴프리헨션을 사용하면 다음과 같이 간단하게 작성할 수 있다. st1 = [1, 2, 3] st2 = [n**2 for n in st1] # 제곱의 결과를 리스트로 묶음 st2 => [1, 4, 9] 그리고 다음은 filter를 사용한 예이다. st = [1, 2, 3, 4, 5] ost = list(filter(lambda n:n % 2, st)) # 홀수만 남겨셔 리스트로 묶음 ost => [1, 3, 5] 이 역시 리스..