크롤링 하는 법 | 파이썬 웹 크롤링 하기 – 너무 간단해서 민망합니다. 상위 138개 베스트 답변

당신은 주제를 찾고 있습니까 “크롤링 하는 법 – 파이썬 웹 크롤링 하기 – 너무 간단해서 민망합니다.“? 다음 카테고리의 웹사이트 ppa.maxfit.vn 에서 귀하의 모든 질문에 답변해 드립니다: https://ppa.maxfit.vn/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 기술노트with 알렉 이(가) 작성한 기사에는 조회수 55,181회 및 좋아요 617개 개의 좋아요가 있습니다.

뉴스부분의 HTML을 파싱하기위해서 크롬 브라우저를 열고 newstapa.org 사이트를 열어주세요. 1. F12키를 눌러 개발자 도구를 사용합니다. 2. 왼쪽에 커서 버튼을 눌러 뉴스 하나를 선택하여, 뉴스를 감싸고 있는 최상의 div태그를 찾습니다.

크롤링 하는 법 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 파이썬 웹 크롤링 하기 – 너무 간단해서 민망합니다. – 크롤링 하는 법 주제에 대한 세부정보를 참조하세요

#파이썬#웹크롤링#크롤링#방법 간단하게 웹 사이트 크롤링하는 거 설명드려요~
소스입니다.
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen(\”https://news.naver.com/\”)
bsObject = BeautifulSoup(html, \”html.parser\”)
#for link in bsObject.find_all(‘a’):
# print(link.text.strip(), link.get(‘href’))
for link in bsObject.find_all(‘img’):
print(link.text.strip(), link.get(‘src’))

크롤링 하는 법 주제에 대한 자세한 내용은 여기를 참조하세요.

크롤링(crawling) 이해 및 기본 – 잔재미코딩

HTML의 태그를 파싱해서 필요한 데이터만 추출하는 함수를 제공하는 라이브러리 · BeautifulSoup 라이브러리 페이지 · 설치 방법. pip install bs4 · 참고: BeautifulSoup 4 …

+ 자세한 내용은 여기를 클릭하십시오

Source: www.fun-coding.org

Date Published: 10/21/2022

View: 3476

합법적으로 ‘웹 크롤링’하는 방법 (上) – 요즘IT

웹 크롤링(Web Crawling)이란 기본적으로 웹 상에 존재하는 데이터를 자동적으로 탐색하는 행위를 의미합니다. 여기서 말하는 ‘웹’은 흔히 알고 있는 …

+ 여기에 보기

Source: yozm.wishket.com

Date Published: 4/27/2021

View: 1287

문과생도 할 수 있는 웹 크롤링 (1) – 웹 데이터 크롤링 준비

데이터 수집 방법. 크롤링 기법은 내가 생각하기에 크게 4가지로 구분된다고 생각한다. 서비스에서 제공하는 오픈 API 활용; HTML 태그 정보를 기반 …

+ 여기에 보기

Source: sacko.tistory.com

Date Published: 1/22/2021

View: 5750

[1] 웹 페이지 크롤링하기(Web Crawling) – Xsop의 개발일기

많은 사람들이 크롤링이랑 스크래핑이란 헷갈려합니다. 스크래핑은 ‘인터넷에서 존재하는 데이터를 컴퓨터 프로그램을 통하여 자동화된 방법으로 웹에서 …

+ 여기를 클릭

Source: xsop.tistory.com

Date Published: 6/20/2021

View: 4777

파이썬 웹 크롤링(Web Crawling) 강좌 – 1. 웹페이지 긁어오기

Beautiful Soup를 사용하여 간단한 웹 크롤러를 만드는 방법을 다루고 … 웹 크롤러가 하는 작업을 웹 크롤링(Web Crawling)이라고 부릅니다.

+ 여기에 보기

Source: webnautes.tistory.com

Date Published: 4/5/2021

View: 4362

합법적으로 ‘웹 크롤링’하는 방법 (下) – 브런치

웹 사이트별 특징 파악하기 | 합법적으로 ‘웹 크롤링’하는 방법 (下) 앞선 합법적으로 ‘웹 크롤링’하는 방법 …

+ 더 읽기

Source: brunch.co.kr

Date Published: 10/18/2021

View: 7508

BeautifulSoup와 requests로 웹 파싱해보기 – 파이썬 실습

… requests 패키지를 이용하여, 가비아 라이브러리 홈페이지의 게시글들을 파싱하는 방법을 소개합니다. 들어가기 전 본문으로 들어가기 전, 먼저 크롤링(Crawling), …

+ 더 읽기

Source: library.gabia.com

Date Published: 7/7/2021

View: 5860

주제와 관련된 이미지 크롤링 하는 법

주제와 관련된 더 많은 사진을 참조하십시오 파이썬 웹 크롤링 하기 – 너무 간단해서 민망합니다.. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

파이썬 웹 크롤링 하기 - 너무 간단해서 민망합니다.
파이썬 웹 크롤링 하기 – 너무 간단해서 민망합니다.

주제에 대한 기사 평가 크롤링 하는 법

  • Author: 기술노트with 알렉
  • Views: 조회수 55,181회
  • Likes: 좋아요 617개
  • Date Published: 2020. 6. 24.
  • Video Url link: https://www.youtube.com/watch?v=aYwg1H5BK04

[파이썬] Python 웹페이지 크롤링 하는 방법(뉴스 긁어오기)

필요에 의해 웹사이트를 크롤링해야할 때가 있습니다. 크롤링은 많은 업무 시간을 단축시켜주는 효과가 있습니다.

좋은 방향으로 이용하시는 것을 추천드립니다.

파이썬 언어로 크롤링 하는 방법

다음은 뉴스타파 뉴스 웹사이트의 “세금도둑추적2020” 뉴스 크롤링 하는 예제입니다.

뉴스부분의 HTML을 파싱하기위해서 크롬 브라우저를 열고 newstapa.org 사이트를 열어주세요.

1. F12키를 눌러 개발자 도구를 사용합니다.

2.왼쪽에 커서 버튼을 눌러 뉴스 하나를 선택하여, 뉴스를 감싸고 있는 최상의 div태그를 찾습니다.

노란색으로 표기한 div class 태그명 부분이 바로 뉴스가 모여있는 태그입니다.

HTML 파싱할 대상을 찾았으니 다음 순서는 코딩입니다.

3.BeautifulSoup모듈을 설치합니다.

명령프롬포트를 실행하거나 파이참 툴을 사용중이라면 하단 터미널(Terminal)창에서 설치명령어를 실행하세요.

설치 명령어는 아래와 같습니다.

pip install bs4

다음은 설치로그입니다.

C:\python\Workspace>pip install bs4 Collecting bs4 Downloading bs4-0.0.1.tar.gz (1.1 kB) Requirement already satisfied: beautifulsoup4 in c:\users\ilike\appdata\local\programs\python\python39\lib\site-packages (from bs4) (4.9.3) Requirement already satisfied: soupsieve>1.2 in c:\users\ilike\appdata\local\programs\python\python39\lib\site-packages (from beautifulsoup4->bs4) (2.0.1) Using legacy ‘setup.py install’ for bs4, since package ‘wheel’ is not installed. Installing collected packages: bs4 Running setup.py install for bs4 … done Successfully installed bs4-0.0.1 C:\python\Workspace>

4.requests 모듈과 BeautifulSoup모듈을 import하여 크롤링 작업을 할 수 있습니다.

features인자 값으로 “html.parser”를 적용했어요.

인자값으로 “lxml”과 “html5lib”등도 사용할 수 있습니다.

import requests from bs4 import BeautifulSoup url = “https://newstapa.org” request = requests.get(‘https://newstapa.org/tags/%EC%84%B8%EA%B8%88%EB%8F%84%EB%91%91%EC%B6%94%EC%A0%812020’) soup = BeautifulSoup(request.content, features=”html.parser”) request.close() # print(soup) # find_str = soup.find(‘div’, attrs={‘class’: ‘col-lg-3 col-md-6 columns’}) find_str = soup.find(‘div’, attrs={‘class’: ‘list_section-slider-row-block’}) print(find_str) for news in find_str.findAll(‘div’, attrs={‘class’: ‘col-lg-3 col-md-6 columns’}): # print(news) #print(news.find(“h6”, attrs={‘class’: ‘font-weight-bold’}).text) # 기사 제목 print(news.h6.text) # 기사 제목 print(url + str(news.find(“h6”, attrs={‘class’: ‘font-weight-bold’}).a[‘href’]).strip()) # 기사 url print(news.find(“p”, attrs={‘class’: ‘float-right mt-2 date’}).text) # 기사 날짜 #print(news.find(‘figure’, attrs={‘class’: ‘article-image’}).img[‘src’]) # 이미지 url print(news.figure.img[‘src’]) # 이미지 url

다음은 크롤링 코드 실행결과입니다.

‘횡령범’ 몰린 국회인턴, 경찰서 ‘무혐의’…검찰이 종결 안해 큰 고통 https://newstapa.org/article/3A5cw 2020.09.18 https://d1lawh9lju1xqd.cloudfront.net/2020/09/28170837-D98B-8F51-6B5E-1HAAXK4VI2Z1FPVFKKCH.jpg 21대 국회에 물었다…”국회개혁 의지 있나요” https://newstapa.org/article/DeQ69 2020.09.18 https://d1lawh9lju1xqd.cloudfront.net/2020/09/28170800-77DB-98CE-F45B-U21HINT51J9BL0RGD515.jpg 국회세금도둑 3년 추적기-의원님과 인턴 https://newstapa.org/article/Mzp54 2020.09.17 https://d1lawh9lju1xqd.cloudfront.net/2020/09/24091518-3EF8-8217-B369-APRJ6UQPJI159AADCQOH.jpg <국회세금도둑 추적 2020> 임기 끝났다고 ‘끝이 아니다’ https://newstapa.org/article/4kcdv 2020.09.03 https://d1lawh9lju1xqd.cloudfront.net/2020/09/03163746-A562-50B0-0A78-009SB47X3UMA4WNKHFXZ.jpg [국회 세금도둑]① 김정훈, 특정인에 ‘표절 연구’ 몰아주고 세금 4천만 원 ‘펑펑’ https://newstapa.org/article/gclqY 2020.09.03 https://d1lawh9lju1xqd.cloudfront.net/2020/09/03163637-ED64-8240-6581-2MV0IWL5YYJ3F5D1ZAUR.jpg [국회 세금도둑]② 백재현 표절 정책연구 추가 확인, 박선숙・신창현은 반납 https://newstapa.org/article/Yh8H5 2020.09.03 https://d1lawh9lju1xqd.cloudfront.net/2020/09/03163544-A932-C98D-8A9E-208WE015XE5OFWHHOJWA.jpg [국회 세금도둑]③ 조원진, 권석창, 김용태 ‘예산 오남용’…환수 방법 없어 https://newstapa.org/article/xJ9oo 2020.09.03 https://d1lawh9lju1xqd.cloudfront.net/2020/09/03163440-9435-F246-5D48-NQ9R3W4VHYLMMULHU96F.jpg 국회의 또 다른 혈세낭비…발간비와 여론조사 https://newstapa.org/article/Nea2a 2020.07.22 https://d1lawh9lju1xqd.cloudfront.net/2020/07/22143153-A034-60B9-0275-E3DHZNSNBTN6J2IY4L7B.jpg [국회 세금도둑]① 국회의원 ‘발간비’ 허위·과다 청구…혈세 낭비 https://newstapa.org/article/Vc-M3 2020.07.22 https://d1lawh9lju1xqd.cloudfront.net/2020/07/22145407-6F87-90F2-5EED-JLSMCJ28RVNK6TQ7IUMD.jpg [국회 세금도둑]② 정책개발비로 의원 개인홍보 여론조사…국회규정 위반 https://newstapa.org/article/Q9kQ7 2020.07.22 https://d1lawh9lju1xqd.cloudfront.net/2020/07/22145853-D4B2-2FA5-018B-VUB35770OK2S2VMGMSF4.jpg ‘국회 세금도둑 추적 2020’…여야 의원 7명 공개 https://newstapa.org/article/YQBUb 2020.07.14 https://d1lawh9lju1xqd.cloudfront.net/2020/07/14150254-D592-61C7-A50F-K7S100K0ZBDIJ35BS0KM.jpg [국회 세금도둑]①김태흠·송옥주·이학영 정책연구 표절 인정…예산 반납하겠다 https://newstapa.org/article/gHQov 2020.07.14 https://d1lawh9lju1xqd.cloudfront.net/2020/07/14150109-3F86-CB5A-D8A5-UDWEJJY2VSA5JA4BVVFH.jpg [국회 세금도둑]②임종성·어기구도 정책연구 표절…혈세 낭비 불감증 https://newstapa.org/article/N71gi 2020.07.14 https://d1lawh9lju1xqd.cloudfront.net/2020/07/14150149-424B-00D8-7A01-21AJL7R7GIW40PLE86I9.jpg [국회 세금도둑]③’표절 질타’ 이용호·이종배…표절 정책자료집 발간 https://newstapa.org/article/whRn8 2020.07.14 https://d1lawh9lju1xqd.cloudfront.net/2020/07/14150233-6141-2971-3FBF-TTPQ0UO16AXXE590V844.jpg ‘국회 세금도둑 추적 2020’…국회예산 이렇게 샜다 https://newstapa.org/article/obolG 2020.06.04 https://d1lawh9lju1xqd.cloudfront.net/2020/06/03195606-F13F-2CBB-F508-53ZHENTLVZVDKBCALOXE.jpg [국회 세금도둑]① 정책용역보고서 천여 건 입수…혈세 낭비 또 확인 https://newstapa.org/article/RIIhW 2020.06.04 https://d1lawh9lju1xqd.cloudfront.net/2020/06/04103153-B215-BFE8-A7F7-TPNDJ03CKJ3RZ7GS57MS.jpg Process finished with exit code 0

웹사이트(페이지)의 이미지 다운로드 하는 방법

크롤링 작업을 완료했음으로 이미지 경로를 알고 있습니다.

urlib.request 모듈을 임포트 후 urlretrieve()함수를 사용하여 이미지를 다운로드 할 수 있답니다.

urlretrieve(이미지 경로 url, 로컬에 저장될 파일이름(폴더 지정 가능) )

from urllib.request import urlretrieve try: url = “https://d1lawh9lju1xqd.cloudfront.net/2020/09/03163637-ED64-8240-6581-2MV0IWL5YYJ3F5D1ZAUR.jpg” urlretrieve(url, “C:/python/Workspace/downimg.jpg”) except Exception as e: print(“-” * 30) print(“- 이미지 다운로드 실패”) print(“-” * 30) else: print(“-” * 30) print(“- 이미지 다운로드 성공”) print(“-” * 30)

모든 이미지를 리스트에 담은 후 반복문 중 for문을 사용하여 전체 이미지를 다운받을 수 있어요.

[REFERENCE]

zetcode.com/python/beautifulsoup/

github.com/hwangyoungjae/study/blob/master/20170117.py

velog.io/@shchoice/urllib.request-urlretrieve-urlopen

github.com/hwangyoungjae/study/blob/master/20170118.py

docs.python.org/3/library/urllib.request.html

웹크롤링 기본: 크롤링(crawling) 이해 및 기본

import requests from bs4 import BeautifulSoup res = requests . get ( ‘http://media.daum.net/digital/’ ) soup = BeautifulSoup ( res . content , ‘html.parser’ ) # find_all() 메서드를 사용해서 태그와 클래스이름으로 링크가 걸려있는 기사 타이틀을 가져오기 [ —————————————————— ] for num in range ( len ( link_title )): print ( link_title [ num ] . get_text () . strip ())

합법적으로 ‘웹 크롤링’하는 방법 (上)

빅데이터 분석이 점차 강조됨에 따라 많은 기업과 학생들이 데이터 확보에 열을 올리고 있습니다. 하지만 기업 입장에서는 비즈니스를 진행하며 자연스럽게 데이터가 쌓이는 경우가 많지만, 학생이나 일반 개인 입장에서는 그렇지 않습니다. 그렇기 때문에 많은 사람들이 실행하는 것이 바로 웹 크롤링(Web Crawling)입니다. 웹 크롤링을 통해 원하는 데이터를 직접 수집하여, 그 데이터를 바탕으로 분석을 해 인사이트를 도출하거나 머신러닝을 진행합니다.

물론 일반 개인이 아니라 기업 입장에서도 웹 상에 존재하는 데이터는 중요합니다. 고객 한 사람 한 사람의 의견을 직접적으로 파악할 수 있으며, SNS나 커뮤니티에 존재하는 데이터는 트렌드를 파악하는데 가장 중요한 역할을 하기도 합니다. 이러한 데이터를 수집하기 위해 기업 역시 웹 크롤링을 진행합니다. 하지만 웹 크롤링은 명확한 장점이 있는 반면 많은 사고를 일으키기도 합니다. 이번 시간에는 웹 크롤링이 무엇인지, 웹 크롤링을 함부로 수행할 시 일어나는 위험에는 어떤 것이 있는지 알아보도록 하겠습니다.

웹 크롤링의 정의

: 웹 상의 데이터를 자동으로 수집하는 웹 크롤링

웹 크롤링(Web Crawling)이란 기본적으로 웹 상에 존재하는 데이터를 자동적으로 탐색하는 행위를 의미합니다. 여기서 말하는 ‘웹’은 흔히 알고 있는 World Wide Web의 그 웹입니다. 결국 조금 더 쉽게 표현하자면, 인터넷 상에 존재하는 데이터를 자동적으로 탐색하는 행위를 웹 크롤링이라고 합니다. 가끔 웹 크롤링이 아니라 스파이더링(Spidering)이라는 단어를 사용할 때도 있습니다. 여기서 웹 크롤링과 스파이더링은 완전한 동의어라고 이해해도 좋습니다. 관련해서 웹 크롤러(Web Crawler)라는 단어도 있습니다. 영어 단어를 살펴보면 er이라는 단어가 들어가 있는 형태입니다. 이름에서도 알 수 있듯 웹 크롤러는 웹 크롤링을 실행하는 하나의 프로그램을 의미합니다. 종합해보면 웹 상의 존재하는 데이터를 자동적으로 탐색할 수 있도록 특별한 시스템을 구축한 것이 웹 크롤러, 그러한 웹 크롤러를 통해 실제로 탐색 행위를 실천하는 것이 웹 크롤링입니다.

사전적인 의미 상 웹 크롤링은 단순히 데이터를 탐색하는 행위만을 의미합니다. 하지만 실제로 많은 개발자, 분석가, 데이터 과학자들이 웹 크롤링을 수행하는 것은 단순 탐색을 위한 것이 아닙니다. 웹 크롤링은 데이터를 탐색, 원하는 조건에 맞는 데이터를 직접 수집하고 저장까지 하기 위한 목적이 큽니다. 그렇기에 웹 크롤링이라고 일반적으로 말하는 것은 데이터의 저장까지의 과정을 모두 포함합니다. 정확한 사전적 의미와 실질적 의미에 어느 정도 차이가 있다고 볼 수 있습니다.

웹 크롤링 vs 웹 스크래핑

인터넷에 ‘웹 크롤링’을 검색해보면 연관어로 자주 나오는 단어 중 하나가 웹 스크래핑입니다. 웹 스크래핑(Web Scraping)이란 웹 사이트 상에서 원하는 정보를 추출하는 방법을 의미합니다. 아무래도 웹 크롤링과 웹 스크래핑은 기본적으로 유사한 의미를 지니다 보니 혼용되어 많이 쓰이기도 하고 어떤 단어를 써야 하는가에 대해서 논란을 야기하기도 합니다. 사실 엄격히 말하면 웹 크롤링과 웹 스크래핑은 명확히 구분 지어 사용해야 하는 단어입니다. 원칙적으로 웹 크롤링은 탐색에만 그 기능이 제한되어 의미를 함양하고 있는 반면, 웹 스크래핑은 정보 추출에 초점을 맞추고 있기 때문입니다. 이러한 미묘한 의미 차이 때문에 어떤 사람들은 스크래핑이라는 단어가 크롤링보다 더 큰 개념이라고 이야기하는 사람도 있고, 애초에 아예 다른 개념이다라고 이야기를 하는 사람도 있습니다.

실제로 일반 개인이나 학생이 웹 상의 데이터를 수집하는 과정을 보면, 프로그램에게 자동적으로 브라우저를 탐색하게 하고, 그 중 원하는 정보만을 따로 추출하도록 프로세스를 구성합니다. 웹 크롤링의 요소도 포함하고 웹 스크래핑의 요소도 포함한다고 볼 수 있습니다. 그렇기에 사실상 웹 상의 데이터를 탐색하고 수집하는 것 자체는 웹 크롤링이나 웹 스크래핑 중 어떤 단어를 써도 무조건 틀린 단어 선택이라고는 볼 수 없습니다. 일반적으로 웹 스크래핑보다는 웹 크롤링이라는 단어를 더 자주 쓰는 경향이 있기에, 이번 시간에는 웹 크롤링으로 용어를 통일해서 관련된 이야기를 이어 나가보도록 하겠습니다.

웹 크롤링이 문제가 되는 경우

앞서 이야기했듯 웹 크롤링은 웹 상에 존재하는 데이터를 내가 원하는 내용으로, 원하는 수량만큼 수집할 수 있다는 점에서 큰 장점을 지니고 있습니다. 그래서 많은 데이터 분석가나 데이터 과학자들이 웹 크롤링을 시도하고 있습니다. 하지만 웹 크롤링 수행이 문제가 되는 경우가 있습니다. 경우에 따라서 웹 크롤링 수행이 불법으로 간주되는 경우가 있기 때문입니다. 사실 모든 케이스를 일일이 따져가며 특정 경우에 웹 크롤링이 불법인가 아닌가에 대해 따져보는 것은 어려운 일입니다. 하지만 웹 크롤링이 문제가 되는 경우를 판가름하는 몇 가지의 기준이 있고 이를 정확히 인지한다면 법을 잘 지키면서도 윤리적으로 웹 크롤링을 이용할 수 있습니다.

기본적으로 웹 크롤링이라는 행위 자체는 불법이 아닙니다. 웹 크롤링의 수행 프로세스를 실제로 보면, 브라우저를 자동적으로 조정하여 데이터를 웹 사이트에 요청하고 요청 내용에 해당하는 데이터를 웹 사이트로부터 내려받는 것이 전부입니다. 우리가 일반적으로 웹 사이트를 이용하는 것과 기본적인 프로세스는 같기 때문에 웹 크롤링이라는 행위 자체가 불법이라고는 볼 수 없습니다. 하지만 실제 판례를 살펴보면 웹 크롤링을 불법으로 규정한 경우가 있습니다. 대표적인 사례로 숙박업체들 간의 DB 무단 수집 사건이 있습니다.

해당 사례를 간단히 요약하자면, 특정 숙박 업체가 크롤링을 통해 경쟁사의 데이터를 수집하였다는 내용입니다. 무단으로 경쟁사의 데이터를 수집하여 이를 자사의 데이터로 복제를 하였고, 그 과정에서 경쟁사 서버에 부담을 주는 행위가 있었습니다. 이 사례를 통해 웹 크롤링이 문제가 되는 대표적인 경우를 모두 알아볼 수 있습니다.

1. 수집한 데이터를 상업적으로 이용하는 경우

앞서 웹 크롤링이라는 행동 자체는 불법적인 요소가 없다고 했습니다. 위 사례에서는 해당 데이터를 활용함에 있어 문제가 있었습니다. 경쟁사의 데이터를 수집한 것만 아니라 그것을 그대로 복제해 본인의 비즈니스에 활용했습니다. 일반적으로 수집한 데이터를 상업적으로 이용하지 않으면 문제가 될 것이 없다고 말을 하곤 합니다. 결국 수집한 데이터를 비즈니스 자체에 이용한다거나, 데이터 자체를 판매하는 등 웹 크롤링을 통해 수집한 데이터를 금전적 이익을 목적으로 사용한다면 문제가 됩니다.

상업적 이용이 아닌 웹 크롤링의 사례로는 학술적 목적의 웹 크롤링 이용이 있습니다. 많은 학자와 학생들이 특정 현상을 분석하기 위해 웹 상의 데이터를 수집하고, 이를 분석하여 연구를 진행합니다. 만약 해당 데이터를 이용하여 연구 논문을 작성했다면, 이것이 대표적인 학술적 목적의 웹 크롤링이라 볼 수 있습니다. 그렇다고 물론 상업적 목적이 아닌 웹 크롤링이라고 모두 문제가 되지 않는 것은 아닙니다. 웹 크롤링 행위 자체가 또 다른 문제를 일으킬 경우에는 금전적 이익이 목적이 아니었다고 할지라도 웹 크롤링이 불법이 될 수 있습니다.

2. 웹 크롤링을 통해 상대 서버에 문제를 일으킨 경우

웹 크롤링이 문제가 되는 두 번째 경우는 웹 크롤링 행위가 상대방의 서버에 문제를 일으키는 경우입니다. 이 역시 숙박업체 간 불법 크롤링 사례에서 드러난 문제점입니다. 기본적으로 웹 크롤링은 자동화한 프로그램을 통해 정보를 요청하기 때문에 데이터를 너무 많이 요청하게 되면, 서버 부하를 일으킬 수 있습니다. 보통은 너무 많은 요청이 들어올 경우, 웹 사이트에서 자동적으로 요청을 중단시킵니다. 하지만 악의적인 목적으로 이를 회피하는 알고리즘을 만들어, 끊임없이 서버에 부하를 일으키는 것도 충분히 가능한 일입니다. 웹 크롤링을 통해 데이터를 수집할 때, 데이터가 쌓이고 저장되는 속도가 너무 느리다고 판단하여, 고의적으로 서버에 부하를 줄 정도로 웹 크롤링 알고리즘을 조작하는 것은 반드시 피해야 하는 행위입니다.

웹 크롤링도 안전하게 할 수 있습니다.

종합했을 때, 무턱대고 바로 웹 크롤링을 시도하기에는 사전에 고려해야 할 요소가 있다고 볼 수 있습니다. 하지만 원하는 데이터를 마음껏 수집할 수 있다는 점에서 웹 크롤링은 엄청난 장점을 지니고 있습니다. 이 때문에 웹 크롤링을 진행하기 전, 웹 크롤링을 통해 행하고자 하는 작업이 어떤 목적을 지니고 있는지, 나의 웹 크롤링 행위가 상대방 서버에 영향을 미치지는 않을지를 잘 고려해야 합니다. 하지만 생각해보면 분명 각 웹 사이트마다 크롤링 자체를 허용하는 정도가 분명히 다를 것입니다. 이를 잘 인지하고 있다면 데이터를 수집하는 입장에서 최대한의 데이터를 수집할 수 있습니다. 어떤 방법을 통해 해당 내용을 정확히 알고, 합법적으로 웹 크롤링을 진행할 수 있는지는 다음 편에서 알아보도록 하겠습니다.

문과생도 할 수 있는 웹 크롤링 (1) – 웹 데이터 크롤링 준비

시중에 나와 있는 책은 대부분 API를 이용해 데이터를 수집하는 차원의 웹 크롤링을 소개하는 것이 대부분이다. 공인된 서적이 제공할 수 있는 내용적 한계 때문인 듯 하다. 크롤링(crawling)이라는 것은 합법과 범법 사이에서 아슬아슬한 줄타기를 하는 작업이기 때문에 그와 관련된 내용을 public하게 출판하는 것은 위험 소지가 있다.

※ 따라서 “문과생도 할 수 있는 웹 크롤링”은 시중 책에서 제공하지 못하는 내용을 중심으로 정말 우리가 웹에서 수집하고 싶은 데이터를 어떻게 수집할 수 있는지 그 방법과 도구들을 논하고자 한다. 그리고 파이썬과 기본적인 웹 크롤링(정적 홈페이지)을 다루는 것은 다른 많은 블로그나 책에서 다루기 때문에 여기서는 정말 수집하고 싶은… 사이트의 데이터 수집 방법을 다루겠다.

웹 데이터 크롤링 준비

문과생도 할 수 있는 웹 크롤링 (1)

바야흐로 빅데이터 시대… 데이터 크롤링은 사실 이과생들보다는 문과생들이 더 필요로 한다. 수요가 많은 만큼 인터넷이나 시중에 참고 자료가 널려있다. 왕초보도 할 수 있는 웹크롤링… 이라든가…. 서점에 가면 크롤링과 관련된 수많은 책을 찾아볼 수 있을 것이다.

불법의 여지가 있는 부분을 제하고 이 포스팅에서 얼마나 많은 내용을 다룰 수 있을지는 모르겠지만 최소한 크롤링에 필요한 개념이나 도구(라이브러리, 패키지)들은 소개할 수 있도록 노력하겠다.

데이터 수집 방법

크롤링 기법은 내가 생각하기에 크게 4가지로 구분된다고 생각한다.

서비스에서 제공하는 오픈 API 활용 HTML 태그 정보를 기반으로 원하는 내용 부분 수집 서버와 브라우저 간의 Network를 분석하여 필요한 데이터 수집 사람이 브라우저를 직접 동작하는 것처럼 프로그램을 만들어서 데이터 수집

시중에 나와 있는 책의 내용 중 80%는 1번에 초점을 맞춰서 씌어져 있다. 19%는 2번에 초점을 맞춰서… 3번과 4번은 거의 다루질 않는다. 다루는 책을 보긴 하였으나 기회가 되면 해당 책은 다음에 소개하도록 하겠다.

‘문과생도 할 수 있는 웹 크롤링’은 3번과 4번 그중에서도 4번에 집중하여서 4번을 하기 위해 필요한 방법과 도구들을 정리하려고 한다. 실제 데이터를 수집해서 어떤 프로젝트를 하려하거나 논문을 쓴다거나 하려는 이들에게 도움이 되었으면 좋겠다.

활용 도구

Python 3.5 이상

selenium, scrapy 라이브러리

Firefox 브라우저

Pre-Requisite

크롤링을 시작하기 전에 다음 사항들을 알면 좋다. 쉽게 찾아서 배울 수 있는 좋은 많은 사이트들과 자료들이 있다. 필요하면 따로 소개할 수 있도록 하겠다.

웹(Web) 개념

HTML 구조 및 태그

CSS 선택자(selector) 개념

간단한 JavaScript 개념 및 동작 방법에 대한 이해

파이썬 기초

[1] 웹 페이지 크롤링하기(Web Crawling)

코드들은 github에 업로드되어있습니다.

https://github.com/JaeYeongSong/Blog/tree/main/Crawling

오늘은 새로운 분야에 들어가 보도록 하겠습니다.

오늘은 크롤링(Crawling)을 알아보도록 합시다.

먼저 크롤링이란 무엇일까요? 크롤링이란? ‘데이터를 수집하고 분류하는 것’입니다.

많은 사람들이 크롤링이랑 스크래핑이란 헷갈려합니다.

스크래핑은 ‘인터넷에서 존재하는 데이터를 컴퓨터 프로그램을 통하여 자동화된 방법으로 웹에서 데이터를 수집하는 작업’이라는 뜻이기 때문에 스크래핑은 데이터를 수집한다는 뜻이고, 크롤링은 더 나아가 데이터를 분류한다는 것에 가장 큰 차이점이 있는 것 같습니다.

자 그럼 본론으로 들어와서 우리는 오늘 스크래핑과 비슷한 것처럼 데이터를 수집해보겠습니다.

그럼 코드를 들고 오도록 하겠습니다.

from bs4 import BeautifulSoup import requests # 홈페이지 주소 가져오기 url = “https://search.naver.com/search.naver?where=news&sm=tab_jum&query=뉴스” html = requests.get(url) bs_html = BeautifulSoup(html.content, “html.parser”) print(bs_html) # 웹 페이지 출력

▲ Crawling.py

이 코드는 가장 기본적인 크롤링 코드입니다.

from bs4 import BeautifulSoup import requests

bs4와 requests를 import 해줍니다.

그다음 크롤링할 웹 사이트를 가지고 옵니다.

url = “”

url 함수에 자신이 크롤링할 웹 사이트 주소를 붙여 넣어주시면 됩니다.

html = requests.get(url) bs_html = BeautifulSoup(html.content, “html.parser”)

그다음 html 함수에 requests.get(url)을 이용해서 리소스나 정보를 요청합니다.

그 다음 bs_html 함수로 html 콘텐츠를 받습니다.

print(bs_html) # 웹 페이지 출력

print(bs_html)로 웹 페이지의 코드를 출력합니다.

저는 현재 네이버 뉴스에 ‘뉴스’ 라고 검색하면 생기는 웹 페이지를 크롤링해보도록 하겠습니다.

한 번 작동시켜 보도록 하겠습니다.

▲ Crawling.py 실행결과

Crawling.py를 실행시켜 보시면 터미널 창에 이렇게 크롤링 한 내용이 보입니다.

근데 터미널 창에 내용이 나오면 터미널을 종료시켜 버리면 크롤링 한 내용이 보이지 않게 되죠.

그럼 웹 페이지를 크롤링하는 걸 응용시킬 때 크롤링 내용을 저장시키려면 어떻게 해야 할까요?

웹 페이지를 크롤링 한 결과값을 저장하는 방법에 대해 같이 알아봅시다.

from bs4 import BeautifulSoup import requests import sys # 홈페이지 주소 가져오기 url = “https://search.naver.com/search.naver?where=news&sm=tab_jum&query=뉴스” html = requests.get(url) bs_html = BeautifulSoup(html.content, “html.parser”) sys.stdout = open(‘Save_Crawling.txt’, ‘w’, encoding=’UTF-8′) print(bs_html) # 웹 페이지 txt 파일로 출력

▲ Save_Crawling.py

위 코드에 대해 설명을 드려야겠죠?

이 코드는 웹 페이지를 크롤링 한 결과값을 txt 파일로 저장할 수 있는 코드입니다.

여기서 아까 전에 알려드린 Crawling.py 코드와 다른점이 무엇인지 아시나요?

아까전에 했던 설명을 또 할 필요가 없다고 느끼기 때문에 Crawling.py와 다른 부분을 들고 와 보도록 하겠습니다.

import sys ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sys.stdout = open(‘Save_Crawling.txt’, ‘w’, encoding=’UTF-8′)

▲ Save_Crawling.py 중 Crawling.py와 다른 부분

처음에 sys를 import 해주겠습니다.

왜냐하면 파일을 저장하려면 sys 라이브러리가 필요하기 때문이죠.

그다음에 아래로 내려오면 sys.stdout 라는 함수를 정의해줬는데 여기서 총 3개의 인자를 받습니다.

open(”, ”, )

여기서 첫 번째로 저장할 파일명과 이름을 받습니다.

만약에 Test라는 이름을 가진 txt 파일로 만들려면 ‘Test.txt’ 라고 적어주시면 됩니다.

그다음 두 번째로 파일 열기 모드에 대해 받습니다.

r 읽기모드 – 파일을 읽을 때 사용 w 쓰기모드 – 파일에 내용을 쓸 때 사용 a 추가모드 – 파일에 새로운 내용을 추가 시킬 때 사용

▲ sys 파일 열기모드

파일 열기 모드는 총 3가지로 이루어져 있습니다.

위에 표에 대한 설명을 참조하시기 바랍니다.

일단 저희는 웹 페이지를 크롤링한 결과값을 파일에 내용을 써야 하기 때문에 ‘w’ 즉 쓰기 모드를 사용하겠습니다.

그다음 마지막으로 어떻게 인코딩을 할 것인가에 적어주시면 됩니다.

일반적으로 많이 사용하는 UTF-8을 적어주시면 됩니다.

UTF-8 같은 경우에는 한글과 영어를 같이 사용할 수 있죠.

그럼 한 번 Save_Crawling.py를 실행시켜 볼까요?

▲ Save_Crawling.py 실행 결과

위와 같이 txt 파일로 정상적으로 저장된 걸 확인할 수 있습니다.

내용도 웹 페이지를 크롤링 한 값도 잘 넣어졌죠.

간단하게 웹 페이지를 크롤링(스크래핑)을 해보았습니다.

다음에는 원하는 태그만 크롤링하는것에 대해 알아보도록 하겠습니다.

지금까지 읽어주셔서 감사합니다.

지금까지 웹 페이지 크롤링 하는 방법이었습니다.

파이썬 웹 크롤링(Web Crawling) 강좌 – 1. 웹페이지 긁어오기

반응형

Beautiful Soup를 사용하여 간단한 웹 크롤러를 만드는 방법을 다루고 있습니다.

Python 3.6으로 코드를 작성하였습니다. 버전의 차이로 필요한 모듈이 달라질 수도 있습니다.

웹 크롤러(Web Crawler)는 웹문서, 이미지 등을 주기적으로 수집하여 자동으로 데이터베이스화하는 프로그램입니다. 웹 크롤러가 하는 작업을 웹 크롤링(Web Crawling)이라고 부릅니다.

보통 웹 크롤러를 사용하여 웹문서의 복사본을 생성합니다. 검색 엔진은 이렇게 생성된 데이터를 인덱싱하여 빠른 검색을 할 수 있도록 합니다.

웹 페이지의 내용을 가져오는 간단한 웹 크롤러를 만들어 보겠습니다.

시작하기 전에 requests와 beautifulsoup4 패키지를 설치해줘야 합니다.

pip install requests beautifulsoup4

1. 웹 문서 전체 가져오기

urlopen 함수를 사용하여 원하는 주소로부터 웹페이지를 가져온 후, BeautifulSoup 객체로 변환합니다.

BeautifulSoup 객체는 웹문서를 파싱한 상태입니다. 웹 문서가 태그 별로 분해되어 태그로 구성된 트리가 구성됩니다.

포함하는 태그가 부모가 되고 포함된 태그가 자식이 되어 트리를 구성하고 있습니다.

예를 들어 html 태그아래에 head와 body 태그가 존재하고 다시 head와 body 태그 아래에 하위 태그가 존재합니다.

파싱이란 일련의 문자열로 구성된 문서를 의미 있는 토큰(token)으로 분해하고 토큰으로 구성된 파스 트리(parse tree)를 만드는 것입니다.

from urllib.request import urlopen

from bs4 import BeautifulSoup

html = urlopen(“http://www.naver.com”) bsObject = BeautifulSoup(html, “html.parser”)

print(bsObject) # 웹 문서 전체가 출력됩니다.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2. 타이틀 가져오기

태그로 구성된 트리에서 title 태그만 출력합니다.

from urllib.request import urlopen

from bs4 import BeautifulSoup

html = urlopen(“http://www.naver.com”)

bsObject = BeautifulSoup(html, “html.parser”)

print(bsObject.head.title)

NAVER

3. 모든 메타 데이터의 내용 가져오기

웹문서에서 메타 데이터만 찾아서 content 속성값을 가져옵니다.

from urllib.request import urlopen

from bs4 import BeautifulSoup

html = urlopen(“https://www.python.org/about”)

bsObject = BeautifulSoup(html, “html.parser”)

for meta in bsObject.head.find_all(‘meta’):

print(meta.get(‘content’))

None IE=edge Python.org The official home of the Python Programming Language Python.org yes black width=device-width, initial-scale=1.0 True telephone=no on false /static/metro-icon-144×144-precomposed.png #3673a5 #3673a5 The official home of the Python Programming Language Python programming language object oriented web free open source software license documentation download community website Python.org Welcome to Python.org The official home of the Python Programming Language https://www.python.org/static/opengraph-icon-200×200.png https://www.python.org/static/opengraph-icon-200×200.png https://www.python.org/about/

..

4. 원하는 태그의 내용 가져오기

find를 사용하면 원하는 태그의 정보만 가져올 수 있습니다.

예를 들어 www.python.org/about 에서 다음 태그의 content 속성값을 가져오려면..

우선 웹문서에 있는 meta 태그 중 가져올 태그를 name 속성 값이 description인 것으로 한정합니다.

print (bsObject.head.find(“meta”, {“name”:”description”}))

meta 태그의 content 내용을 가져옵니다.

print (bsObject.head.find(“meta”, {“name”:”description”}).get(‘content’))

The official home of the Python Programming Language

전체 소스코드입니다.

from urllib.request import urlopen

from bs4 import BeautifulSoup

html = urlopen(“https://www.python.org/about”)

bsObject = BeautifulSoup(html, “html.parser”)

print (bsObject.head.find(“meta”, {“name”:”description”}).get(‘content’))

5. 모든 링크의 텍스트와 주소 가져오기

a 태그로 둘러싸인 텍스트와 a 태그의 href 속성을 출력합니다.

from urllib.request import urlopen

from bs4 import BeautifulSoup

html = urlopen(“https://www.naver.com”)

bsObject = BeautifulSoup(html, “html.parser”)

for link in bsObject.find_all(‘a’):

print(link.text.strip(), link.get(‘href’))

C:\Users\webnautes\PycharmProjects\Python_Project\venv\Scripts\python.exe C:/Users/webnautes/PycharmProjects/Python_Project/1.py 뉴스스탠드 바로가기 #news_cast 주제별캐스트 바로가기 #themecast 타임스퀘어 바로가기 #time_square 쇼핑캐스트 바로가기 #shp_cst 로그인 바로가기 #account 네이버 / 네이버를 시작페이지로 http://help.naver.com/support/alias/contents2/naverhome/naverhome_1.naver 쥬니어네이버 http://jr.naver.com 해피빈 http://happybean.naver.com/main/SectionMain.nhn

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

공지사항 //www.naver.com/NOTICE 서비스 전체보기 more.html 바로가기 https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EA%BD%83 프로젝트 꽃 https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EA%BD%83 다운받기 http://whale.naver.com/ 네이버웨일 http://whale.naver.com/ 크리에이터 http://www.navercorp.com/ko/service/creators.nhn 스몰비즈니스 http://www.navercorp.com/ko/service/business.nhn 비즈니스 파트너 안내 http://business.naver.com/guide.html 비즈니스 · 광고 http://business.naver.com/service.html 스토어 개설 https://sell.storefarm.naver.com/#/home/about 지역업체 등록 https://smartplace.naver.com/ 네이버 개발자센터 http://developers.naver.com 오픈 API https://developers.naver.com/docs/common/openapiguide/#/apilist.md/ 오픈소스 http://naver.github.io/ 네이버 D2 http://d2.naver.com/ 네이버 랩스 http://www.naverlabs.com/ 회사소개 http://www.navercorp.com/ 인재채용 http://recruit.navercorp.com/naver/recruitMain 제휴제안 https://www.navercorp.com/ko/company/proposalGuide.nhn 이용약관 /policy/service.html 개인정보처리방침 /policy/privacy.html 청소년보호정책 /policy/youthpolicy.html 네이버 정책 /policy/spamcheck.html 고객센터 https://help.naver.com/ NAVER Corp. http://www.navercorp.com/

관련 글

[Python/웹 크롤링(Web Crawling) 강좌] – 파이썬 웹 크롤링(Web Crawling) 강좌 – 2. 교보문고 베스트셀러 책이름, 저자, 가격 출력하기

[Python/웹 크롤링(Web Crawling) 강좌] – 파이썬 웹 크롤링(Web Crawling) 강좌 – 3. 네이버 베스트셀러 책이름, 저자, 가격 출력하기

[Python/웹 크롤링(Web Crawling) 강좌] – 웹크롤링 강좌 – 기상청의 동네예보 가져오기

반응형

합법적으로 ‘웹 크롤링’하는 방법 (下)

합법적으로 ‘웹 크롤링’하는 방법 (下)

앞선 합법적으로 ‘웹 크롤링’하는 방법 상편(https://brunch.co.kr/@8d1b089f514b4d5/33)에서는 웹 크롤링이 무엇인지, 어떤 경우에 웹 크롤링 행위가 문제가 되는지에 대해 파악해 보았습니다. 하지만 웹 사이트마다 성격이 다르고, 정책이 달라 특정한 몇 개의 기준만으로 웹 크롤링의 위법 여부를 판단하기에는 무리가 있습니다. 그래서 데이터를 수집할 때 수집 대상이 되는 웹 사이트의 정책을 정확히 파악하는 것은 생각보다 중요한 사전 작업입니다. 이번 시간에는 웹 사이트 별 각기 다른 정책을 고려하면서 합법적인 웹 크롤링을 진행할 수 있는 조금 더 고도화된 방법에 대해 이야기하겠습니다.

웹 사이트 별 규제 정책을 찾는 방법

자동화 프로그램에 대한 규제

기본적으로 모든 웹 사이트들은 자동화 프로그램에 대한 규제 여부를 명시해놓고 있습니다. 해당 내용에는 웹 크롤링을 통해 수집한 데이터의 상업적 이용, 서버 부하 등 일반적인 금지 사항이 아니라 각 웹 사이트 별 특성을 반영한 규제 여부를 알려줍니다. 예를 들어, 돈을 지불해야만 특정 페이지에 접속할 수 있는 경우 해당 페이지는 그 자체로 자동화 프로그램이 접속하는 것을 막아야 합니다. 반면, 공익적 목적을 위해 모든 자료와 데이터를 활발히 공유할 목적으로 특성 웹 사이트가 구성되어 있다면 자동화 프로그램의 접속을 굳이 막을 필요가 없습니다. 이렇듯 웹 사이트의 특성과 상황을 고려하면 너무나 많은 경우의 수를 생각할 수 있기 때문에 각 웹 사이트 별로 자동화 프로그램에 대한 규제를 명확히 표시해둡니다.

여기서 말하는 자동화 프로그램에 대한 규제는 비단 웹 크롤링에만 한정되는 이야기가 아닙니다. 꼭 웹 크롤링을 통해서 데이터 수집을 하는 것이 아니더라도, 자동화 프로그램을 이용해서 접근하는 것 자체에 대한 허용을 이야기하는 것입니다. 그래서 웹 사이트 별 자동화 프로그램에 대한 규제 내용은 웹 크롤링을 포함하여 프로그래밍을 통해 특정한 자동화 프로그램을 만들었을 때, 이 프로그램을 웹 사이트에 적용해도 되는지 아닌지에 대한 여부를 알려주는 하나의 지표 역할을 합니다.

robos.txt

각각의 웹 사이트 별로 자동화 프로그램에 대한 규제 내용을 확인하는 방법은 간단합니다. 각 웹 사이트는 robots.txt라는 텍스트 파일로 해당 정보를 저장하며 명시하고 있습니다. robots.txt는 브라우저 화면에서 바로 열어볼 수도 있으며 파일로 다운로드해 익숙한 메모장 프로그램을 이용하여 열어볼 수도 있습니다. robots.txt에 접근하는 방식도 매우 간단합니다. 모든 웹 사이트는 URL이라는 고유 주소를 가지고 있습니다.

흔히 알고 있는 ‘www.’으로 시작하여 ‘.com’ 혹은 ‘.co.kr’로 끝나는 형태의 문자의 조합입니다. robots.txt에 접근하기 위해서는 접근하고자 하는 웹 사이트 URL 뒤에 ‘/robots.txt’를 덧붙여 작성하고 접속을 시도해보면 됩니다. 이때, robots.txt라는 글자의 대소문자도 구분해서 인식하므로 이를 조심하여 작성해야 합니다. 웹 크롤링을 하고 싶은 웹 사이트의 URL 뒤에 robots.txt를 덧붙인 이후 접속을 시도하면 txt 파일이 자동으로 내려받아지거나 바로 robots.txt 정보가 브라우저 상에 노출되게 됩니다.

위시켓 요즘IT의 robots.txt 확인 장면

위 이미지는 위시켓의 요즘IT 웹 사이트의 robots.txt를 확인해 본 장면입니다. 해당 이미지를 보면 알 수 있듯, robots.txt는 자동화 프로그램 접속 제한 여부를 세세하게 알려줍니다. 다만 robots.txt의 내용이 우리가 무조건 지켜야 하는 법적 효력이 있는 내용은 아닙니다. 각 웹 사이트에서 자동화 프로그램은 접근을 하지 마라 혹은 접근을 해도 괜찮다는 권고안 정도의 의미를 담고 있습니다. 하지만 아무리 robots.txt에 담긴 내용에 강제성이 없다고 할지라도 이를 무시하고, 웹 크롤링을 실시하는 것은 절대 추천하지 않습니다. 웹 사이트 별로 특정 페이지마다 웹 크롤링의 접근 허용 여부를 기록해 놓은 것은 해당 서버와 데이터를 안전하게 보호하기 위한 목적이 있기 때문입니다. 혹여 추후 웹 크롤링 때문에 문제가 생긴다 할지라도 그 대부분의 경우는 robots.txt에 명시적으로 자동화 프로그램의 접근을 제한한다고 표시되어 있는 경우가 많습니다.

웹 사이트 별 규제 정책을 읽는 방법

다만 robots.txt를 통해 명시적으로 자동화 프로그램에 대한 규제 여부를 표시해둔다고 해도 웹 크롤링을 처음 시도해보거나, 웹 사이트 구조에 대해 이해도가 떨어지는 상황이라면 이를 이해하기 힘들 수 있습니다. 그렇기 때문에 몇몇 개의 웹 사이트에서 /robots.txt를 뒤에 덧붙여 이를 해석하는 연습을 해보는 것이 좋습니다. 실제로 robots.txt에 담겨 있는 내용은 모든 웹 사이트마다 그 형식과 구조가 똑같습니다. 또한 해당 내용은 어려운 코드로 구성된 것이 아니라 직관적으로 이해하기 쉬운 몇몇 개의 단어로 이루어져 있기에 조금만 robots.txt 내용 해석을 시도하다 보면 웹 크롤링 입문자도 쉽게 자동화 프로그램 규제 여부를 파악할 수 있습니다.

1. User-agent, Allow와 Disallow

아래 이미지는 포털 사이트 네이버의 robots.txt 열람 화면입니다. 이 내용의 경우 ‘User-agent: *’이라는 문구로 시작을 하고 있습니다. 네이버를 포함해 모든 robots.txt 정보는 User-agent 정보를 알려줌으로써 시작합니다. User-agent는 robots-txt에 명시한 정책들을 지켜야 하는 주체에 대해 서술하는 부분입니다. 네이버의 경우 *이라는 존재가 해당 정책들을 지켜야 한다고 말하고 있습니다. 일반적으로 프로그래밍 언어에서 *은 전체를 의미하는 경우가 많습니다. 이를 감안해 해석해보면, 예외 없이 모든 유저는 아래의 robots.txt 정책을 따를 것을 권고한다는 의미입니다. 그리고 그 뒤에는 Disallow와 Allow로 나누어 robots.txt 내용이 서술되어 있습니다. 영어 단어 그대로 Disallow는 자동화 프로그램의 접근이 허용되지 않는 부분이고 Allow는 허용되는 부분입니다. /는 모든 페이지, /$는 첫 페이지를 의미합니다. 종합해보면 네이버는 첫 접속 페이지를 제외하고 모든 페이지에서의 웹 크롤링 접근을 제한하고 있습니다. /이라는 표시에 대해서 더욱 자세히 살펴보도록 하겠습니다.

네이버의 robots.txt 확인 장면 (https://www.naver.com/robots.txt)

2. 웹 사이트 내 세부 페이지에 따른 차이를 보여주는 /

네이버의 경우 매우 간단한 robots.txt 구조를 보여주고 있지만 보통은 / 표시를 통해 각 페이지 별 세부 내용을 표시해 줍니다. / 뒤에 페이지 명을 써주고 각각에 Allow 혹은 Disallow 표시를 해주는 것이 보통입니다. 우리가 인터넷 URL 주소를 입력할 때, /을 단위로 상세 페이지로 구분된다는 점을 생각하면 이해가 쉽습니다. 아래 이미지는 전 세계 최대 포털 사이트 구글의 robots.txt 적용 결과입니다. User-agent를 제외한 첫 줄을 보면 검색 페이지의 웹 크롤링 접근을 금지하고 있는 것을 알 수 있습니다. 하지만 검색 페이지 전체의 웹 크롤링을 금지하고 있지는 않습니다. 이후 세 줄에서 Allow 단어와 / 표시를 통해 about, static, howsearchworks라는 상세 페이지는 비록 검색 페이지 내에 속해있는 정보이지만 자동화 프로그램이 접근해도 괜찮다고 명시하고 있습니다.

구글의 robots.txt 확인 장면 (https://www.google.com/robots.txt)

이렇듯 robots.txt를 이용한다면 같은 웹 사이트일지라도 상세 페이지 별 자동화 프로그램의 허용 여부를 쉽게 알아낼 수 있습니다. 데이터를 수집해야 하는 사람의 입장에서 작업해야 하는 것은 간단합니다. 본인이 웹 크롤링을 진행하고자 하는 웹 사이트의 URL을 알아낸 뒤 그 URL이 robots.txt의 상세 페이지 설명 중 어느 곳에 해당하는지를 파악하고, 그 앞의 단어가 Allow인지 Disallow인지만 바라보면 됩니다.

합법적으로 이용할 경우 웹 크롤링은 최고의 데이터 공급원입니다.

앞선 상편과 이번 편에서는 정당한 방법으로 웹 크롤링을 하는 방법에 대해 알아보았습니다. 사실 곰곰이 생각해 보면 웹 크롤링을 위해 대답을 준비해야 하는 질문은 꽤 많습니다. 내가 웹 크롤링을 통해 데이터를 수집하여 활용하려는 것이 어떤 목적인지 정확히 말할 수 있는가? 나의 웹 크롤러가 상대 서버에 부하를 주지는 않을까? 내가 웹 크롤링을 시도하려는 웹 사이트는 웹 크롤링을 제한하고 있는가? 에 대해 모두 답을 하는 것은 다소 귀찮은 일이 될 수 있습니다.

하지만 이런 어려움을 감안할 만큼 웹 크롤링은 가장 좋은 데이터 공급원 중 하나로 뽑히고 있습니다. 사실상 내가 원하는 내용의 데이터를 원하는 수량만큼 무료로 수집할 수 있는 거의 유일한 수단입니다. 특히 빅데이터 분야를 이제 막 공부하기 시작하는 학생들은 더욱이 최고의 데이터 공급원으로 웹 크롤링을 이용할 수 있습니다. 그러니 법적, 윤리적 이슈를 최소화하여 활발히 데이터를 수집하고 분석하는 문화가 형성되기 바랍니다.

BeautifulSoup와 requests로 웹 파싱해보기 – 파이썬 실습

이번 글에서는 Python의 BeautifulSoup, requests 패키지를 이용하여, 가비아 라이브러리 홈페이지의 게시글들을 파싱하는 방법을 소개합니다.

들어가기 전

본문으로 들어가기 전, 먼저 크롤링(Crawling), 파싱(Parsing), 스크래핑(Scraping)에 대한 정의를 알아보겠습니다.

웹 크롤러 (Web crawler) ” A Web crawler, sometimes called a spider or spiderbot and often shortened to crawler, is an Internet bot that systematically browses the World Wide Web, typically for the purpose of Web indexing (web spidering). ” (출처: wikipedia)

크롤링은 웹 인덱싱을 위해 WWW를 체계적으로 탐색해나가는 것을 의미합니다. 크롤러가 하는 행위(WWW를 탐색해나가는 행위 등)를 바로 ‘크롤링’ 이라고 합니다.

파싱 (Parsing) ” Parsing, syntax analysis, or syntactic analysis is the process of analyzing a string of symbols, either in natural language, computer languages or data structures, conforming to the rules of a formal grammar. ” (출처: wikipedia)

웹 파싱은 웹 상의 자연어, 컴퓨터 언어 등의 일련의 문자열들을 분석하는 프로세스입니다.

웹 스크래핑 (Web scraping) ” Web scraping, web harvesting, or web data extraction is data scraping used for extracting data from websites. ” (출처: wikipedia)

웹 스크래핑은 다양한 웹사이트로부터 데이터를 추출하는 기술을 의미합니다.

정의를 살펴보면, 흔히 사용되는 용어 ‘크롤러’는 데이터 추출의 의미보다 웹 사이트를 탐색하고, 인덱싱 하는 것에 더 중점적인 의미를 갖고 있는 것 처럼 보입니다. 따라서 이번 글 에서는 ‘웹 크롤링’ 이라는 단어의 사용보다 ‘웹 파싱’ 이라는 단어를 사용하겠습니다. (각각의 용어에 대한 해석은 다를 수 있습니다.)

웹 파싱해보기

파이썬에서 가장 많이 사용되고 있는 패키지 BeautifulSoup, Requests를 사용하여 웹 사이트를 파싱해보겠습니다.

1. BeautifulSoup, Requests 패키지가 설치되었는지 확인합니다.

pip list

목록에 beautifulsoup4 , requests 패키지가 없다면 설치해줍니다.

pip install beautifulsoup4 pip install requests

BeautifulSoup: 웹 페이지의 정보를 쉽게 스크랩할 수 있도록 기능을 제공하는 라이브러리입니다.

Requests: HTTP 요청을 보낼 수 있도록 기능을 제공하는 라이브러리 입니다.

2. 파싱을 진행할 페이지를 분석합니다.

1. 가비아 라이브러리 홈페이지에 접속합니다.

2. 홈페이지에 접속하여 HTML 소스를 분석합니다.

크롬 브라우저 기준, F12 혹은 마우스 우클릭 > ‘검사’ 를 클릭하면 ‘개발자 도구 창’ 이 나타납니다.

가비아 라이브러리 메인 화면

가비아 라이브러리 메인 HTML 소스

HTML 소스를 살펴보면 게시글들의 제목, 링크, 날짜 등의 내용을 확인할 수 있습니다.

3. 파싱을 위해 파이썬 파일을 생성합니다.

vi parser.py

4. 파싱을 위한 코드를 작성하고 실행시킵니다.

4-1. 가비아 라이브러리 홈페이지에 존재하는 포스터들의 제목을 추출해봅니다.

import requests from bs4 import BeautifulSoup as bs page = requests.get(“https://library.gabia.com/”) soup = bs(page.text, “html.parser”) elements = soup.select(‘div.esg-entry-content a > span’) for index, element in enumerate(elements, 1): print(“{} 번째 게시글의 제목: {}”.format(index, element.text))

line 1 ~ 2: 필요한 라이브러리(requests, beautifulsoup)를 import 합니다.

line 4: requests 를 이용하여 ‘https://library.gabia.com’ 주소로 get 요청을 보내고 응답을 받습니다. 상태 코드와 HTML 내용을 응답받을 수 있습니다.

line 5: 응답받은 HTML 내용을 BeautifulSoup 클래스의 객체 형태로 생성/반환합니다. BeautifulSoup 객체를 통해 HTML 코드를 파싱하기 위한 여러 가지 기능을 사용할 수 있습니다. ( response.text 는 응답 받은 내용(HTML)을 Unicode 형태로 반환합니다.)

line 7: BeautifulSoup 가 제공하는 기능 중 CSS 셀렉터를 이용하여 원하는 정보를 찾을 수 있는 기능입니다. ( div.esg-entry-content a > span 은 esg-entry-content 클래스로 설정된 div 태그들의 하위에 존재하는 a 태그, 그 하위에 존재하는 span 태그를 의미합니다.) 이 셀렉터를 이용하면 가비아 라이브러리 홈페이지에 존재하는 포스터들의 제목을 추출할 수 있습니다.

아래와 같이 실행 결과를 확인할 수 있습니다.

$ python parser.py 1 번째 게시글의 제목 : 언택트 시대의 기업 메일이 중요한 이유 2 번째 게시글의 제목 : 포스트 코로나 시대의 클라우드 3 번째 게시글의 제목 : 클라우드 플랫폼과 마이크로서비스 4 번째 게시글의 제목 : 퍼블릭 클라우드, 프라이빗 클라우드, 하이브리드 클라우드 5 번째 게시글의 제목 : 클라우드 마이그레이션 전략 알아보기 6 번째 게시글의 제목 : 클라우드 vs 웹호스팅 vs 서버호스팅 구분 7 번째 게시글의 제목 : 마이데이터란 무엇인가 8 번째 게시글의 제목 : 클라우드에 저장된 개인정보, 어떤 문제가 있을까 9 번째 게시글의 제목 : 클라우드 컴퓨팅의 종류, SaaS란? …

4-2. 가비아 라이브러리 홈페이지에 존재하는 포스터들의 제목과 링크를 동시에 추출해봅니다.

import requests from bs4 import BeautifulSoup as bs page = requests.get(“https://library.gabia.com/”) soup = bs(page.text, “html.parser”) elements = soup.select(‘div.esg-entry-content a.eg-grant-element-0’) for index, element in enumerate(elements, 1): print(“{} 번째 게시글: {}, {}”.format(index, element.text, element.attrs[‘href’]))

line 7: esg-entry-content 클래스로 설정된 div 태그들의 하위에 존재하는 태그 중, eg-grant-element-0 클래스를 갖는 a 태그만을 추출합니다.

line 10: link.text 추출한 a 태그 안에 존재하는 text 내용을 추출합니다. link.attrs[‘href’] a 태그의 href 속성의 값을 추출합니다.

아래와 같이 실행 결과를 확인할 수 있습니다.

$ python example_crawling_gabia_library2.py 1 번째 게시글: 언택트 시대의 기업 메일이 중요한 이유, https://library.gabia.com/contents/groupware/9200/ 2 번째 게시글: 포스트 코로나 시대의 클라우드, https://library.gabia.com/contents/infrahosting/9177/ 3 번째 게시글: 클라우드 플랫폼과 마이크로서비스, https://library.gabia.com/contents/infrahosting/9154/ 4 번째 게시글: 퍼블릭 클라우드, 프라이빗 클라우드, 하이브리드 클라우드, https://library.gabia.com/contents/infrahosting/9147/ 5 번째 게시글: 클라우드 마이그레이션 전략 알아보기, https://library.gabia.com/contents/infrahosting/7705/ 6 번째 게시글: 클라우드 vs 웹호스팅 vs 서버호스팅 구분, https://library.gabia.com/contents/infrahosting/9118/ 7 번째 게시글: 마이데이터란 무엇인가, https://library.gabia.com/contents/infrahosting/9142/ 8 번째 게시글: 클라우드에 저장된 개인정보, 어떤 문제가 있을까, https://library.gabia.com/contents/infrahosting/9136/ 9 번째 게시글: 클라우드 컴퓨팅의 종류, SaaS란?, https://library.gabia.com/contents/infrahosting/9123/ …

5. 파싱한 데이터를 활용해봅니다.

이번엔 Pandas, openpyxl 패키지를 이용하여 파싱한 데이터를 엑셀 형태로 변환해보겠습니다.

5-1. Pandas, openpyxl 패키지가 설치되어 있는지 확인합니다.

pip show pandas pip show openpyxl

패키지가 설치되어 있지 않다면 설치해줍니다.

pip install pandas pip install openpyxl

Pandas: 데이터를 쉽게 분석하고 조작할 수 있는 파이썬의 라이브러리입니다.

openpyxl: 엑셀 파일을 읽고 작성할 수 있는 파이썬 라이브러리입니다.

5-2. 위에서 작성한 코드를 아래와 같이 수정합니다.

import requests from bs4 import BeautifulSoup as bs import pandas as pd page = requests.get(“https://library.gabia.com/”) soup = bs(page.text, “html.parser”) elements = soup.select(‘div.esg-entry-content a.eg-grant-element-0’) titles = [] links = [] for index, element in enumerate(elements, 1): titles.append(element.text) links.append(element.attrs[‘href’]) df = pd.DataFrame() df[‘titles’] = titles df[‘links’] = links df.to_excel(‘./library_gabia.xlsx’, sheet_name=’Sheet1′)

line 3: pandas 라이브러리를 import합니다.

line 1 ~ 14: 이전에 작성한 코드와 동일합니다. 다만, 이번에는 게시글의 제목, 링크를 출력하지 않고 각각의 배열에 값을 추가합니다.

line 17 ~ 19: titles 배열과 links 배열의 값으로 Pandas의 DataFrame 을 생성합니다.

line 21: DataFrame 의 to_excel() 함수를 이용하여 엑셀파일을 작성합니다.

아래와 같이 생성된 엑셀 파일을 확인할 수 있습니다.

생성된 엑셀 파일

지금까지 가비아 Python 호스팅 환경에서 가비아 라이브러리 홈페이지를 파싱하는 방법을 알아보았습니다.

가비아는 초보 개발자도 쉽게 호스팅 서비스를 이용할 수 있도록 최적화된 호스팅 환경을 제공합니다.

또한 CBT, OBT를 거쳐 검증된 컨테이너 기반의 환경에 Python 호스팅 서비스를 제공해 때문에 안정적이고, 믿을 수 있습니다.

가비아 Python 호스팅을 이용해 이번 포스팅과 같이 웹 파싱을 개발해 보시기 바랍니다.

키워드에 대한 정보 크롤링 하는 법

다음은 Bing에서 크롤링 하는 법 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 파이썬 웹 크롤링 하기 – 너무 간단해서 민망합니다.

  • 파이썬
  • 크롤링
  • 웹크롤링
  • 설명

파이썬 #웹 #크롤링 #하기 #- #너무 #간단해서 #민망합니다.


YouTube에서 크롤링 하는 법 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 파이썬 웹 크롤링 하기 – 너무 간단해서 민망합니다. | 크롤링 하는 법, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

Leave a Comment