[Python] 크롤링 방법과 비교 (requests, BeautifulSoup, selenium)

2022. 2. 17. 23:04·Engineering/Tools

Python에서 웹 크롤링을 하는 방법은 두 가지가 있다. 

  1. requests 라이브러리로 웹 정보를 받고, BeautifulSoup로 파싱한다. 
  2. selenium 라이브러리로 브라우저를 열어 웹 정보를 받는다. 

 

보통 웹 컨트롤이 필요할 경우(클릭)에는 selenium을 활용하고, 그렇지 않다면 requests 방법을 이용하는 것이 일반적이다. 

왜냐하면 selenium은 웹 브라우저를 여는 과정에서 많은 시간이 소요되기 때문에 비교적 속도가 빠른 requests가 좀 더 유리하기 때문이다. 

 

🤔 궁금한 것

그렇다면.... 만약 웹 컨트롤이 필요해서 selenium을 통해 웹 브라우저를 열어놓은 상태에서 웹 정보를 어떻게 가져오는 게 더 빠를까? 

이번에는 그것을 알아볼 것이다. 

 

👀 실험 준비

이번에 크롤링할 대상은 삼성전자 종목 토론실이다. 여기서 표시된 빨간색 네모 박스를 가져올 것이다. 

오늘도 평화로운 종목토론실...

웹에서 원하는 요소를 가져오는 방법은 여러가지가 있다. (xpaths, tag name 등등...) 이번에는 selector를 사용할 것이다. 해당 요소는 아래와 같이 구할 수 있고, 해당 요소는 #content > div.section.inner_sub > table.type2 > tbody 이다.

 

Chrome 브라우저 + F12

 

 

1. requests


url = 'https://finance.naver.com/item/board.naver?code=005930'
r = requests.get(url, headers={'User-Agent': 'Mozilla/5.0'})
soup = BeautifulSoup(r.content, 'html.parser')
table = soup.select_one('#content > div.section.inner_sub > table.type2 > tbody')

위와 같이 구현했고, 0.988초의 결과를 얻었다. 요소를 찾는 작업은 정말 짧은 시간에 수행된다. 웹 정보를 가져오는 작업과 정보를 파싱하는 작업이 대부분의 시간을 차지하는 것을 알 수 있다. 

그렇다면 selenium은 어떨까? 

 

 

2. selenium


start_time = time.time()
url = 'https://finance.naver.com/item/board.naver?code=005930'
driver = webdriver.Chrome('./data/chromedriver.exe')
driver.get(url)
table = driver.find_elements_by_css_selector('#content > div.section.inner_sub > table.type2 > tbody')
driver.quit()

결과는 약 4.655초... 가 나왔다. requests와 비교했을 때 5배 정도 차이가 난다. 브라우저가 열고 닫히는 과정에서 많은 시간이 소요되는 것은 맞으나, 순수 요소를 찾는 시간이 4배 차이가 나는 것을 알 수 있다.

아무래도 selenium에서는 요소를 가져올 때, 웹 컨트롤을 위한 정보를 가져오기 때문에 시간 차이가 나는 것으로 예상된다. 

 

 

3. 결론


  1. requests 라이브러리로 웹 정보를 받고, BeautifulSoup로 파싱한다. 👉 0.988초
  2. selenium 라이브러리로 브라우저를 열어 웹 정보를 받는다. 👉 4.655초

웹 컨트롤이 필요해서 selenium으로 웹 브라우저를 열어 아까울 수 있으나, requests로 웹 정보를 다시 불러와 요소를 찾는 것이 훨씬 빠르다. 🤗

 

'Engineering > Tools' 카테고리의 다른 글

[MongoDB] Timezone(타임존) 문제와 해결 (feat.Python)  (0) 2022.02.19
[Python] 참조한 모듈이 다른 모듈을 참조할 수 없는 경우 해결 (다른 모듈 참조하기)  (0) 2022.02.18
터미널 종료 후에도 프로세스 실행 (feat. Selenium 작동시 유의사항)  (0) 2022.01.05
EC2에 Selenium 환경 구축하기 (feat. Chrome, Chrome Driver)  (0) 2022.01.05
최초 EC2에 PIP 설치  (0) 2022.01.05
'Engineering/Tools' 카테고리의 다른 글
  • [MongoDB] Timezone(타임존) 문제와 해결 (feat.Python)
  • [Python] 참조한 모듈이 다른 모듈을 참조할 수 없는 경우 해결 (다른 모듈 참조하기)
  • 터미널 종료 후에도 프로세스 실행 (feat. Selenium 작동시 유의사항)
  • EC2에 Selenium 환경 구축하기 (feat. Chrome, Chrome Driver)
AI건축가
AI건축가
LLMOps Engineer로 커리어를 쌓고 있습니다. 저만의 시점으로 AI를 해석하고자 노력합니다. 함께 배우고 성장하는 공간이 되었으면 좋겠습니다. 😊🚀
  • AI건축가
    DeepFlame AI
    AI건축가
  • 전체
    오늘
    어제
    • 분류 전체보기
      • AI
      • Ops
      • Engineering
        • Algorithm
        • CS
        • BigData
        • Tools
      • Personal
        • Toy Project
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    db
    hadoop
    Bio
    AWS
    PostgreSQL
    mongoDB
    MSA
    Ai
    ec2
    Cloud
    kubernetes
    deepseek
    airflow
    Python
    세미나
    LeetCode
    DP
    mlops
    algorithm
    Hive
    scala
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
AI건축가
[Python] 크롤링 방법과 비교 (requests, BeautifulSoup, selenium)
상단으로

티스토리툴바