일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 지능형
- 라즈베리파이
- 서버
- IMAGE
- RapidCheck
- php
- 안드로이드
- tracking
- Android
- 데이터
- Python
- 정리
- Object Detection
- Linux
- Video
- 고급C
- Deep Learning
- MySQL
- Machine Learning
- tensorflow
- keras
- FLASK
- Raspberry
- 디버그모드
- 가상환경
- sw
- 머신러닝
- C언어
- detection
- 영상분석
- Today
- Total
건프의 소소한 개발이야기
[Python] Beautifulsoup 으로 웹크롤링 하기 본문
안녕하세요, 건프입니다.
이번에는 python 의 대표적인 웹크롤러인 beautifulsoup 을 이용해서, 간단한 웹크롤러의 기본을 만드려고 합니다.
beautifulsoup 의 공식 홈페이지 및 Quick Start 페이지는 여기서 확인하시면 됩니다.
https://www.crummy.com/software/BeautifulSoup/bs4/doc/#quick-start
그럼 본격적으로 시작해봅시다.
0. 가상환경 구축
저는 파이썬 패키지들끼리 의존성에 충돌이 나는것을 굉장히 싫어하기 때문에 새로운 작업을 할때, 반드시 새로운 가상환경을 만듭니다.
$ virtualenv venvBeautifulSoup
$ source venvBeautifulSoup/bin/activate
1. Install
가상환경을 킨 상태에서 pip install 명령을 수행하면, 해당 환경에서만 동작하도록 설치가 됩니다.
$ pip install beautifulsoup4
4버전이 최신버전 입니다.
2. 무엇을 긁을까요?
무엇을 긁을지 고민하다 우리 개발자들이 항상 들어가고 애용하는 github 사이트의 레포지토리 목록을 긁어보도록 하겠습니다.
크롬창에서 본인 레포지토리의 첫번째 의 위치를 마우스 오른쪽 클릭하고 '검사'를 누르면 위와 같이 개발자모드가 열립니다.
이것저것 테스트를 해보시면 알겠지만, div 태그의 class="repo-list-item public source" 를 가지고 있는 태그가 repository 의 하나의 아이템을 담고 있습니다.
자 그럼 이것을 파이썬으로 긁어봅시다.
3. 긁어봅시다.
from bs4 import BeautifulSoup
from urllib.request import urlopen
# 인터넷 환경인지 확인해주세요
res = urlopen('https://github.com/SSUHan?tab=repositories').read().decode('utf-8')
# urlopen 으로 해당 url 의 html 코드들을 가져옵니다
# print(res)
soup = BeautifulSoup(res, 'html.parser')
# BeautifulSoup 객체의 파싱 방법은 4가지가 있다고 합니다 그중 html.parser를 사용할 것입니다
print(type(soup))
# bs4.BeautifulSoup 객체가 리턴됩니다
repo_list = soup.find_all('div', class_='repo-list-item public source')
# div 태그인데 클래스가 다음과 같은 div 태그들을 전부 찾아서 반환합니다
print(type(repo_list))
# 리턴된 타입은 bs4.element.ResultSet 객체 입니다
repo_item = repo_list[0]
# 내용물이 많기때문에 그 중 첫번째 요소를 받아냅니다
# print(repo_item.prettify()) 이거 됩니다 ㅋㅋ
print(type(repo_item))
# 각각의 아이템의 타입은 bs4.element.Tag 객체 입니다
print('='*20) # 구분선을 두었으니 어디가 어디까지인지 확인하실 수 있습니다
print(repo_item.h3)
# Tag 객체 안의 child 태그를 접근할 때는 위와 같이 접근이 가능합니다
print('='*20)
print(repo_item.h3.a)
print('='*20)
print(repo_item.h3.a['href'])
# Tag 객체 안의 attr 의 정보를 얻으려면 위와 같이 하면 됩니다
print('='*20)
print(repo_item.h3.a.string)
# 실제적인 바디값을 얻으려면 위와 같이 하면 됩니다
print('='*20)
link = "https://github.com" + repo_item.h3.a['href']
# 링크를 완성하기 위해서 join 합니다
print(link)
# 짠 여러분들은 해당 repo 의 링크를 얻어냈습니다
print('='*20)
결과입니다
자 응용하실 수 있겠나요?
참고할만한 좋은 사이트를 첨부합니다.
http://jhjeong.com/python/2016/01/28/beautifulsoup-web-crawling/
도움이 되었길 바랍니다
고맙습니다 :)
' 개발 이야기 > Python 이야기' 카테고리의 다른 글
[Python - Anaconda] 실전 사용법 완벽정리 (1) | 2017.08.01 |
---|---|
[Python] 날짜객체 정리하기 - datetime, time (0) | 2017.07.28 |
Dropbox 파일 업로드 스크립트 만들기 (0) | 2017.07.11 |
[Python - 가상환경] Virtualenv 가상환경 자동 실행 (autoenv) (1) | 2016.08.10 |