본문 바로가기

전체 글339

[웹 크롤링] 벅스에서 Top 100 노래 제목 크롤링하기 벅스 뮤직에서 차트 탑 100 노래의 제목 가져오기 1. html 구조보기 마우스 우클릭 > 검사 > 요소 탑100 노래 제목이 어떤 구조 안에 있는지 살펴보기 2. 크롤링 코드 작성 import requests from bs4 import BeautifulSoup import pandas as pd def creatDf(result_list): result_pf = pd.DataFrame({'title': result_list}) return result_pf def crawler(soup): tbody = soup.find("tbody") result = [] for p in tbody.find_all("p", class_="title"): result.append(p.get_text().replac.. 2023. 8. 4.
[웹 크롤링] 네이버 연합뉴스의 타이틀 크롤링 네이버 뉴스 페이지에서 헤드라인만 크롤링하기 이번엔 웹에서 원하는 데이터만 뽑아 추출하는 것을 시작해보자! 가장 먼저 네이버 뉴스 페이지의 헤드라인을 크롤링해본다. 크롤링을 원하는 부분은 다음과 같다. 🚴‍♂️ Requests & Beautifulsoup 라이브러리 사용 - Requests 는 API 호출시에도 사용되며, 기본적으로 웹사이트 크롤링에 많이 쓰임. - 샘플 코드 : url 로부터 상태코드를 받는 과정 import requests from bs4 import BeautifulSoup url = "https://www.naver.com" #요청 url 변수에 담긴 url의 html 문서 정보 출력 req = requests.get(url) print(req.status_code) 1. 크롤링하.. 2023. 8. 4.
[웹 크롤링] 로컬 html 파일에서 데이터 가져오기 웹 크롤링 시작하기 보통 크롤링 대상은 웹페이지이지만, 간단히 로컬파일 데이터를 크롤링하는 것부터 시작해보자. ❗어떤 프로젝트를 하든, 디렉토리(폴더)와 파일의 경로가 중요하다. >> 본 포스팅에서는 최상위 폴더를 편의상 crawling 으로 가정한다. 어떤 프로젝트를 하든, 디렉토리(폴더)와 파일의 경로가 중요하다. 본 포스팅에서는 최상위 폴더를 편의상 crawling 으로 가정한다. 1. 필요한 라이브러리 설치 vs code 열기 requirements.txt 를 통해 필요한 라이브러리 작성 (프로젝트 최상위 폴더에) 터미널에 명령어 입력하여 라이브러리 설치 pip install -r requirements.txt selenium webdriver-manager numpy pandas scikit-l.. 2023. 8. 4.
[Django] 엑셀 데이터 출력 페이지 만들기(부록) - 결과값을 표로 깔끔하게 보여주기(pandas dataframe > django) 웹페이지에 엑셀 데이터의 값들을 요약해서 보여주는 것까지 완성했다. 그런데 좀 더 가독성있게 표로 제시하는 방법도 찾아보았다.👀 여기서는 pandas 데이터프레임을 django에서 html에 표시되게 하는 방법을 살펴본다. 1. result 함수 수정 calculate > views.py > calculate 함수 수정 기본적으로 result 함수에 출력되는 결과값을 데이터프레임으로 변환하고, 세션에 저장해야한다. 이를 위해 calculate 함수를 먼저 수정한다. grade 별 value 통계량 요약 groupby 함수를 사용 : grade 컬럼을 기준으로, value 값에 min, max, mean 함수를 적용 index를 새로고침하고, 컬럼 값을 재지정 깔끔한 출력을 위해 min, max, mean.. 2023. 8. 3.
__init__ 메서드란? __init__ 이란? 파이썬에서 클래스의 생성자 메서드를 표현하는 특별한 메서드이다 클래서를 인스턴스화(객체 생성) 할 때 자동으로 호출되는 메서드로, 객체의 초기 상태 설정이나 초기화하는 데 사용된다 클래스, 객체, __init__ 의 관계 클래서는 객체를 생성하는 일종의 템플릿으로 볼 수 있다 여기서 __init__ 메서드는 객체가 생성 될 때, 각 객체의 속성을 초기화하는 역할을 한다 🧐 예시 코드를 보자! class MyClass: def __init__(self, arg1, arg2, ...): # 초기화 코드 self.arg1 = arg1 self.arg2 = arg2 # ... self 는 클래스의 인스턴스 자체를 가르키는 특별한 매개변수이다 self 를 통해 클래스의 속성에 접근하고 수정.. 2023. 8. 3.
[Django] 엑셀 데이터 출력 페이지 만들기(7) - 로그아웃 1. 로그인 함수를 확인하여 로그아웃 되는 경우를 체크 main > view.py >> login 함수 예외처리 추가 사용자 이메일이 등록(회원가입)되지 않은 경우엔 "로그인실패"로 연결되도록 함 이메일이 확인되었다면, 사용자 정보를 넘겨 패스워드 일치 여부를 확인하게 됨 def login(request): # 로그인된 사용자만 이용할 수 있도록 구현 # 현재 사용자가 로그인된 사용자인지 판단하기 위해 세션 사용 (verify 함수에서 만든 세션) # 세션 처리 진행 loginEmail = request.POST['loginEmail'] loginPW = request.POST['loginPW'] # 로그인 시도 시: user 모델에 접근 후, 사용자가 입력한 이메일로 탐색 시도 # 회원 미가입 또는 비.. 2023. 8. 3.
[Django] 엑셀 데이터 출력 페이지 만들기(6) - result 페이지 구성 🧑🏻‍💻 앞서 실행한 결과값을 세션에 저장하여 result 페이지에 보여줘야 한다 1. calculate 함수를 이어서 작성한다 calculate > views.py >> calculate(request) 결과 값 2개의 딕셔너리를 세션에 저장하는 것! # 결과 값을 세션에 추가 / Pandas 데이터타입을 파이썬 기본데이터 타입으로 변환필요 grade_calculate_dic_to_session = {} for key in grade_list: grade_calculate_dic_to_session[int(key)] = {} grade_calculate_dic_to_session[int(key)]['max'] = float(grade_calculate_dic[key]['max']) grade_calcu.. 2023. 8. 3.
[Django] 엑셀 데이터 출력 페이지 만들기(5) - 엑셀 파일 업로드, 요약 정보 출력해보기 1. 엑셀 파일 업로드와 관련된 html 파일 수정 action 지정 : "calculate/" 로 연결되게 함 enctype 지정 : 폼 데이터(form data)를 서버로 전송할 때 데이터의 인코딩 방식을 지정 🧐 프로젝트 폴더인 ExcelCalculate > urls.py 확인 - path('calculate/', include('calculate.urls'), name="calculate") - 위 패스가 지정되어 있음을 확인 >> 즉, calculate 앱으로 이동한다는 것 👀 calculate > urls.py 확인 - path('', views.calculate, name="calculate_do") - 즉, 이제 calculate 함수를 정의하면 됨! 2. 함수 정의 calculate > .. 2023. 8. 2.
[Django] 엑셀 데이터 출력 페이지 만들기(4) - 로그인 기능 구현 회원가입부터 인증까지 완료한 상태로 (3)을 종료했다. 이제 로그인 기능을 구현해보자. 로그인 기능 구현 1. login action 정의 main > templates >> signin.html 로 접속 html action 수정 : "signin/login" 2. signin/login 액션과 연결되는 url을 지정 main > urls.py path 추가 : views.login >> login 함수 정의하러 가야함! 3. 로그인 관련 함수 처리 : login, index, result url에서 처리할 함수 지정할 차례이다 main > views.py login, index, result 함수를 차례로 작성한다 (1) def login() 로그인이 진행되는 과정을 생각해보자 먼저, 로그인된 사용자.. 2023. 8. 2.
728x90