requests와 BeautifulSoup을 이용해서 웹 크롤링하기
크롤러란?
그르릉..
웹에서 정보 가져오기
Requests
Python에는 requests
라는 http request 라이브러리가 있다.
설치하기
pip install requests
커맨드창에서 저렇게 pip로 간단하게 설치하면 된다!
(팁아닌 팁이자면.. 나중에 requirements.txt 파일에 저 requests 라이브러리를 추가해준 후 한꺼번에 다운로드 할 수 있게 하면 굳!)
이용 방법
아래와 같이 파이썬 파일을 하나 만들어 requests를 import 한 후 사용한다.
# requests 라이브러리 불러오기
import requests
req = requests.get('https://github.com/jiyeoon?tab=repositories')
## HTML 소스 가져오기
html = req.text
## HTML Header 가져오기
header = req.headers
## HTTP Status 가져오기 (200:정상)
status = req.status_code
우리는 웹을 크롤링 하는 것이기 때문에 주로 HTML 소스를 사용한다. 따라서 html = req.text
를 꼭꼭 알고 있어야 한다!
BeautifulSoup
Requests로 불러온 html 코드에서 '의미있는' 정보를 추출할 수 있게 도와주는 라이브러리다. 이 BeautifulSoup은 html 코드를 python이 이해하는 객체 구조로 변환하는 파싱을 맡고있다.
설치하기
pip install bs4
마찬가지로 커맨드창에서 실행한다!
이용 방법
위의 코드에서 살짝 변형을 하자면,
# requests 라이브러리 불러오기
import requests
from bs4 import BeautifulSoup
## HTTP GET Request
req = requests.get('https://github.com/jiyeoon?tab=repositories')
## HTML 소스 가져오기
html = req.text
## BeautifulSoup으로 html소스를 python 객체로 변환하기
## 첫 인자는 html 소스 코드, 두번째 인자는 어떤 parser를 사용할 것인지를 명시한다.
## 이 글에서는 python에 내장되어있는 html.parser를 사용하였다.
soup = BeautifulSoup(html, 'html.parser')
이제 soup
객체에서 원하는 정보를 찾아낼 수 있다.
BeautifulSoup에서는 여러가지 기능을 제공하는데, 여기서는 select를 이용한다. select
는 CSS Selector를 이용해 일치하는 모든 객체들을 List로 반환해준다.
예시로, 내 깃허브 레포지토리들의 타이틀들을 가져와보도록 하자.
크롬 개발자 도구로 확인을 해보면, 저렇게 어쩌구 저쩌구.. div 안에 div 안에 div.. 하다가 h3 그리고 a가 뜬다. 그럼 select 할 때 h3 아래의 a 의 내용들을 모두 가져오겠다고 하면 되겠지?!
# requests 라이브러리 불러오기
import requests
from bs4 import BeautifulSoup
## HTTP GET Request
req = requests.get('https://github.com/jiyeoon?tab=repositories')
## HTML 소스 가져오기
html = req.text
## BeautifulSoup으로 html소스를 python 객체로 변환하기
## 첫 인자는 html 소스 코드, 두번째 인자는 어떤 parser를 사용할 것인지를 명시한다.
## 이 글에서는 python에 내장되어있는 html.parser를 사용하였다.
soup = BeautifulSoup(html, 'html.parser')
## my_title는 리스트 객체
my_titles = soup.select('h3 > a')
for title in my_titles:
print(title.text) #Tag 안에 텍스트 가져오기
print(title.get('href')) #Tag의 속성 가져오기
잘 된당 ㅎㅅㅎ
Reference..
https://beomi.github.io/gb-crawling/posts/2017-01-20-HowToMakeWebCrawler.html
'Computer Engineering' 카테고리의 다른 글
Pandas Basic (0) | 2020.07.01 |
---|---|
[Azure Certi] AZ-900 Certi 준비 (10) - Azure 비용 예상 및 지출 최적화 (0) | 2020.05.27 |
컴퓨터의 성능을 높이는 방법 - 스케일업(scale up)과 스케일 아웃(scale out) (0) | 2020.05.12 |
OSI 참조모델에 대하여 : OSI(Open System Interconnection) (0) | 2020.05.09 |
[정보처리기사 2020 필기 요약] 운영체제의 개념 (0) | 2020.04.07 |
댓글
이 글 공유하기
다른 글
-
[Azure Certi] AZ-900 Certi 준비 (10) - Azure 비용 예상 및 지출 최적화
[Azure Certi] AZ-900 Certi 준비 (10) - Azure 비용 예상 및 지출 최적화
2020.05.27 -
컴퓨터의 성능을 높이는 방법 - 스케일업(scale up)과 스케일 아웃(scale out)
컴퓨터의 성능을 높이는 방법 - 스케일업(scale up)과 스케일 아웃(scale out)
2020.05.12 -
OSI 참조모델에 대하여 : OSI(Open System Interconnection)
OSI 참조모델에 대하여 : OSI(Open System Interconnection)
2020.05.09 -
[정보처리기사 2020 필기 요약] 운영체제의 개념
[정보처리기사 2020 필기 요약] 운영체제의 개념
2020.04.07