Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- Repository
- AI
- AWS
- abex'crackme
- Java
- 네트워크
- Mac
- Reversing
- bastion host
- 스위치
- 머신러닝
- 자바
- docker
- RIP
- 암호학
- cmd
- STP
- 인공지능
- 크롤러
- CISCO
- vlan
- 라우터
- Python
- 리버싱
- 머신러닝 프로세스
- 온프레미스
- dreamhack
- vector
- Firewall
- Screening Router
Archives
- Today
- Total
Haekt‘s log
[Python3] 간단한 웹 크롤러 만들기 본문
웹사이트의 html 및 js 코드를 크롤링 해보자.
- 필요한 사전 지식
- 크롤링 : WWW 를 탐색해 나가는 행위를 말한다.
- 파싱 : 자연어, 컴퓨터 언어 등의 문자열을 분석하는 프로세스를 말한다.
- 파서 : 파싱을 하는 프로그램을 말한다.
- 사용한 라이브러리
- urllib : http 관련 요청을 수행할 수 있게 도와주는 python 라이브러리
- requests : http 관련 요청을 수행할 수 있게 도와주는 python 라이브러리 ( 쉽고, 안정적이어서 urllib 보다 더 잘 사용된다고 함.)
- BeautifulSoup(BS) : html 구조 해석을 도와주는 python 라이브러리
- BS 라이브러리
BS 는 사용자가 선택한 파서를 이용해
html 과 xml 코드를 파싱, 검색, 수정하는 기능을 제공한다.
- BS 라이브러리 파서 종류
- BS 라이브러리 find 함수
BS 의 find 함수는 html태그 와 속성 값을 이용해 원하는 내용을 검색하게 해준다.
* 만약 attributes 가 제대로 검색이 안될경우, 딕셔너리로 넣어주면 된다.
예를 들어 find( ‘table’, {'class':’test1'} ) 이런식으로 작성하면 된다.
- 코딩 예시 (1)
$ source activate sai # sai 이름의 아니콘다 가상환경 활성화
# $ pip install urllib3
$ pip install beautifulsoup4 # beautifulsoup 라이브러리 설치
--------------------------------------------
import urllib.request
from bs4 import BeautifulSoup
url = "<https://haekt-log.tistory.com/72>" # 크롤링 할 url 주소
html = urllib.request.urlopen(url) # urlopen 함수로 괄호안의 주소의 html 값을 긁어옴
bsobj=BeautifulSoup(html.read().decode('utf-8'), 'html.parser')
# utf-8 형태로 디코딩, html.parser 로 파싱함
print(bsobj) # 긁어온 결과를 출력함
- 실행 결과 (일부)
- 코딩 예시 (2)
아래는 파서를 html5lib 로 바꾸어 응용한 코드이다. table 태그 부분만 가져올 수 있게 변경했다.
$ pip install html5lib # html5lib 파서 다운로드
--------------------------------------------------
import urllib.request
from bs4 import BeautifulSoup
def get_html(url):
try:
html = urllib.request.urlopen(url).read().decode('utf-8')
except:
return None
if(html==None):
print("url get error")
else:
bsobj=BeautifulSoup(html, 'html5lib')
print(bsobj.find('table')) # table 부분을 가져옴
return bsobj
url = "https://haekt-log.tistory.com/72"
get_html(url)
- 실행 결과 (일부)
* 정규표현식을 사용하면, 원하는 부분만 골라서 가져올 수 있다.
'언어 > Python' 카테고리의 다른 글
[Python3] 정규표현식을 이용한 크롤러 만들기 (0) | 2023.03.06 |
---|---|
[Python2] SyntaxError: Non-ASCII character '\xec' in file ... (0) | 2023.03.05 |
[Python3] Linux 디렉토리 안의 파일 리스트 뽑아오기. (0) | 2023.03.05 |
Comments