본문 바로가기

Python

[Selenium] Selenium 알아보기 파이썬으로 웹사이트에서 크롤링하는 방법은 대표적으로 Beautifulsoup을 이용한 정적인 방법과 Selenium을 이용한 동적인 방법이 있다. 이전에 크롤링에 대해 배울 때는 Selenium은 시간이 오래 걸린다는 말을 들었었는데 요청작업들을 처리하다보니 크롤링 자동화에 있어서는 Selenium만큼 편한 패키지가 없는 거 같다. 그래서 앞으로 크롤링 요청이 들어오면 Selenium을 활용해 스크립트를 만들어주기 위해 Selenium을 공부하기로 했다. (전에 Beautifulsoup으로 한 건 처리해줬는데 사용하기 까다로운 스크립트를 만들었다,,) 우선 가장 중요한 html에서 태그를 가져오는 메소드를 알아보자. 가장 먼저 Selenium을 이용해 Chrome과 스크립트를 연동시켜야 한다. from .. 더보기
[Python] list를 DataFrame으로 만들기 업무를 하다보면 dataframe을 만들어야 하는 경우가 많다. 여러 방법이 있겠지만 내가 느낀 가장 쉬운 방법은 모든 데이터를 list type으로 만들어 변환시켜주는 것이다. 딕셔너리에서 dataframe으로 만들 때 결국 list comprehension을 사용하여 만들기 때문에 처음부터 list로 만들어 주는게 편할 것이다. 제일 흔한 두가지 경우를 살펴보자 1. 각각의 리스트가 하나의 row인 경우 import pandas as pd project_list = [['a', 1, '가'], ['b', 2, '나'], ['c', 3, '다']] df = pd.DataFrame(project_list, columns=['영문', '숫자', '한글']) 2. 각각의 리스트가 하나의 col인 경우 imp.. 더보기
[Django] woojin's blog 프로젝트: 글/댓글 작성 블로그를 만드는 마지막 파트다. 사용자가 관리자모드에서가 아닌 직접 블로그 창에서 글과 댓글을 작성하는 기능을 구현해본다. 일단 늘 페이지를 만들 때 하던 '글 작성 페이지'의 기본 구조 만들자. 순서는 View -> URLconf -> Template !! (순서 상관은 크게 없음) [blog/views.py] def post_add(request): return render(request, 'post_add.html') [config/urls.py] from blog.views import post_add# 위에서 만든 veiws.py에 post_add 함수 추가 ... urlpatterns = [ ... path("posts/add/", post_add), ] [templates/post_add.h.. 더보기
[Python] 6월 23일 cv2와 PIL 같이 쓰기 PIL과 cv2는 비슷한 기능을 하는 패키지이면서도 동작 방법은 너무 다르다. 예를들어 cv2는 numpy 배열로 읽고 처리하는 반면에 PIL은 이미지 그대로 처리한다. 그리고 cv2는 이미지를 BGR로 읽는 반면에 PIL은 이미지를 RGB로 처리한다. 그래서 두 패키지를 같이 쓰려면 변환 과정을 거쳐야한다. 그래서 하나의 편의를 위해 하나의 패키지만 주로 쓰려고 하지만 작업을 하다보면 어쩔 수 없이 두 패키지를 같이 사용해야 할 때가 있다. 특히 이미지에 텍스트를 써넣을때 cv2는 한글을 지원하지 않기 때문에 PIL로 한글 텍스트를 써넣고 cv2로 변환하여 시각화를 한다.(PIL로 다 해도 된다. 예를 들자면..) 방법을 설명하자면 1. PIL로 이미지를 불러온다. 2. PIL에 draw.text()를.. 더보기
[Django] woojin's blog 프로젝트: 글 상세 페이지 글의 전체 목록에는 모든 내용을 표시할 수 없다. 각각의 글이 가진 모든 내용을 표시할 글 상세 페이지를 만들어보자. 페이지를 만들때마다 항상 하던 작업을 먼저 해주자 View [blog/views.py] def post_detail(request): return render(request, "post-detail.html") URLconf [config/urls.py] from blog.views import index, post_list, post_detail urlpatterns = [ path('admin/', admin.site.urls), path("", index), path("posts/", post_list), path("posts/1/", post_detail), ] Template [.. 더보기
[Django] woojin's blog 프로젝트: 유저가 업로드하는 정적파일 이전에 활용했던 정적파일은 CSS파일을 활용하여 웹 페이지를 꾸미는 것이었다. 이번엔 내가 직접 정적파일(사진)을 업로드하여 웹 페이지에 보여줘보자. 1. 유저가 업로드하는 정적파일 설정 우선 유저가 업로드한 파일에 접근할 수 있도록 경로를 설정해 주자. css파일을 가져올 떄 설정했던 것과 같이 설정해주면 된다. [config/settings.py] MEDIA_URL = 'media/' MEDIA_ROOT = BASE_DIR / 'media' 이 설정을 해주면 앞으로 유저가 업로드한 파일은 자동으로 ~PycharmProject/woojin's blog/media 에 업로드된다. 2. 정적파일을 저장하는 필드 추가 이제 데이터베이스에 정적파일이 저장되도록 만들어보자. 데이터베이스 관련한 파일은 model.. 더보기