BootCamp/모두의연구소:오름캠프

24.01.16

혼복필 2024. 1. 16. 17:31
728x90
300x250
SMALL

오늘 오전도 LMS를 이용하여 강의 시청 후 오후 시간에 Python 심화에 들어갔습니다.

크롤링과 Django는 LMS를 통해 알아보았고 오늘은 크롤링 이론에 대해 정리하였습니다.

Django는 나중에 또 다룰 것이기 때문에 그때 정리해 보도록 할게요.

Python 심화로는 메서드 체이닝, 일급함수와 고차함수, 여러 값의 반환과 재귀 함수까지 알아보았습니다.

 

크롤링 (Crawling)

개인 혹은 단체에서 필요한 데이터가 있는 웹(Web)페이지의 구조를 분석하고 파악하여 긁어옴

데이터를 추출한다로 설명할 수 있으며 크롤링이라는 행위를 하는 소프트웨어(혹은 프로그램)를 크롤러(Crawler)라고 부름

Python을 이용한 beautifulsoup과 selenium을 활용하여 머신러닝과 딥러닝의 데이터로 사용할 수 있는 텍스트화된 데이터를 만들 수 있음

= 웹 크롤링과 웹 스크래핑의 주요 차이점은 각 프로세스

웹 크롤링은 웹사이트에 대한 정보를 색인화하고 저장하는 데 사용

웹 스크래핑은 분석 및 기타 목적을 위해 웹사이트에서 데이터를 추출하는 데 사용

웹 크롤링은 일반적으로 검색 엔진 및 기타 자동화 도구에 의해 수행

웹 스크래핑은 종종 사람 또는 이 목적을 위해 특별히 설계된 자동화 도구에 의해 수행

 

 

pip install beautifulsoup4 # beautifulsoup 설치

 

import requests
from bs4 import BeautifulSoup
url = '크롤링 하고싶은 url 주소'
response = requests.get(url)
if response.status_code == 200 : # 응답코드가 200일 때 받아와서 soup 객체로 변환
    html = response.text
    soup = BeautifulSoup(html, 'html.parser')

    title = soup.select_one('#s_content > div.section > ul > li:nth-child(1) > dl > dt > a')

    # select_one 은 하나의 html 요소를 찾는 함수

    # css 선택자를 사용해서 찾을 수 있음, 복사한 css 선택자를 select_one 함수의 인자로 넣기
    print(soup)
else : 
    print(response.status_code)

 

print(title.get_text())

# 텍스트만 뽑아오고 싶을 때 get_text() 함수를 사용

 

메서드 체이닝 (Method Chaining)

여러 메서드 호출을 연결하여 코드를 더 간결하고 읽기 쉽게 만드는 기술

한 객체의 메서드를 호출한 후 반환된 결과를 사용하여 다른 메서드를 계속 호출하는 방식 = 코드를 간결하게 작성

 

ex) 메서드 체이닝을 활용하여 여러 문자열 연산을 한 라인에서 수행

'Hello World'.replace('Hello', 'hi').lower()

# 출력: hi world

 

'Hello World'.replace('Hello', 'hi') 

# 출력: hi World

# 수행된 결과에 다시 lower를 실행

'hi World'.lower() 

# 출력: hi world

 

'Hello World'.split(' ').lower() 

# error

 

'Hello World'.split(' ') 

# 출력: ['Hello', 'World']

['Hello', 'World'].lower() 

# error

# 이 코드의 반환값인 리스트에는 lower 메서드가 없어서

# 메서드 체이닝을 사용하기 위해서는 앞에서 반환된 값이 어떤 값인지가 중요

 

ex) 메서드를 길게 사용할 때 (보통 가독성 때문에 연달아 사용하는 경우는 없음)

'Hello World'.replace('Hello', 'hi').replace('world', 'python').lower().replace(' ', '')

# 부득이하게 코드를 작성할 땐 백슬래시(\)를 사용하여 메서드 체이닝을 여러 줄로 나눌 수 있음

# 앞에 공백도 삽입 가능

'Hello world'\
    .replace('Hello', 'hi')\
    .replace('world', 'python')\
    .lower()\
    .replace(' ', '')

 

일급 함수 (First-Class Function)

프로그래밍 언어가 함수 (또는 메서드)를 일급 시민(값)으로 취급하는 것을 의미

= 함수를 다른 객체와 동일하게 취급하겠다는 것

1. 함수를 변수에 할당할 수 있음

= 해당 변수를 새로운 함수 이름처럼 사용할 수 있음, 클래스의 메서드 또한 변수로서 관리 가능

2. 함수를 데이터 구조에 저장할 수 있음

= 데이터처럼 유연하게 관리하고 조작 가능

3. 함수를 인자로 다른 함수에 전달할 수 있음 

= 함수를 다른 함수의 매개변수로 전달, 유연성을 높일 수 있으며 콜백 패턴 등 다양한 패턴 구현 가능

4. 함수를 결과로써 반환할 수 있음

= 클로저(Closures) 등의 고급 기능을 구현할 수 있음

클로저(Closures) : 함수 내 함수가 외부 변수를 참조하여 보존하는 것

 

고차 함수 (Higher-order functions)

하나 이상의 함수를 인자로 받아들이거나 함수를 결과로 반환하는 함수

함수를 변수에 할당 or 데이터 구조에 저장 or 다른 함수의 인자로 전달, 반환할 수 있음

1. 함수를 아규먼트로 전달

= 다른 함수를 매개변수로 받아 그 함수의 동작을 활용하는 방식

2. 함수를 반환값으로 사용

= 함수 내부에서 또 다른 함수를 정의하고 이를 반환하여 동적으로 다양한 동작을 하는 함수를 생성할 수 있음

 

+ 여러 개의 값 반환

= 여러 값을 반환하려면, 그 값들을 쉼표로 구분하여 return 문에서 반환하면 됨

반환된 값들은 튜플로 묶임, 이후 호출자는 튜플을 여러 개의 개별 변수에 분해하여 각 값을 개별적으로 접근 가능

 

ex) 두 숫자를 받아 합과 차를 반환

def add_and_subtract(x, y) :

# add_and_subtract : 두 개의 값을 한 번에 반환
    addition = x + y
    subtraction = x - y
    return addition, subtraction
# 함수 호출
result = add_and_subtract(5, 3)
# 결과 출력
print(result)  

# 출력: (8, 2)

 

재귀함수 (Recursion)

함수 내부에서 자신을 다시 호출하여 작동하는 함수

반복적인 작업을 수행할 수 있으나 무한 반복을 피하기 위해 종료 조건이 필요함

 

1. 무한 반복에 종료 조건 부여

2. 팩토리얼 함수 (Factorial)

3. 문자열 거꾸로 출력

 

728x90
300x250
LIST

'BootCamp > 모두의연구소:오름캠프' 카테고리의 다른 글

24.01.18  (1) 2024.01.18
24.01.17  (0) 2024.01.17
24.01.15  (1) 2024.01.15
24.01.12  (0) 2024.01.12
24.01.11  (6) 2024.01.11