파이썬 크롤링 스크래핑 간단 설명(예제)

네이버나 구글에 크롤링으로 검색을 하면 파이썬으로 작성된 크롤링 또는 스크래핑 관련 문서들을 많이 볼 수 있는데, 문서마다 사용하는 모듈도 다르고 사용하는 방식도 조금씩 차이가 있다는 것을 알 수 있습니다. 파이썬이 처음 접하는 컴퓨터 언어인 분들은 상당히 혼란스러울 수도 있을 것 같아 네이버 실시간 검색어 스크래핑 실습을 통해 간단하게나마 설명하고자 합니다.

용어 정리 크롤링 VS 스크래핑

크롤링과 스크래핑은 동일한 의미인 것처럼 사용되며 대부분 크롤링으로 칭하는 경우가 많습니다. 사람마다 용어의 정의를 다르게 하고 있는데 어떤 이는 스크래핑이 크롤링의 상위 개념처럼 말씀하시는 분도 계시고 서로 완전히 다른 개념이라고 말씀하시는 분도 있습니다. 용어가 중요한 것은 아니지만 개념 정도는 알고 있는 게 좋을 것 같습니다.

제 주관적인 생각으로 정의를 하자면
크롤링은 인터넷 상에 있는 불특정 웹 사이트를 방문해 어떤 링크에 어떤 정보가 있는지 수집하고 색인하는 즉, 검색 사이트의 봇(구글 봇)이 하는 행위

스크래핑은 정해진 특정 웹사이트에서 특정 데이터를 추출하고 가공하는 작업으로 필요한 정보 만을 스크랩하는 행위 참고로 파싱은 스크래핑의 상위 개념 정도 아닐까 생각합니다.

모듈(라이브러리)

파이썬으로 스크래핑을 하는 데 있어 가장 간단하고 간편한 방법을 선택했습니다. http 웹 클라이언트는 파이썬에 내장된 표준 라이브러리인 urllib 보다 사용이 편한고 간단한 3rd party 라이브러리인 requests를 사용합니다. 참고로 urllib2는 파이썬 2.7버전용입니다.

html 페이지를 긁어오기 위한 파서는 사용이 간편한 Beautiful Soup을 사용합니다.(뷰티풀 수프 외에 Scrapy 또는 selenium을 이용할 수 있다.) 또한 뷰티풀 수프에서는 find(find_all) 대신 사용이 간단한 CSS 선택자인 select_one(select)를 사용합니다.

requests DOC : http://docs.python-requests.org/en/master/
Beautiful Soup DOC : https://www.crummy.com/software/BeautifulSoup/bs4/doc/

실습전 모듈 설치

  • requests : pip install requests
  • beautifulsoup4 : pip install beautifulsoup4

실행 환경

OS : 윈도우 10
IDE : VScode
Python : 3.7
beautifulsoup4 : 4.6.3
requests : 2.19.1

네이버 실시간 검색어 스크래핑


import requests
from bs4 import BeautifulSoup

resp = requests.get('https://www.naver.com/')
soup = BeautifulSoup(resp.text, 'html.parser')
titles = soup.select('.ah_roll .ah_k')  # 타이틀(제목)을 가지고 있는 클래스 명

for title in titles:
    print(title.get_text())

  1. requests와 BeautifulSoup을 임포트 한다.
  2. 요청할 웹 사이트의 주소를 입력하고 응답 값을 변수(resp)에 담는다.
  3. 요청 사이트로부터 응답받은 값을(resp.text) 뷰티풀 수프의 html 파서를 이용해 html로 정렬 시킨 후 변수(soup)에 저장한다.
  4. 저장된 HTML(soup)에서 검색어 제목만 변수(titles)에 담는다.
  5. 저장된 실시간 검색어를 루프 문을 이용해 하나씩 출력한다.

살펴보기

브라우저의 개발자 도구(F12)를 통해 소스를 보면 실시간 검색어에 대한 코드가 두 군데에 있습니다. 하나는 클래스 명이 ah_roll 시작하는 곳이고 또 하나는 클래스 명이 ah_list로 시작합니다.

html 소스

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

우리가 가지고 오려고 하는 것은 검색어 즉, 제목이 필요한데 두 군데다 제목 클래스 명이 ah_k로 똑같습니다. ah_k로만 선택하게 되면 1위부터 20위까지 20개의 제목이 아니라 40개의 중복된 제목을 가져옵니다.

html 코드

중복되지 않게 한곳에서만 데이터를 가져오려면 ah_k 클래스의 상위 클래스를 이용해야 합니다. 여기서는 첫 번째에 있는 ah_roll 클래스를 이용하도록 하겠습니다.

select VS find_all

위 예제를 보면 select를 사용 했습니다. 만약 find_all을 이용 한다면 titles = soup.find_all(class_="ah_roll")) 하나에 클래스 명만 넣을 수 있습니다. 즉, 자손이나 자식 요소를 직접 선택 할 수는 없고 한 번 더 변수에 담든지 아니면 루프 문을 이용해야 합니다.

반면 select를 이용할 경우 CSS 선택자를 이용하는 것처럼 사용할 수 있습니다. 예를 들어 자손을 직접 선택하거나 두 번째 자식만을 선택할 수도 있고 마지막 자식 요소만을 선택 할 수도 있습니다. 위 예제에서 사용된 코드를 보면 클래스 명 ah_roll의 자손인 ah_k 클래스를 바로 선택했습니다. 참고로 자손 요소를 선택 할 때는 한 칸 띄기를 이용하면 됩니다.

find(find_all)보다 select_one(select)가 사용이 더 편한것 같습니다.

뷰티풀 수프 셀렉트 사용법 : https://www.crummy.com/software/BeautifulSoup/bs4/doc/#css-selectors



출처: https://wonderbout.tistory.com/31 [원더바웃]

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
62 PS4 프로 자동 구입 매크로 만들기 -2- file 졸리운_곰 2020.11.21 512
61 PS4 프로 자동 구입 매크로 만들기 -1- file 졸리운_곰 2020.11.21 517
60 Zappa를 이용해 AWS Lambda에 Flask 올리기 file 졸리운_곰 2020.10.25 455
59 Python WAS 구축하기 ( Django, Nginx, Gunicorn ) file 졸리운_곰 2020.10.25 430
58 Python SimpleHTTPServer file 졸리운_곰 2020.10.25 421
57 [Django] 설문조사 애플리케이션 예제 (3) - 구현하기 file 졸리운_곰 2020.09.07 591
56 [Django] 설문조사 애플리케이션 예제 (2) - Model 다루기 file 졸리운_곰 2020.09.07 503
55 ????[Django] 설문조사 애플리케이션 예제 (1) - Django 프로젝트 구조 알아보기???? file 졸리운_곰 2020.09.07 409
54 [Python 데이터 수집] 웹 페이지 컨텐츠 수집 file 졸리운_곰 2020.08.08 468
53 파이썬 네이버 실시간 검색어 스크래핑(크롤링) file 졸리운_곰 2020.05.09 469
» 파이썬 크롤링 스크래핑 간단 설명(예제) file 졸리운_곰 2020.05.09 577
51 Web Screen Scraping with Python to Populate SQL Server Tables file 졸리운_곰 2020.02.27 469
50 [네이버 뉴스 스크래핑/크롤링] NNST - 한국어 네이버 뉴스 데이터셋 file 졸리운_곰 2020.01.21 434
49 네이버 뉴스 크롤러 github naver_news_crawling_perfect.py 졸리운_곰 2020.01.19 633
48 Getting Started with Web Automation Testing using Selenium and Python 졸리운_곰 2019.12.25 365
47 Apache와 Python을 CGI로 연동하기 file 졸리운_곰 2019.10.24 384
46 파이썬 구현의 blog API : MetaWeblog API (MWA) implemented in Python file 졸리운_곰 2019.02.08 438
45 아파치서버와 파이썬 연동 - 웹에서 파이썬실행 졸리운_곰 2019.01.03 1258
44 Python Django 프로젝트를 위한 Jenkins 설정 : Assembling a Continuous Integration Service for a Django project on Jenkins file 졸리운_곰 2018.11.03 1348
43 Django + djangorestframework + django_rest_swagger 시작 file 졸리운_곰 2018.05.27 430
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED