1. 크롤링(Crawling)
1.1 크롤링이란?
- 웹 페이지를 가져와서 데이터를 추출하는것
- 크롤링하는 소프트웨어를 크롤러(crawler)라고 함
1.2 크롤링 소프트웨어
- Beautifulsoup
2. 실습
2.1 간단한 사이트 크롤링하기
- https://beans.itcarlow.ie/prices.html
- 커피 가격을 올리는 사이트, 학습용 사이트 이다
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을 사용하면 됨