어두운 proxyscrape 로고

초보자를 위한 웹 스크래핑: 파이썬을 사용한 기초 및 프레임워크

Python, 스크래핑, 3월-01-20215분 읽기

웹 스크래핑은 웹사이트의 데이터를 자동화되고 잘 구조화된 형태로 추출하는 기술입니다. 데이터 스크래핑에는 엑셀, CSV 등 다양한 형식이 있을 수 있습니다. 웹 스크래핑의 실제 사용 사례로는 시장 조사, 가격 모니터링, 가격 정보, 시장 조사, 리드 생성 등이 있습니다. 웹 스크래핑은 공개적으로 사용 가능한 데이터를 최대한 활용하고 더 현명한 결정을 내리는 데 유용한 기술입니다. 따라서 웹 스크래핑의 이점을 활용하려면 누구나 최소한 웹 스크래핑의 기본 사항 정도는 알고 있어야 합니다.

이 글에서는 Beautiful Soup이라는 파이썬 프레임워크를 이용해 웹 스크래핑의 기초를 다룹니다. 코딩 환경으로 Google Colab을 사용할 것입니다.

Python을 사용한 웹 스크래핑에 관련된 단계

  1. 먼저 스크랩하려는 웹페이지를 식별하고 해당 URL로 HTTP 요청을 보내야 합니다. 이에 대한 응답으로 서버는 웹페이지의 HTML 콘텐츠를 반환합니다. 이 작업에서는 타사 HTTP 라이브러리를 사용해 파이썬 요청을 처리할 것입니다.
  2. HTML 콘텐츠에 접근하는 데 성공했다면 이제 데이터 구문 분석이 주요 작업입니다. 대부분의 HTML 데이터는 중첩되어 있기 때문에 단순히 문자열 처리만으로는 데이터를 처리할 수 없습니다. 이때 파서가 등장하여 HTML 데이터의 중첩된 트리 구조를 만듭니다. 가장 진보된 HTML 파서 라이브러리 중 하나는 html5lib입니다.
  3. 다음은 구문 분석 트리를 탐색하고 검색하는 트리 트래버스입니다. 이를 위해 서드파티 파이썬 라이브러리인 Beautiful Soup을 사용할 것입니다. 이 Python 라이브러리는 HTML 및 XML 파일에서 데이터를 가져오는 데 사용됩니다.

이제 웹 스크래핑의 프로세스가 어떻게 작동하는지 살펴보았습니다. 이제 코딩을 시작해 보겠습니다,

1단계: 타사 라이브러리 설치하기

대부분의 경우 Colab은 이미 설치된 타사 패키지와 함께 제공됩니다. 그러나 여전히 가져오기 문이 작동하지 않는 경우 다음 명령으로 몇 가지 패키지를 설치하여 이 문제를 해결할 수 있습니다, 

pip 설치 요청
pip 설치 html5lib
pip 설치 bs4
2단계: 웹페이지에서 HTML 콘텐츠에 액세스하기
가져오기 요청 
URL = "http://www.values.com/inspirational-quotes"
r = requests.get(URL) 
print(r.content)

양식의 출력이 표시됩니다,

이 코드를 이해해 보겠습니다,

  1. 코드의 첫 번째 줄에서는 요청 라이브러리를 가져오고 있습니다.
  2. 그런 다음 스크랩하려는 웹페이지의 URL을 지정합니다.
  3. 코드의 세 번째 줄에서는 HTTP 요청을 지정된 URL로 전송하고 서버의 응답을 r이라는 객체에 저장합니다.
  4. 마지막으로 print(r.content)는 웹페이지의 원시 HTML 콘텐츠를 반환합니다.
3단계: HTML 콘텐츠 구문 분석
요청 가져오기 
bs4에서 BeautifulSoup 가져오기 
  
URL = "http://www.values.com/inspirational-quotes"
r = requests.get(URL) 
  
soup = BeautifulSoup(r.content, 'html5lib') # 이 줄에서 오류가 발생하면 'pip install html5lib '를 실행하거나 html5lib를 설치하세요. 
print(soup.prettify())
출력:

매우 긴 출력을 제공하며, 일부 스크린샷은 아래에 첨부되어 있습니다.

뷰티풀 수프의 가장 큰 장점 중 하나는 html5lib, html.parse, lxml 등과 같은 HTML 파싱 라이브러리를 기반으로 만들어져 뷰티풀 수프의 객체와 파서 라이브러리를 동시에 지정할 수 있다는 점입니다. 

위 코드에서는 두 개의 인수를 전달하여 Beautiful Soup 객체를 생성했습니다:

r.content: 원시 HTML 콘텐츠.
html5lib: 사용할 HTML 파서를 지정합니다.

마지막으로, 원시 HTML 콘텐츠에서 구문 분석 트리의 시각적 표현을 제공하는 soup.prettify()가 출력됩니다.

4단계: 구문 분석 트리 검색 및 탐색하기

이제 HTML 콘텐츠에서 유용한 데이터를 추출할 차례입니다. 수프 개체에는 중첩 구조의 형태로 데이터가 포함되어 있으며, 프로그래밍 방식으로 추가로 추출할 수 있습니다. 여기서는 따옴표로 구성된 웹페이지를 스크랩하고 있습니다. 따라서 이러한 따옴표를 푸는 프로그램을 만들어 보겠습니다. 코드는 아래와 같습니다,

#Python program to scrape website  
#and save quotes from website 
import requests 
from bs4 import BeautifulSoup 
import csv 
   
URL = "http://www.values.com/inspirational-quotes"
r = requests.get(URL) 
   
soup = BeautifulSoup(r.content, 'html5lib') 
   
quotes=[]  # a list to store quotes 
   
table = soup.find('div', attrs = {'id':'all_quotes'})  
   
for row in table.findAll('div', attrs = {'class':'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): 
    quote = {} 
    quote['theme'] = row.h5.text 
    quote['url'] = row.a['href'] 
    quote['img'] = row.img['src'] 
    quote['lines'] = row.img['alt'].split(" #")[0] 
    quote['author'] = row.img['alt'].split(" #")[1] 
    quotes.append(quote) 
   
filename = 'inspirational_quotes.csv'
with open(filename, 'w', newline='') as f: 
    w = csv.DictWriter(f,['theme','url','img','lines','author']) 
    w.writeheader() 
    for quote in quotes:
        w.writerow(quote)

더 진행하기 전에 soup.prettify() 메서드를 사용하여 인쇄한 웹페이지의 HTML 콘텐츠를 살펴보고 따옴표로 이동하는 패턴을 찾아보는 것이 좋습니다.

이제 위의 코드에서 이 작업을 수행하는 방법을 설명하겠습니다, 

따옴표를 탐색해 보면 모든 따옴표가 ID가 'all_quotes'인 div 컨테이너 안에 있음을 알 수 있습니다. 따라서 find() 메서드를 사용하여 해당 div 요소(코드에서는 테이블이라고 함)를 찾습니다:

table = soup.find('div', attrs = {'id':'all_quotes'})

이 함수의 첫 번째 인수는 검색해야 하는 HTML 태그입니다. 두 번째 인수는 해당 태그와 관련된 추가 속성을 지정하는 사전 유형 요소입니다. find() 메서드는 일치하는 첫 번째 요소를 반환합니다. 이 코드의 기능을 더 잘 이해하려면 table.prettify()를 사용해 볼 수 있습니다.

테이블 요소에 초점을 맞추면 div 컨테이너에는 클래스가 인용인 각 따옴표가 포함됩니다. 따라서 클래스가 quote인 각 div 컨테이너를 반복해서 살펴볼 것입니다.

여기서 findAll() 메서드는 인자로만 보면 find() 메서드와 비슷하지만 일치하는 모든 요소의 목록을 반환한다는 점이 가장 큰 차이점입니다. 

행이라는 변수를 사용하여 각 인용문을 반복하고 있습니다.

이해를 돕기 위해 HTML 행 콘텐츠의 한 샘플을 분석해 보겠습니다:

이제 다음 코드를 살펴보세요:

for row in table.findAll('div', attrs = {'class':'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): 
    quote = {} 
    quote['theme'] = row.h5.text 
    quote['url'] = row.a['href'] 
    quote['img'] = row.img['src'] 
    quote['lines'] = row.img['alt'].split(" #")[0] 
    quote['author'] = row.img['alt'].split(" #")[1] 
    quotes.append(quote) 
   
filename = 'inspirational_quotes.csv'
with open(filename, 'w', newline='') as f: 
    w = csv.DictWriter(f,['theme','url','img','lines','author']) 
    w.writeheader() 
    for quote in quotes:
        w.writerow(quote)
여기서는 견적서에 대한 모든 정보를 저장하기 위해 사전을 만들고 있습니다. 점 표기법은 중첩된 구조에 액세스하는 데 사용됩니다. HTML 요소 내부의 텍스트에 액세스하려면 .text를 사용합니다:

또한 태그의 속성을 추가, 제거, 수정 및 액세스할 수도 있습니다. 태그를 사전으로 취급하여 이 작업을 수행했습니다:

quote['url'] = row.a['href']
그런 다음 모든 따옴표를 따옴표라는 목록에 추가했습니다. 

마지막으로 데이터를 저장하는 데 사용할 CSV 파일을 생성합니다.

파일명 = 'inspirational_quotes.csv'

파일 이름을 inspirational_qoutes.csv로 정하고 나중에 사용할 수 있도록 모든 인용문을 저장했습니다. inspirational_quotes.csv 파일의 모습은 다음과 같습니다,

위의 출력에는 3개의 행만 표시되었지만 실제로는 33개의 행이 있습니다. 따라서 간단한 시도만으로 웹 페이지에서 상당한 양의 데이터를 추출했다는 것을 의미합니다. 

참고: 경우에 따라 웹 스크래핑은 불법으로 간주되어 웹사이트에 의해 IP 주소가 영구적으로 차단될 수 있습니다. 따라서 주의를 기울여 허용되는 웹사이트와 웹페이지만 스크랩해야 합니다. 

웹 스크래핑을 사용하는 이유는 무엇인가요?

웹 스크래핑이 유용하게 사용될 수 있는 몇 가지 실제 시나리오는 다음과 같습니다,

리드 생성
대부분의 비즈니스에서 중요한 영업 활동 중 하나는 리드 생성입니다. Hubspot 보고서에 따르면 인바운드 마케터의 61%가 트래픽과 리드 생성을 최우선 순위로 꼽았습니다. 웹 스크래핑은 마케터가 인터넷 전체에서 구조화된 리드 목록에 액세스할 수 있도록 함으로써 그 역할을 수행할 수 있습니다.
시장 조사 

올바른 시장 조사는 모든 비즈니스 운영에서 가장 중요한 요소이므로 매우 정확한 정보가 필요합니다. 시장 분석은 규모와 형태가 다양한 대용량, 고품질, 고도의 통찰력을 갖춘 웹 스크래핑을 통해 이루어지고 있습니다. 이 데이터는 비즈니스 인텔리전스를 수행하는 데 매우 유용한 도구가 될 수 있습니다. 시장 조사의 주요 초점은 다음과 같은 비즈니스 측면에 있습니다:

  • 시장 동향을 분석하는 데 사용할 수 있습니다.
  • 시장 가격을 예측하는 데 도움이 될 수 있습니다.
  • 이를 통해 고객의 요구에 따라 진입점을 최적화할 수 있습니다.
  • 경쟁사를 모니터링하는 데 매우 유용할 수 있습니다.
숙소 만들기

웹 스크래핑은 부동산 및 전자상거래 스토어와 같은 비즈니스 유형에 따라 목록을 작성하는 데 매우 편리하고 유익한 기술이 될 수 있습니다. 웹 스크래핑 도구를 사용하면 스토어에서 경쟁사 제품의 수천 개 목록을 탐색하고 가격, 제품 세부 정보, 이형 상품, 리뷰 등 필요한 모든 정보를 수집할 수 있습니다. 단 몇 시간 만에 완료할 수 있으므로 자체 목록을 생성하여 고객 수요에 더 집중할 수 있습니다.

정보 비교

웹 스크래핑은 다양한 비즈니스에서 정보를 수집하고 비교하여 의미 있는 방식으로 데이터를 제공하는 데 도움이 됩니다. 다양한 다른 웹사이트에서 리뷰, 기능 및 모든 필수 세부 정보를 추출하는 가격 비교 웹사이트를 예로 들어 보겠습니다. 이러한 세부 정보는 쉽게 액세스할 수 있도록 컴파일하고 맞춤화할 수 있습니다. 따라서 구매자가 특정 제품을 검색할 때 여러 소매업체에서 목록을 생성할 수 있습니다. 따라서 웹 스크래핑은 소비자 수요에 따라 다양한 제품 분석을 보여줌으로써 소비자의 의사 결정 과정을 훨씬 쉽게 만들어 줍니다.

정보 집계

웹 스크래핑은 정보를 집계하여 사용자에게 정리된 형태로 표시하는 데 도움이 될 수 있습니다. 뉴스 애그리게이터의 경우를 생각해 보겠습니다. 웹 스크래핑은 다음과 같은 방식으로 사용됩니다,

  1. 웹 스크래핑을 사용하면 가장 정확하고 관련성 높은 기사를 수집할 수 있습니다.
  2. 유용한 동영상과 기사에 대한 링크를 수집하는 데 도움이 될 수 있습니다.
  3. 뉴스에 따라 타임라인을 작성하세요.
  4. 뉴스 독자에 따른 트렌드를 파악하세요.

그래서 이 글에서는 실제 사용 사례를 고려해 웹 스크래핑이 어떻게 작동하는지 심층적으로 분석해 보았습니다. 또한 파이썬으로 간단한 웹 스크래퍼를 만드는 아주 간단한 실습도 해보았습니다. 이제 원하는 다른 웹사이트를 스크래핑할 수 있습니다. 또한 웹 스크래핑이 중요한 역할을 할 수 있는 몇 가지 실제 시나리오도 살펴봤습니다. 모든 내용이 명확하고 흥미롭고 이해하기 쉬웠기를 바랍니다.  

웹 스크래핑 프로젝트를 위한 멋진 프록시 서비스를 찾고 계신다면, 다음 사항을 잊지 마세요. ProxyScrape 주거용프리미엄 프록시를 살펴보세요.