EASY PEASY CODING

[파이썬] 웹 스크래핑 본문

Python/Basic

[파이썬] 웹 스크래핑

richpotato 2023. 10. 19. 09:27

멀티 프로세싱을 이용한 웹스크래핑 

 

requests와 BeautifulSoup을 사용하여 웹 페이지를 가져오고 파싱

pip install requests beautifulsoup4

 

코드예시

import requests
from bs4 import BeautifulSoup as bs
import time 
from multiprocessing import Pool

# 스크래핑 대상 컨텐츠:  https://beomi.github.io/beomi.github.io_old/

# 하이퍼 링크 읽어오기
def get_links():
    data = requests.get("https://beomi.github.io/beomi.github.io_old/").text
    soup = bs(data, 'html.parser')
    print(type(soup))  # <class 'bs4.BeautifulSoup'>
    my_titles = soup.select('h3 > a')
    data = []
    
    for title in my_titles:
        data.append(title.get('href'))
        
    return data

def get_content(link):
    abs_link = "https://beomi.github.io" + link  # full url 완성
    # print(abs_link)
    data = requests.get(abs_link).text
    print(data)
    # soup=bs(data,'html.parser')
    # print(soup.select('h1')[0].text)
    
    
if __name__ == '__main__':
    # print(get_links())
    # print(len(get_links()))
    start_time = time.time()
    
    '''직렬처리
    for link in get_links():
        get_content(link) 
    '''    
    
    # 병렬처리, 프로세스 네개를 사용하고 있습니다, 자원은 더 사용하지만 속도는 더 빨라짐
    pool = Pool(processes=4)
    pool.map(get_content, get_links())
    
    print("---%s 초---" % (time.time() - start_time)) 
    
    # Pool을 사용하여 병렬 처리 완료

 

 

 

추가 설명

  • get_links(): 웹 페이지에서 하이퍼링크를 읽어오는 함수입니다.  requests 라이브러리를 사용하여 웹 페이지를 가져와 BeautifulSoup을 이용해 파싱합니다. 그 후, 선택자를 사용해 원하는 링크를 추출합니다.

  • get_content(link): 링크를 받아 해당 페이지의 내용을 가져오는 함수입니다. 전체 URL을 완성시킨 후, requests를 사용해 해당 페이지를 가져옵니다.

  • if __name__ == '__main__':: 메인 모듈에서 실행되도록 하는 블록입니다. Windows에서 multiprocessing 모듈을 사용할 때 필요합니다.

 

 

 

각각에 대한 처리 시간 비교

직렬: ---26.34516739845276 초---
병렬: ---13.443757057189941 초---