Posts 크롤링(Crawling) 기초(1)
Post
Cancel

크롤링(Crawling) 기초(1)

1. 크롤링(Crawling)


1.1 크롤링이란?

  • 웹 페이지를 가져와서 데이터를 추출하는것
  • 크롤링하는 소프트웨어를 크롤러(crawler)라고 함


1.2 크롤링 소프트웨어

  • Beautifulsoup


2. 실습


2.1 간단한 사이트 크롤링하기


2.2 Beautifulsoup

1
2
3
4
5
6
from bs4 import BeautifulSoup
from urllib.request import urlopen

url = 'http://beans.itcarlow.ie/prices.html'
page = urlopen(url)
soup = BeautifulSoup(page, 'html.parser')
  • 웹페이지의 url 주소는 urllib.request.urlopen으로 접근
  • 웹페이지의 html 언어는 Beautifulsoup으로 파싱함


2.3 HTML tag

1
print(soup.prettify())
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<html>
 <head>
  <title>
   Welcome to the Beans'R'Us Pricing Page
  </title>
  <link href="beansrus.css" rel="stylesheet" type="text/css"/>
 </head>
 <body>
  <h2>
   Welcome to the Beans'R'Us Pricing Page
  </h2>
  <p>
   Current price of coffee beans =
   <strong>
    $5.62
   </strong>
  </p>
  <p>
   Price valid for 15 minutes from Wed Oct 14 02:55:01 2020.
  </p>
 </body>
</html>
  • prettify()는 bs가 지원하는 명령으로 print와 함께 사용하면 들여쓰기로 표현해줌


2.4 Find

1
print(soup.find('head').prettify())
1
2
3
4
5
6
<head>
 <title>
  Welcome to the Beans'R'Us Pricing Page
 </title>
 <link href="beansrus.css" rel="stylesheet" type="text/css"/>
</head>
  • Find 명령은 찾는 Tag 중 첫번째 결과를 보여줌


2.5 Body

1
print(soup.find('body').prettify())
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<body>
 <h2>
  Welcome to the Beans'R'Us Pricing Page
 </h2>
 <p>
  Current price of coffee beans =
  <strong>
   $5.62
  </strong>
 </p>
 <p>
  Price valid for 15 minutes from Wed Oct 14 02:55:01 2020.
 </p>
</body>
  • Body 태그는 화면에 보이는 내용


2.6 H tag

1
print(soup.find('h2').prettify())
1
2
3
<h2>
 Welcome to the Beans'R'Us Pricing Page
</h2>
  • H tag는 제목 역할


2.7 P tag

1
print(soup.find('p').prettify())
1
2
3
4
5
6
<p>
 Current price of coffee beans =
 <strong>
  $5.62
 </strong>
</p>
  • P tag는 문단 구분


2.8 Filn_all

1
2
3
print(soup.find_all('p'))
print(soup.find_all('p')[0])
print(soup.find_all('p')[1])
1
2
3
[<p>Current price of coffee beans = <strong>$5.62</strong></p>, <p>Price valid for 15 minutes from Wed Oct 14 02:55:01 2020.</p>]
<p>Current price of coffee beans = <strong>$5.62</strong></p>
<p>Price valid for 15 minutes from Wed Oct 14 02:55:01 2020.</p>
  • Find_all 메서드는 해당 태그를 모두 찾음


2.9 String과 Get_text()

1
soup.find('strong')
1
<strong>$5.62</strong>
  • strong 태그를 찾음


1
soup.find('strong').string
1
'$5.62'
  • strong 태그의 문자열(string)을 출력


1
soup.find('strong').get_text()
1
'$5.62'
  • get_text를 이용하여 text형식을 출력


3. 크롬 (Chrome)


3.1 크롬 (Chrome)의 개발자 도구

  • 위 예시처럼 html을 파싱해서 태그를 찾을수 있지만, 크롬 개발자 도구룰 통해 조금더 쉽게 알수 있음
  • Chrome에서 더보기(오른쪽 상단 점 3개) -> 도구 더보기 -> 개발자 도구
  • Windows : Shift + Ctrl + I
  • Mac : Option + Command + I


3.2 엘레먼츠 (Elements)

  • 네모박스안에 마우스아이콘이 있는 버튼을 클릭
  • 보고 싶은 데이터를 클릭
  • Elements에 데이터에 해당하는 tag와 위치가 뜸


4. 요약


4.1 요약

  • html 페이지의 크롤링은 Beutifulsoup으로 하는것이 편함
  • 웹페이지의 변화만 없다면 계속 크롤링이 가능함
  • Beutifulsoup의 find와 find_all을 사용하면 됨
This post is licensed under CC BY 4.0 by the author.