1. 한글 폰트

🍓  그래프에서 한글을 표시하고 싶으면 matplotlib에서 사용하는 폰트를 한글 폰트로 지정해야 함

# 기본 폰트는 아래 방법을 사용해서 알 수 있다
import matplotlib
print(matplotlib.rcParams['font.family'])
# ['sans-serif']
# 폰트를 변경하려면 다음과 같이 수행.
matplotlib.rcParams['font.family'] = '폰트 이름'
matplotlib.rcParams['axes.unicode_minus'] = False


    📍 폰트를 변경하지 않으면 기본 폰트는 'sans-serif'

    📍 matplotlib.rcParams['axes.unicode_minus'] = False  

          ▶️ 한글 폰트를 지정한 후에 그래프에서 마이너스(-) 폰트가 깨지는 문제를 해결해 줌

 

import matplotlib
import matplotlib.pyplot as plt
import numpy as np

# 폰트 변경
matplotlib.rcParams['font.family'] = 'AppleGothic'
matplotlib.rcParams['axes.unicode_minus'] = False

x = np.arange(0, 5, 1)
y1 = x
y2 = x + 1
y3 = x + 2
y4 = x + 3

plt.plot(x, y1, '>-r', x, y2, 's-g', x, y3, 'd:b', x, y4, '-.Xc')
plt.legend(['데이터1', '데이터2', '데이터3', '데이터4'], loc='best')
plt.xlabel('X 축')
plt.ylabel('Y 축')
plt.title('그래프 제목')
plt.grid(True)
plt.show()

출력 결과

 


 

2. 파이 그래프  Pie chart

 

🍓  파이 그래프는 범주별 구성 비율을 원형으로 표현한 그래프
🍓  파이 그래프에서 부채꼴 부분의 크기는 각 항목의 크기에 비례
🍓  전체 데이터에서 각 항목이 차지한 비율을 비교할 때 많이 사용

plt.pie(x [, labels=label_seq, autopct='비율 표시 형식(ex: %0.1f)', 
             shadow=False(기본) 혹은 True, explode=explode_seq, 
             counterClock=True(기본) 혹은 False, startangle=각도 (기본은 0)])

 

    📍 'x' : 배열 확인 시퀀스 형태의 데이터
           ➡️ pie()는 x의 각 요소가 전체에서 차지하는 비율을 계산하고 그 비율에 맞게 부채꼴 크기를 결정해서 파이 그래프를 생성
    📍 'labels' : x 데이터 항목의 수와 같은 문자열 시퀀스(리스트, 튜플)을 지정해 각 부채꼴 이름 지정
    📍 'autopct' : 각 부채꼴 부분의 항목의 비율이 표시되는 숫자의 형식을 지정
           ➡️ 예를 들어 '%0.1f' - 소수점 첫째 자리까지 표시, '%0.0f' - 정수만 표시
           ➡️ '%0.1f%%'  - %를 추가 
    📍 'shadow' : 그림자 효과를 지정. 기본 값은 False
    📍 'explode' : 부채꼴 부분이 원에서 돌출되는 효과. 기본 값은 강조 효과가 없음
    📍 'counterClock' : x 데이터에서 부채꼴 부분이 그려지는 순서가 반시계방향(True)인지 시계방향(False)인지를 지정. 기본값은 True로 반시계 방향
    📍 'startangle' : 제일 처음 부채꼴 부분이 그려지는 각도로 x축을 중심으로 반시계 방향으로 증가. 기본값은 0

 

plt.figure(figsize = (w, h))

 

 

    📍 w와 h는 그래프의 너비 width와 높이 height 를 의미. 단위는 인치 inch.
    📍 값을 지정하지 않으면 (w, h)의 기본값은 (6, 4)
    📍 w와 h를 같은 값으로 지정하면 생성되는 그래프는 가로와 세로의 비율은 1 대 1이 됨

 


import matplotlib
import matplotlib.pyplot as plt

# 한글 폰트 사용
matplotlib.rcParams['font.family'] = 'AppleGothic'
matplotlib.rcParams['axes.unicode_minus'] = False

fruit = ['사과', '바나나', '딸기', '오렌지', '포도']
result = [7, 6, 3, 2, 2]

plt.pie(result)
plt.show()

출력 결과


# 크기를 변경해서 출력
plt.figure(figsize=(7, 7))
plt.pie(result)
plt.show()

출력 결과


# 각 부채꼴 부분에 속하는 데이터의 라벨과 비율을 추가
plt.figure(figsize=(7, 7))
plt.pie(result, labels=fruit, autopct='%.1f%%')
plt.show()

출력 결과


# 각 부채꼴 부분은 x축 기준 각도 0도를 시작으로 반시계 방향으로 그려짐
# x축 기준 각도 90도에서 시작해서 시계방향으로 그리는 예

plt.figure(figsize=(7, 7))
plt.pie(result, labels=fruit, autopct='%.1f%%', startangle=90, counterclock=False)
plt.show()

출력 결과


# 그림자를 추가하고 특정 요소(사과)를 표시한 부채꼴 부분만 강조한 예.
explode_value = (0.1, 0, 0, 0, 0)
# 0.1 : 반지름의 10% 만큼 벗어나도록 설정.

plt.figure(figsize=(7, 7))
plt.pie(result, labels=fruit, autopct='%.1f%%', startangle=90, 
        counterclock=False, explode=explode_value, shadow=True)
plt.show()

출력 결과

 

 

 

[ 내용 참고 : IT학원 강의 및 위키독스 ]


 

1. 히스토그램  Histogram

✏️  히스토그램 histogram은 데이터를 정해진 간격으로 나눈 후 그 간격 안에 들어간 데이터 갯수를 막대로 표시한 그래프

✏️  변수가 하나인 데이터의 빈도수를 막대 모양으로 나타낼 때 사용
✏️  통계분석에서 도수분포표와 히스토그램은 가장 많이 사용되는 도구이고, 데이터의 분석 및 분포를 파악하는 역할

💡 도수 분포표 이해를 위한 용어 
  · 변량 variate : 자료를 측정해 숫자로 표시한 것 (예: 점수, 키, 몸무게, 판매량, 시간 등)

  · 계급 class : 변량을 정해진 간격으로 나눈 구간 (예: 시험 점수를 60 ~ 70, 70 ~ 80, 80 ~ 90, 90 ~ 100 점 구간으로 나눔)
  · 계급의 간격 class width : 계급을 나눈 크기 (예: 위의 시험 점수를 나눈 간격은 10)
  · 도수 frequency : 나눠진 계급에 속하는 변량의 수 (예: 각 계급에서 발생한 수로 3, 5, 7, 4)
  · 도수 분포표 frequency distribution table : 계급에 도수를 표시한 표


📍  어떤 학급에서 수학 시험 결과를 이용해 도수 분포표 만드는 과정


      1. 변량 생성 : 학생 25명의 수학 시험 결과는 다음과 같음.
           ex.  76, 82, 84, 83, 90, 86, 85, 92, 72, 71, 100, 87, 81, 76, 94, 78, 81, 60, 79, 69, 74, 87, 82, 68, 79

      2. 계급 간격 설정 및 계급 생성 : 변량 중 가장 작은 숫자가 60이고 가장 큰 숫자가 100이므로 60에서 일정한 간격

                                                            (여기서는 5로 설정)으로 나누어서 다음과 같은 8개의 계급을 설정
           ex. 60 ~ 65, 65 ~ 70, 70 ~ 75, 75 ~ 80, 80 ~ 85, 85 ~ 90, 90 ~ 95, 95 ~ 100

      3. 계급별 도수 확인 및 분포표 만들기
           각 계급에 몇 개의 변량이 들어있는지 확인해 계급별로 도수를 구함. 이를 이용해 계급별로 도수를 표시한 도구 분포표 생성

           

           계급 (수학점수)                 도수        마크로 도수 표시
           60(이상) ~ 65(미만)        1                      *
           65 ~ 70                              2                     **
           70 ~ 75                              3                     ***
           75 ~ 80                              5                     *****
           80 ~ 85                              6                    ******
           85 ~ 90                              4                    ****
           90 ~ 95                              3                    ***
           95 ~ 100                            1                     *



plt.hist(x, [, bins=bins_s 혹은 'auto'])

 

   📌  x는 변량 데이터
   📌  옵션 bins는 계급의 갯수로 이 개수 만큼 자동으로 계급이 생성
         입력하지 않으면 'auto'가 되고 기본적으로 bins=10 이 됨

 

math = [76, 82, 84, 83, 90, 86, 85, 92, 72, 71, 100, 
        87, 81, 76, 94, 78, 81, 60, 79, 69, 74, 87, 82, 68, 79]
plt.hist(math)
plt.show()


# bins 를 8로 설정
plt.hist(math, bins=8)
plt.show()


 

2. 히스토그램 생성 

# 1) 데이터 읽기
import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_excel('../input/health_screenings_2020.xlsx')
data.head()

 

1)  히스토그램 그리기

# data에서 남성(data.gender==1.0)의 성별, 키 데이터만 가져옴.
man_data = data.loc[data.gender == 1.0, ['gender', 'height']]
man_data.head()

출력 결과

plt.figure(figsize=(10, 6))
# hist() 메서드로 man_data 데이터의 키를 지정하고 계급 개수 20개 등의 속성을 지정.
plt.hist(man_data['height'], bins=20, label='Man')
plt.title('2020 Health Screenings Man Height Histogram')
plt.xlabel('height')
plt.ylabel('frequency')
plt.legend()
plt.grid()
plt.show()

출력 결과

 

📌  hist() 함수의 bins 파라미터는 히스토그램의 가로축 구간의 개수를 지정

 


 

2) 그룹 히스토그램 그리기

 

✏️   그룹 히스토그램을 그리는 것은 기존 히스토그램 위에 히스토그램을 하나 더 그리는 형식

# 남성 및 여성 키 그룹 히스토그램

# data에서 남성(data.gender==1.0)의 성별, 키 데이터만 가져옴.
man_data = data.loc[data.gender == 1.0, ['gender', 'height']]
# data에서 여성(data.gender==2.0)의 성별, 키 데이터만 가져옴
woman_data = data.loc[data.gender == 2.0, ['gender', 'height']]
#%%
plt.figure(figsize=(10, 6))  # 그래프 크기 지정
# hist() 메서드로 데이터의 키를 지정하고 계급 개수 20개 등의 속성을 지정.
plt.hist(man_data['height'], bins=20, alpha=0.5, label='Man')
plt.hist(woman_data['height'], bins=20, alpha=0.5, label='Woman')

plt.title('2020 Health Screenings Man & Woman Height Group Histogram')
plt.xlabel('height')
plt.ylabel('frequency')
plt.xlim(120, 200)
plt.legend()
plt.grid()
plt.show()

출력 결과

 

 

 

 

[ 내용 참고 : IT 학원 강의 ]


 

1.  산점도 그래프

plt.scatter(x,y)

 

👩🏻‍💻  산점도 (Scatter plot)는 두 변수의 상관 관계를 직교 좌표계의 평면에 점으로 표현하는 그래프

👩🏻‍💻  서로 다른 두 연속성 변수 사이의 관계를 나타내며 연속성 변수의 상관성을 확인할 때 산점도 그래프를 사용
👩🏻‍💻  예를 들어 나이와 소득에 대한 상호 관련성 파악 등에 유용하게 사용되는데, 두 변수 간의 상관관계를 개략적으로 파악할 수 있기 때문

👩🏻‍💻  산점도에 표시되는 각 점들은 자료의 관측값을 의미하고, 각 점의 위치는 관측값이 가지는 x축, y축 변수의 값으로 결정

 

    📌  공공데이터포털에서 다운로드한 2020년 건강검진 일부 데이터 health_screenings_2020.xlsx를 이용하여 산점도 그래프를 표현

import pandas as pd
import matplotlib.pyplot as plt

# 1) 데이터 읽기
data = pd.read_excel('../input/health_screenings_2020.xlsx')
data.head()

출력 결과

height_data = df1['height']  # 키 데이터만 가져와 height_data에 저장
weight_data = df1['weight']  # 몸무게 데이터만 가져와 weight_data에 저장
height_data.head()
'''
0    175
1    150
2    155
3    165
4    160
Name: height, dtype: int64
'''
plt.figure(figsize=(10, 4))  # 그래프 크기를 지정
plt.scatter(height_data, weight_data)  # x축 데이터에 height_data, y축 데이터에 weight_data 지정
plt.title('2020 Health Screenings Scatter Graph')
plt.xlabel('height')
plt.ylabel('weight')
plt.show()

출력 결과

 


 

2) 그룹 산점도 그래프

 

✏️  누적 산점도 그래프를 그리는 것은 기존 산점도 그래프 위에 산점도 그래프를 하나 더 그리는 방식

# HDL, LDL, cholesterol 데이터를 가져와 각각의 변수에 저장.
HDL_data = df1['HDL']
LDL_data = df1['LDL']
cholesterol_data = df1['cholesterol']

plt.figure(figsize=(10, 6))  # 그래프 크기 지정

# scatter()에 x축 데이터와 y축 데이터를 지정하고 점 색상과 점 테두리 색상을 지정.
plt.scatter(cholesterol_data, LDL_data, color='r', edgecolor='w', label='Cholesterol*LDL')
plt.scatter(HDL_data, cholesterol_data, color='g', edgecolor='w', label='HDL*Cholesterol')
plt.scatter(HDL_data, LDL_data, color='b', edgecolor='w', label='HDL*LDL')

plt.title('2020 Health Screenings Group Scatter Graph')
# xlim(), ylim()으로 x축 및 y축의 최솟값과 최댓값을 지정
plt.xlim(-50, 500)
plt.ylim(-50, 500)
plt.legend()
plt.show()

출력 결과

 

 

 

 

[ 내용 참고 : IT 학원 강의 및 위키독스 ]


 

1. 막대 그래프

🚀  집단별 차이를 표현할 때 막대 그래프를 주로 사용 
       ⚡️  수량의 많고 적음 비교, 변화된 양에 대한 일별, 월별, 연별 통계 등의 비교
🚀  가독성 면에서 항목의 개수가 적으면 가로 막대가 좋고 항목이 많으면 세로 막대가 보기 편함

 

    📌  막대 그래프는 bar() 함수에 x축, y축 데이터를 지정하여 그림

import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_excel('../input/fine_dust.xlsx', index_col='area')
data2016 = data[2016]
data2016.head()
'''
area
Seoul       48.0
Gyeonggi    53.0
Incheon     49.0
Busan       44.0
Daegu       43.0
Name: 2016, dtype: float64
'''

1) 세로 막대

# 2016년 지역별 미세먼지 세로 막대 그래프
plt.figure(figsize=(15, 4))
plt.bar(data2016.index, data2016, color='g')  
# x축에 data2016의 인덱스를, y축 데이터에 data2016 값을 지정
plt.title('2016 Fine Dust Bar Graph')
plt.xlabel('area')
plt.ylabel('micrometer')
plt.ylim(35, 55)  # y축 범위를 35-55 정함
plt.grid()
plt.show()

출력 결과

 


 

2) 그룹 세로 막대 그래프

import numpy as np
index = np.arange(4)
# NumPy의 np.arange() 함수는 주어진 범위와 간격에 따라 균일한 값을 갖는 어레이를 반환

plt.figure(figsize=(15, 4))
df1 = data.loc['Seoul':'Busan', 2016:2019]  
# (행) 서울, 경기, 인천, 부산 지역의 (열) 2016~2019년 데이터만 추출.

for year in range(2016, 2020):
    chart_data = df1[year]  # 연도별로 데이터 가지고 옴.
    plt.bar(index, chart_data, width=0.2, label=str(year))  # 두께 0.2의 막대 그래프를 지정.
    index = index + 0.2   # 출력되는 위치를 0.2씩 이동
    
plt.title('2016 ~ 2019 Fine Dust Group Bar Graph')
plt.xlabel('area')
plt.ylabel('micrometer')
plt.ylim(35, 55)
# x축 눈금을 가운데로 지정하기 위해 막대그래프를 마지막 위치에서 0.5 빼주고, x축 눈금 이름을 지정.
plt.xticks(index - 0.5, ['Seoul', 'Gyeonggi', 'Incheon', 'Busan'])
plt.legend()
plt.show()

 

💡  xticks(), yticks() 함수에 파이썬 리스트 또는 NumPy 어레이를 입력하면 눈금과 숫자 레이블이 표시

 

출력 결과

 


 

3) 그룹 누적 가로 막대 그래프

 

🚀  2016 ~ 2019 지역별 미세먼지 그룹 막대 그래프를 누적하여 가로 방향으로 변경하여 표현
🚀  누적 막대 그래프를 그리는 것은 기존 막대 그래프 위에 막대 그래프를 하나 더 그리는 형식
        ▶️ 이를 위해서는 index의 위치를 변경해야 함
        ▶️ 가로 방향으로 바꾸는 것은 bar() 대신 barh()를 사용하면 됨
        ▶️ 막대 그래프를 가로 방향으로 변경했으므로 x축 및 y축 이름, x축 및 y축 눈금도 가로 방향에 맞게 변경

# 2016 ~ 2019 지역별 미세먼지 그룹 누적 가로 막대 그래프
ndex = np.arange(4)

plt.figure(figsize=(15, 4))
df1 = data.loc['Seoul':'Busan', 2016:2019]  # 서울, 경기, 인천, 부산 지역의 2016~2019년 데이터만 추출.
for year in range(2016, 2020):
    chart_data = df1[year]  # 연도별로 데이터 가지고 옴.
    plt.barh(index, chart_data, label=str(year))  # barh() 사용
    
plt.title('2016~2019 Fine Dust Group Bar Graph')
plt.ylabel('area')
plt.xlabel('micrometer')
plt.xlim(30, 55)
plt.yticks(index, ['Seoul', 'Gyeonggi', 'Incheon', 'Busan'])
plt.legend()
plt.show()

 

출력 결과

 

 

 

 

 

[ 내용 참고 : IT 학원 강의 ]


 

1.  배열의 연산

 

1) 기본 연산

 

🚀  배열 형태 (shape)가 같다면 덧셈과 뺄셈, 곱셈과 나눗셈 연산을 할 수 있음

import numpy as np

arr1 = np.array([10, 20, 30, 40])
arr2 = np.array([1, 2, 3, 4])

# 각 배열의 같은 위치의 원소끼리 더함.
print(arr1 + arr2)  # [11 22 33 44]

# 두 배열의 차는 같은 위치의 원소끼리 뺌
print(arr1 - arr2)  # [ 9 18 27 36]

# 배열에 상수를 곱하면 각 원소에 상수를 곱함
print(arr1 * 2)  # [20 40 60 80]

# 배열의 거듭제곱은 배열의 각 원소에 거듭제곱.
print(arr1 ** 2)  # [ 100  400  900 1600]

# 두 배열끼리의 곱셈은 각 원소끼리 곱함.
print(arr1 * arr2)  # [ 10  40  90 160]

# 두 배열의 나눗셈은 각 원소끼리 나눔
print(arr1 / arr2)  # [10. 10. 10. 10.]

# 배열은 비교 연산도 가능. 원소별로 조건과 일치하는지 검사한 후 일치하면 True를, 그렇지 않으면 False를 반환
print(arr1 > 20)  # [False False  True  True]

 


 

2) 통계를 위한 연산

🚀  NumPy에는 배열의 합, 평균, 표준 편차, 분산, 최솟값과 최댓값, 누적 합과 누적 곱 등 주로 통계에서 많이 이용하는 메서드가 있음
        ▶️  각각 sum(), mean(), std(), var(), min(), max(), cumsum(), cumprod()

import numpy as np

arr3 = np.arange(5)
print(arr3)  # [0 1 2 3 4]

# 합
print(arr3.sum())  # 10
# 평균
print(arr3.mean())  # 2.0
# 표준 편차
print(arr3.std())  # 1.4142135623730951
# 분산
print(arr3.var())  # 2.0
# 최솟값
print(arr3.min())  # 0
# 최댓값
print(arr3.max())  # 4

arr4 = np.arange(1, 5)
print(arr4)  # [1 2 3 4]
# 누적 합
print(arr4.cumsum())  # [ 1  3  6 10]
# 누적 곱
print(arr4.cumprod())  # [ 1  2  6 24]

 


 

3)  배열의 인덱싱과 슬라이싱

🚀  인덱싱 Indexing : 배열의 위치나 조건을 지정해 배열의 원소를 선택
🚀  슬라이싱 Slicing : 범위를 지정해 배열의 원소를 선택

1) 배열의 인덱싱

 

  👾  1차원 배열에서 특정 위치의 원소를 선택하려면 원소의 위치를 지정
  👾  배열명[위치] : 배열 원소의 위치는 0부터 시작

import numpy as np

a1 = np.array([0, 10, 20, 30, 40, 50])
print(a1[0])  # 0
print(a1[4])  # 40

# 배열을 변경
a1[5] = 70
print(a1)  # [ 0 10 20 30 40 70]

 

  👾  1차원 배열에서 여러 개의 원소를 선택
          ▶️  배열명[위치1, 위치2, ..., 위치n]

  👾  2차원 배열에서 특정 위치의 원소를 선택하려면 행과 열의 위치를 지정
          ▶️  배열명[행_위치, 열_위치]

  👾  2차원 배열의 여러 원소를 선택하기 위해서 아래와 같이 지정
          ▶️  배열명[[행_위치1, 행_위치2, ..., 행_위치n], [열_위치1, 열_위치2, ..., 열_위치n]]

# 1차원 배열
print(a1[[1, 3, 4]])  # [10 30 40]

# 2차원 배열
# 10부터 99까지 10씩 증가하는 1차원 배열을 생성한 후에 3행 3열의 2차원 배열로 모양을 바꿈.
a2 = np.arange(10, 100, 10).reshape(3, 3)
print(a2)
# [[10 20 30]
#  [40 50 60]
#  [70 80 90]]

# 2차원 배열 원소 선택
# 행 위치가 0이고, 열 위치가 2인 원소를 반환.
print(a2[0, 2])  # 30
print(a2[0][2])  # 30

# 2차원 배열의 행과 열의 위치를 지정해서 원소를 선택한 후 값을 변경할 수 있음
a2[2, 2] = 95
print(a2)
# [[10 20 30]
#  [40 50 60]
#  [70 80 95]]

# 2차원 배열 여러 원소 선택
print(a2[[0, 2], [0, 1]])  # [10 80]

 

  👾  배열에 조건을 지정해 조건을 만족하는 배열을 선택
          ▶️ 배열명[조건]

a = np.array([1, 2, 3, 4, 5, 6])
print(a[a > 3])  # [4 5 6]

# 짝수만 선택하는 예
print(a[(a % 2) == 0])  # [2 4 6]

# -인덱스도 사용가능
print(a1[-2])  # 40

 


 

2) 배열의 슬라이싱


  👾  1차원 배열의 경우 슬라이싱은 배열의 시작과 끝 위치를 지정
  👾  배열[시작_위치:끝_위치]
  👾  반환되는 원소의 범위는 '시작_위치 ~ 끝_위치 -1'
          ▶️ 시작 위치를 지정하지 않으면 0
          ▶️ 끝 위치를 지정하지 않으면 배열이 길이

 

import numpy as np

b1 = np.array([0, 10, 20, 30, 40, 50])
print(b1[1:4])  # [10 20 30]

# 1차원 배열에서 '시작_위치'와 '끝_위치'를 지정하지 않고 슬라이싱하는 예.
print(b1[:3])  # [ 0 10 20]
print(b1[2:])  # [20 30 40 50]
print(b1[:])  # [ 0 10 20 30 40 50]

# 슬라이싱을 이용해 원소를 변경할 수 있음.
b1[2:5] = np.array([25, 35, 45])
print(b1)  # [ 0 10 25 35 45 50]

# 여러 원소의 값을 같은 값으로 변경하는 예
b1[3:6] = 60
print(b1)  # [ 0 10 25 60 60 60]

 

 

 

 

 

[ 내용 참고 : IT 학원 강의 ]


 

1. 파이썬 홈페이지 이미지 추출

 

 

 

 

📌  이미지 위에 우클릭 ▶️ 이미지 주소 복사 버튼 클릭하면 url을 가져올 수 있다

 

 

 

 

 


 

🥑 os.path : 경로명과 파일명에 대한 유용한 함수를 제공하는 모듈

import requests
import os.path

# 1. 파이썬 공식 홈페이지에서 이미지 링크 가져옴
url = 'https://www.python.org/static/img/python-logo@2x.png'

resp = requests.get(url)

 

🥑  os.path.basename() : 입력받은 경로의 파일명을 반환

# 2. 파일 이름 가지고 오기
image_file_name = os.path.basename(url)  # 파일 이름 가져오기
print(image_file_name)  # python-logo@2x.png

 

# 3. 파일 저장.
with open(f'./output_image/{image_file_name}', 'wb') as image_file:
    image_file.write(resp.content)
    print("이미지 파일로 저장하였습니다.")

 

2. 야후 이미지 검색 페이지 추출

🥑 https://www.yahoo.com/ 에서 이미지 검색을 한 후 url을 들고 올 것

import requests
from bs4 import BeautifulSoup as bs
import pprint

# 1. 이미지 태그 가져오기
url = 'https://images.search.yahoo.com/search/images;_ylt=Awrg1fJPpOplRwQAMU5XNyoA;_ylu=Y29sbwNncTEEcG9zAzEEdnRpZAMEc2VjA3BpdnM-?p=bts&fr2=piv-web&fr=yfp-t'
resp = requests.get(url)
soup = bs(resp.text, 'html.parser')

tag_images = soup.select('li.ld a > img')
pprint.pprint(tag_images)

실행 결과


 

# 2. 이미지 저장
dir_save = './output_image/yahoo/'  # 저장 경로

for idx, tag in enumerate(tag_images):
    #print(tag.get('data-src'))
    resp = requests.get(tag.get('data-src'))
    with open(f'{dir_save}{idx + 1}.png', 'wb') as image_file:
        image_file.write(resp.content)
        #print(f'{idx+1} / {len(tag_images)}')  # 진행 상황 확인

 

 

 

 

 

[ 내용 참고 : IT 학원 강의 ]

+ Recent posts