728x90
728x90

분류 전체보기 292

[Python] Selenium을 이용한 동적 크롤링

- 정적 데이터와 동적 데이터의 차이 정적 데이터: 한 페이지 안에서 원하는 정보가 모두 드러나는 것 동적 데이터: 입력, 클릭, 로그인 등을 통해 데이터가 바뀌는 것 일반적인 크롤링으로는 정적 데이터(변하지 않는 데이터)만 수집할 수 있습니다. - Selenium 셀리니움을 이용하면 정적 페이지와 동적 페이지를 모두 크롤링할 수 있지만 상대적으로 속도가 느립니다. 구분 정적 크롤링 동적 크롤링 사용 패키지 requests selenium 수집 커버리지 정적 페이지 정적 / 동적 페이지 수집 속도 빠름 상대적으로 느림 파싱 패키지 beautifulsoup beautifulsoup / selenium 다양한 브라우저 및 플랫폼에서 웹 응용 프로그램을 테스트할 수 있게 해줍니다. 웹 자동화 테스트 용도로 개..

[Python] 크롤링(Crawling)

- 크롤링 주의 사항 특정 웹사이트의 페이지를 쉬지 않고 크롤링하는 행위를 무한 크롤링이라고 하는데, 이는 해당 웹사이트의 자원을 독점하게 되어 타인의 사용을 막게 되며 웹사이트에 부하를 줍니다. 일부 웹사이트의 경우 동일한 IP로 무한 크롤링을 할 경우 해당 IP의 접속을 막아버리기도 합니다. 그렇기에 하나의 페이지를 크롤링한 후 1~2초 가량 정지하고 다시 다음 페이지를 크롤링하는 것이 바람직합니다. 신문기사나 책, 논문, 사진 등 저작권이 있는 자료를 통해 부당이득을 얻는다는 등의 행위를 할 경우 법적 제재를 받을 수 있습니다. 서버에 데이터를 요청하는 형태는 다양하지만 크롤링에서는 주로 GET과 POST 방식을 사용합니다. - GET 방식 인터넷 주소를 기준으로 이에 해당하는 데이터나 파일을 요청..

[Python] Python과 SQL 연결

- pymysql 파이썬에서 SQL DB에 접속할 때 사용하는 패키지 입니다. pymysql이 설치되어 있지 않은 경우 다음과 같이 설치하면 됩니다. # window, mac pip install pymysql # conda conda install pymysql - SQL에서 데이터 불러오기 import pymysql con = pymysql.connect( user = 'root', # 사용자명 passwd = '1234', # 비밀번호 host = '127.0.0.1', # 허용 접속 IP. 일반적으로 localhost는 127.0.0.1 db = 'shop', # 사용할 데이터베이스 charset = 'utf8' # 인코딩 방법 ) # 로컬 DB 뿐만 아니라 aws와 같은 클라우드도 연결 가능 m..

[Python] ValueError: invalid literal for int() with base 10: '1.70

# -*- coding: utf-8 -*- # UTF-8 encoding when using korean height = int(input()) weight = int(input()) BMI = weight / (height * height) if BMI < 18.5: print("저체중") elif BMI < 23: print("정상") elif BMI < 25: print("과체중") elif BMI < 30: print("경도비만") elif BMI < 35: print("중도비만") else: print("고도비만") height에 1.70을 입력하니 ValueError: invalid literal for int() with base 10: '1.70' 에러가 나타났습니다. input은 문자형으..

[Python] 데이터 시각화(matplotlib, pandas, seaborne)

- 그래프 구성요소 Figure: 그림 전체 Axes: 그림 내부의 좌표측 혹은 개별 그림 Line: 선 그래프에서의 선 Markers: 점 그래프에서 점 Legned: 범례 Grid: 격자 Title: 제목 Spines: 윤곽선 X axis label: X축 라벨 Y axis lable: Y축 라벨 Major tick: 메인 눈금 Major tick label: 메인 눈금 라벨 Minor tick: 서브 눈금 Minor tick label: 서브 눈금 라벨 - Matplotlib을 이용한 그래프 그리기 import seaborn as sns import matplotlib.pyplot as plt df = sns.load_dataset('penguins') plt.scatter(df['flipper_l..

[Python] Pandas package -2

- 데이터프레임 합치기 concat(): 행 혹은 열 방향을 데이터프레임을 이어 붙이는 개념 import pandas as pd df1 = pd.DataFrame({ "A": ["A0", "A1", "A2", "A3"], "B": ["B0", "B1", "B2", "B3"], "C": ["C0", "C1", "C2", "C3"], "D": ["D0", "D1", "D2", "D3"] }, index = [0,1,2,3], ) df2 = pd.DataFrame({ "A": ["A4", "A5", "A6", "A7"], "B": ["B4", "B5", "B6", "B7"], "C": ["C4", "C5", "C6", "C7"], "D": ["D4", "D5", "D6", "D7"] }, index = [4,..

[Python] Pandas package - 1

pandas 패키지는 1차원 배열인 시리즈(Series) 및 행과 열로 이루어진 2차원 배열인 데이터프레임(DataFrame)을 통해 데이터 분석 업무를 쉽게 처리할 수 있게 해줍니다. - 시리즈(Series) 데이터가 순차적으로 나열된 1차원 배열 인덱스(index)와 값(value)은 1대1 대응 관계이며, 이는 키(Key)와 값(value)의 형태로 구성된 딕셔너리와 비슷합니다. import pandas as pd dict_data = {'a':1, 'b': 2, 'c':3} series = pd.Series(dict_data) # dictionary를 통해서 series 만들기. key값이 인덱스가 됨. series.index # series의 index 반환 series.values # seri..

[Python] Mac How to fix ModuleNotFoundError: No module named 'Crypto'

pip3 install pycryptodome 터미널에서 package를 설치했지만 여전히 IDLE에서는 ModuleNotFoundError가 떴습니다. https://sebhastian.com/modulenotfounderror-no-module-named-crypto/ How to fix ModuleNotFoundError: No module named 'Crypto' in Python sebhastian.com 처음 시도해본 해결방법은 위와 같습니다. 1. pip uninstall crypto pycrypto pip install pycryptodome # For pip3: pip3 uninstall crypto pycrypto pip3 install pycryptodome 2. # if you d..

[MySQL] MySQL 비밀번호 변경

터미널을 켜서 root 계정으로 로그인합니다. mysql -u root -p # 기본 비밀번호를 이용해서 로그인 mysql DB를 사용합니다. use mysql; password 변경 쿼리를 적용합니다. (버전 별로 다름) # username = 'root', Host = 'localhost'라고 가정 # 'new password'에는 바꾸고 싶은 비밀번호를 입력 # version 5.6 이하 > update user set password=password('new password') where user = 'root'; # version 5.7 이상 > update user set authentication_string=password('new password') where user = 'root'; ..

[MySQL] upsert에 대한 이해

upsert 입력하고자 하는 데이터가 기존 테이블에 값이 있는 경우 새로운 데이터로 업데이트하고, 값이 없는 경우 새로운 데이터를 추가하는 기능 import pandas as pd from sqlalchemy import create_engine from sqlalchemy_utils import create_database create_database('mysql+pymysql://root:1234@127.0.0.1:3306/exam') # 마지막에 만들고 싶은 데이터베이스 이름 입력 price = pd.DataFrame({ "날짜": ['2021-01-02', '2021-01-03'], "티커": ['000001', '000001'], "종가": [1340, 1315], "거래량": [1000, 20..

728x90
728x90