일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- MVVM pattern
- 웹크롤링
- Android
- java
- Apollo Server
- graphQL
- 유니티
- Kotlin
- 안드로이드 mvp
- Design Pattern
- 자바
- 안드로이드
- Dependency Injection
- dagger-hilt
- Apollo GraphQL
- PYTHON
- prisma
- 우분투 파이썬
- unit test
- LinkedList
- flutter
- Data structure
- 파이썬 크롤링
- 자바기초
- Android test
- Nexus GraphQL
- mvvm
- 안드로이드 디자인패턴
- ubuntu python
- 안드로이드 테스트
- Today
- Total
Hun's Blog
[Python] 웹 크롤링 2 - Python BeautifulSoup4, requests 설치 + 네이버 날씨 미세먼지 가져오기 본문
[Python] 웹 크롤링 2 - Python BeautifulSoup4, requests 설치 + 네이버 날씨 미세먼지 가져오기
jhk-im 2020. 4. 5. 19:27참고
파이썬 레시피 - 웹 활용 입문편을 공부하면서 정리한 내용
Beautifulsoup ?
HTML 및 XML 파일에서 데이터를 가져오는 Python 라이브러리 이다.
Beautifulsoup 가 가져올 수 있는 page source 는 정적 스크립트이다.
javascript 로 생성되는 동적 스크립트는 python 의 또다른 라이브러리인 selenium 을 이용해 pulling 한다.
웹의 어지간한 data 는 beautiful soup 과 selenium 을 통해 가져올 수 있다.
requests ?
HTTP Request를 웹 브라우저가 아닌 python에서 가능하게 해주는 모듈이다.
프로그래밍 언어 별로 각각 HTTP Request를 편리하게 할 수 있도록 도와주는 모듈이 있다.
python에서는 requests가 HTTP 관련된 작업을 편리하게 할 수 있도록 해준다.
HTTP Request와 관련된 수많은 모듈 중 가장 많이 사용되는 모듈이기도 하다.
PIP?
python으로 작성된 패키지 라이브러리를 관리해주는 시스템이다.
우분투와 비교하자면 apt-get 과 흡사하다고 할 수 있다.
pip는 파이썬 3.4 이후 기본적으로 포함되어 있어 별도의 설치가 필요없다.
1. 설치
sudo apt-get update // 사용가능한 패키지와 그 버전들의 리스트를 업데이트
#sudo apt-get install python3-pip
sudo pip3 install requests
sudo pip3 install beautifulsoup4
2. 스크립트 작성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#!/usr/local/bin/python3
from bs4 import BeautifulSoup as bs
from pprint import pprint
import requests
#pprint(html.text)
#pprint(data1)
data2 = data1.findAll('dd')
#pprint(data2)
fine_dust = data2[0].find('span',{'class':'num'}).text
print(fine_dust)
ultra_fine_dust = data2[1].find('span',{'class':'num'}).text
print(ultra_fine_dust)
|
--
2-1 requests.get()
-> requests모듈의 get 메소드에 url 을 입력하면 해당 url의 페이지의 html 소스를 전부 가져온다.
--
2-2 bs()
-> BeautifulSoup 모듈의 BeautifulSoup 변수를 bs 라는 이름으로 지정하여 사용한다.
-> bs() 로 해당 변수를 생성할 때 파싱할 문서인 html.text 를 입력하고 'html.parser' 를 입력한다.
-> 이렇게 생성된 bs 변수는 입력된 문서의 결과를 내부 메소드들을 통해 반환한다.
-> soup 이라는 변수에 담는다.
2-3 soup.find(name,attrs,recursive,string,**kwargs)
-> bs 의 find() 메소드에 태그명, 타이틀명, 소스명 등을 입력하면 해당 내용을 찾아 결과값을 반환한다.
-> find() 메소드는 조건에 맞는 태그를 가져오는데 조건에 맞는 태그가 다수이면 가장 첫 번째 태그를 가져온다.
-> 'div',{'class':'detail_box'} 를 입력한다.
-> html에서 div를 모두 검색하면서 class명이 'detail_box' 인 div를 찾아 반환한다.
-> data1 변수에 결과값을 담는다.
--
2-4 data1.findAll(name,attrs,recursive,string,limit,**kwargs)
-> findAll() 메소드에 마찬가지로 가져올 내용을 입력하여 해당 내용을 찾아 결과값을 반환한다.
-> findAll() 메소드는 조건에 맞는 모든 태그들을 가져온다.
-> 'dd'를 입력한다.
-> data1 에서 태그명이 dd 인 모든 태그를 찾아 반환한다.
-> data2 변수에 결과값을 담는다.
--
위 이미지를 보면 findAll() 메소드는 찾은 모든 리스트를 배열로 저장한다는 것을 알 수 있다.
2-5 data2[0].find( data2[0].find('span',{'class':'num'}).text
-> data2의 첫번째 column의 소스를 .find() 메소드로 특정 태그를 찾는다.
-> 'span',{'class':'num'}을 입력한다.
-> class 명이 num 인 span 태그를 찾아 반환한다.
-> find() 메소드 뒤에 .text 를 입력하면 해당 태그의 Text를 반환한다.
-> 첫번째 column의 class명 'num' 인 span 태그의 Text는 51㎍/㎥ 이다.
-> 반환된 text를 fine-dust 변수에 담아 print() 메소드로 출력한다.
-> data2[1] 로 두번째 column의 소스도 동일한 방법으로 찾아와 출력한다.
새로 알게된 내용-
from, import, as?
import 모듈명
-> 해당 모듈 전체를 가져온다.
-> 이 방법으로 추가된 모듈은 항상 '모듈명.메소드' 와 같이 모듈명을 앞에 붙여주어야 한다.
from 모듈명 import 메소드/변수
-> 해당 모듈 내부에 있는 특정 메소드나 변수를 가져온다.
-> 이렇게 추가된 메소드/변수는 모듈명을 붙이지 않고 그대로 사용할 수 있다.
from 모듈명 import 메소드명 as 별명
-> 메소드에 특정 별명을 지정한다.
-> 메소드 이름이 길거나 스크립트 내부에 동일한 메소드명이 존재 할 때 별명을 붙여 구분한다.
pprint?
pprint 모듈은 임의의 파이썬 데이터 구조를 인터프린터의 입력으로 사용할 수 있다.
Pretty Print 로써 복잡한 자료구조의 내용을 조금 더 알기 쉽게 표시해 주는 기능을 지원한다.
'Language > Python' 카테고리의 다른 글
[Python] 웹 크롤링 6 - 1 to 50 봇 (0) | 2020.04.06 |
---|---|
[Python] 웹 크롤링 5 - selenium을 활용한 유튜브 키워드 검색하기 (0) | 2020.04.06 |
[Python] 웹 크롤링 4 - 네이버 웹툰 썸네일 가져오기 (0) | 2020.04.06 |
[Python] 웹 크롤링 3 - 네이버 웹툰 제목 가져오기 (0) | 2020.04.05 |
[Python] 웹 크롤링 1 - Ubuntu 18.04.3 에서 Python 3.7.4 설치 (+APM) (0) | 2020.04.01 |