일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 시각화
- httr
- 시계열
- ETRI
- 프로그래머스
- SQL
- kt aivle school
- python
- 빅데이터분석기사
- 한국전자통신연구원
- SQLD
- arima
- cnn
- Eda
- 에트리 인턴
- 다변량분석
- matplot
- dx
- 하둡
- 빅분기
- 하계인턴
- 에이블스쿨
- KT 에이블스쿨
- 서평
- 한국전자통신연구원 인턴
- 에이블러
- Ai
- ML
- 기계학습
- ggplot2
- 머신러닝
- KT AIVLE
- hadoop
- r
- 가나다영
- 지도학습
- 딥러닝
- 웹크롤링
- 소셜네트워크분석
- kaggle
Archives
- Today
- Total
소품집
[파이썬을 이용한 웹 크롤링과 스크레이핑] 파이썬으로 스크레이핑 하는 흐름 본문
728x90
2장에서 배운 모든 내용을 정리한 마지막 스크레이핑입니다.
지금까지 세 개의 절에 걸쳐 설명한 처리 내용을 연결해 봅시다. 예제 2.19처럼 하면 웹 페이지를 추출하고, 스크레이핑 하고, 데이터를 저장하는 처리가 한 번에 이뤄집니다. 3개의 처리 내용을 3개의 함수로 구분하고, main() 함수에서 차례대로 호출하게 했습니다.
- fetch(url)
- 매개변수로 url을 받고 지정한 url의 웹페이지를 추출합니다.
- scrape(html)
- 매개변수로 html을 받고, 정규 표현식을 사용해 HTML에서 도서 정보를 추출합니다.
- save(db_path, books)
- 매개변수로 books라는 도서 목록을 받고, SQLite 데이터베이스에 저장합니다.
참고로 def 구문 아래에 여러 줄 문자여열 리터럴("''" ~ """)을 사용해 함수의 설명을 적는 것을 docstring이라고 합니다. 함수의 앞부분에 문자열을 배치해도 프로그램을 실행할 때 어떤 처리도 일어나지 않으므로 다른 프로그래밍 언어에서 여러 줄 주석처럼 사용할 수 있게 됩니다. 함수뿐만 아니라 모듈, 클래스에도 docstring을 작성할 수 있으며 이를 활용하면 doctest라고 하는 단위 테스트를 작성할 수 도 있습니다.
예제2.19 - 파이썬으로 스크레이핑 하기
import re
import sqlite3
from urllib.request import urlopen
from html import unescape
def main():
"""
메인 처리입니다.
fetch(), scrape(), save() 함수를 호출합니다.
"""
html = fetch('http://www.hanbit.co.kr/store/books/full_book_list.html')
books = scrape(html)
save('books.db', books)
def fetch(url):
"""
매개변수로 전달받을 url을 기반으로 웹 페이지를 추출합니다.
웹 페이지의 인코딩 형식은 Content-Type 헤더를 기반으로 알아냅니다.
반환값: str 자료형의 HTML
"""
f = urlopen(url)
# HTTP 헤더를 기반으로 인코딩 형식을 추출합니다.
encoding = f.info().get_content_charset(failobj="utf-8")
# 추출한 인코딩 형식을 기반으로 문자열을 디코딩합니다.
html = f.read().decode(encoding)
return html
def scrape(html):
"""
매개변수 html로 받은 HTML을 기반으로 정규 표현식을 사용해 도서 정보를 추출합니다.
반환값: 도서(dict) 리스트
"""
books = []
# re.findall()을 사용해 도서 하나에 해당하는 HTML을 추출합니다.
for partial_html in re.findall(r'<td class="left"><a.*?</td>', html, re.DOTALL):
# 도서의 URL을 추출합니다.
url = re.search(r'<a href="(.*?)">', partial_html).group(1)
url = 'http://www.hanbit.co.kr' + url
# 태그를 제거해서 도서의 제목을 추출합니다.
title = re.sub(r'<.*?>', '', partial_html)
title = unescape(title)
books.append({'url': url, 'title': title})
return books
def save(db_path, books):
"""
매개변수 books로 전달된 도서 목록을 SQLite 데이터베이스에 저장합니다.
데이터베이스의 경로는 매개변수 dp_path로 지정합니다.
반환값: None(없음)
"""
# 데이터베이스를 열고 연결을 확립합니다.
conn = sqlite3.connect(db_path)
# 커서를 추출합니다.
c = conn.cursor()
# execute() 메서드로 SQL을 실행합니다.
# 스크립트를 여러 번 실행할 수 있으므로 기존의 books 테이블을 제거합니다.
c.execute('DROP TABLE IF EXISTS books')
# books 테이블을 생성합니다.
c.execute('''
CREATE TABLE books (
title text,
url text
)
''')
# executemany() 메서드를 사용하면 매개변수로 리스트를 지정할 수 있습니다.
c.executemany('INSERT INTO books VALUES (:title, :url)', books)
# 변경사항을 커밋(저장)합니다.
conn.commit()
# 연결을 종료합니다.
conn.close()
# python 명령어로 실행한 경우 main() 함수를 호출합니다.
# 이는 모듈로써 다른 파일에서 읽어 들였을 때 main() 함수가 호출되지 않게 하는 것입니다.
# 파이썬 프로그램의 일반적인 작성 방식입니다.
if __name__ == '__main__':
main()
이를 python_scrapy.py 이라는 이름으로 저장하고 실행하면, books.db라는 이름의 데이터베이스에 데이터가 저장됩니다.
(scraping) dayeong@dayeong-ui-MacBookPro ~ % python python_scrapy.py
(scraping) dayeong@dayeong-ui-MacBookPro ~ % python python_scrapy.py
(scraping) dayeong@dayeong-ui-MacBookPro ~ % sqlite3 books.db 'SELECT * FROM books'
모던 자바스크립트 핵심 가이드|http://www.hanbit.co.kr/store/books/look.php?p_code=B7677466304
고성능 파이썬(2판)|http://www.hanbit.co.kr/store/books/look.php?p_code=B8494674601
데이터가 뛰어노는 AI 놀이터, 캐글|http://www.hanbit.co.kr/store/books/look.php?p_code=B4998513859
데이터 과학을 위한 통계(2판)|http://www.hanbit.co.kr/store/books/look.php?p_code=B2862122581
일잘러의 비밀, 구글 스프레드시트 제대로 파헤치기|http://www.hanbit.co.kr/store/books/look.php?p_code=B7461753617
부동산 세금 사용설명서|http://www.hanbit.co.kr/store/books/look.php?p_code=B7599434121
이벤트 기반 마이크로서비스 구축|http://www.hanbit.co.kr/store/books/look.php?p_code=B6410605208
파이썬 비동기 라이브러리 Asyncio|http://www.hanbit.co.kr/store/books/look.php?p_code=B7267069633
한 권으로 끝내는 Node & Express(2판)|http://www.hanbit.co.kr/store/books/look.php?p_code=B9078814814
소문난 명강의 : 김상형의 SQL 정복|http://www.hanbit.co.kr/store/books/look.php?p_code=B9543045444
나는 독이 되는 관계를 끝내기로 했다|http://www.hanbit.co.kr/store/books/look.php?p_code=B5960452302
엑셀 데이터 분석 바이블|http://www.hanbit.co.kr/store/books/look.php?p_code=B7362588632
맛있는 디자인 어도비 XD CC|http://www.hanbit.co.kr/store/books/look.php?p_code=B5726083423
읽는 순간 웃음이 팡! 낱말 퍼즐의 신|http://www.hanbit.co.kr/store/books/look.php?p_code=B8970347723
읽는 순간 웃음이 팡! 속담의 신|http://www.hanbit.co.kr/store/books/look.php?p_code=B1260294646
읽는 순간 웃음이 팡! 수수께끼의 신|http://www.hanbit.co.kr/store/books/look.php?p_code=B8662800021
쿼커스 쿡북|http://www.hanbit.co.kr/store/books/look.php?p_code=B7614945801
1년 후 내가 이 세상에 없다면|http://www.hanbit.co.kr/store/books/look.php?p_code=B6666542497
중세 1 : 만화로 배우는 서양사|http://www.hanbit.co.kr/store/books/look.php?p_code=B9915338821
중세 2 : 만화로 배우는 서양사|http://www.hanbit.co.kr/store/books/look.php?p_code=B2832646005
실전 시계열 분석|http://www.hanbit.co.kr/store/books/look.php?p_code=B9090689318
누워서 읽는 통계학|http://www.hanbit.co.kr/store/books/look.php?p_code=B9477508508
젠더 모자이크|http://www.hanbit.co.kr/store/books/look.php?p_code=B7301449278
우리가 시를 처음 쓴다면 그건 분명 윤동주일 거야: 『하늘과 바람과 별과 시』 필사|http://www.hanbit.co.kr/store/books/look.php?p_code=B2781572316
스파크를 활용한 실시간 처리|http://www.hanbit.co.kr/store/books/look.php?p_code=B7070333457
나 아직 안 죽었다|http://www.hanbit.co.kr/store/books/look.php?p_code=B5735013586
게임 엔진 블랙 북 : 둠|http://www.hanbit.co.kr/store/books/look.php?p_code=B6489048497
만만한 통계 : R 활용|http://www.hanbit.co.kr/store/books/look.php?p_code=B1073758476
러닝 SQL|http://www.hanbit.co.kr/store/books/look.php?p_code=B4640245615
이야기로 배우는 구글 빅쿼리|http://www.hanbit.co.kr/store/books/look.php?p_code=B6735191805
저는 심리학이 처음인데요(개정판)|http://www.hanbit.co.kr/store/books/look.php?p_code=B1227197960
저는 인문학이 처음인데요(개정판)|http://www.hanbit.co.kr/store/books/look.php?p_code=B1835066256
쓰면서 익히는 알고리즘과 자료구조|http://www.hanbit.co.kr/store/books/look.php?p_code=B7050837867
찾아도 찾아도 끝판왕 집중력 미로찾기 101|http://www.hanbit.co.kr/store/books/look.php?p_code=B3087610055
찾아도 찾아도 끝판왕 창의력 미로찾기 101|http://www.hanbit.co.kr/store/books/look.php?p_code=B8101312807
오늘부터 달리기를 합니다|http://www.hanbit.co.kr/store/books/look.php?p_code=B1790423150
몽고DB 완벽 가이드(3판)|http://www.hanbit.co.kr/store/books/look.php?p_code=B2586509403
어린이를 위한 초등 자기주도 공부법×배움공책|http://www.hanbit.co.kr/store/books/look.php?p_code=B6340928295
기술의 시대|http://www.hanbit.co.kr/store/books/look.php?p_code=B1057946120
맛있는 디자인 프리미어 프로 CC 2021|http://www.hanbit.co.kr/store/books/look.php?p_code=B4734841062
GAN 첫걸음|http://www.hanbit.co.kr/store/books/look.php?p_code=B9417661237
디노 첫걸음|http://www.hanbit.co.kr/store/books/look.php?p_code=B8371133122
맛있는 디자인 일러스트레이터 CC 2021|http://www.hanbit.co.kr/store/books/look.php?p_code=B4979866790
4차 산업혁명 시대를 위한 e-비즈니스 개론(4판)|http://www.hanbit.co.kr/store/books/look.php?p_code=B6808882615
사실은 사랑받고 싶었어|http://www.hanbit.co.kr/store/books/look.php?p_code=B3104313168
대한민국 부동산 미래지도|http://www.hanbit.co.kr/store/books/look.php?p_code=B6068039583
맛있는 디자인 포토샵 CC 2021|http://www.hanbit.co.kr/store/books/look.php?p_code=B1925383546
맛있는 디자인 애프터 이펙트 CC 2021|http://www.hanbit.co.kr/store/books/look.php?p_code=B1863505588
친절한 딥러닝 수학|http://www.hanbit.co.kr/store/books/look.php?p_code=B3866059305
이것이 안드로이드다 with 코틀린(개정판)|http://www.hanbit.co.kr/store/books/look.php?p_code=B3136457679
이 포스팅은 위키북스 파이썬 크롤링과 스크레이핑을 참조하였습니다.
728x90
'Web crawling' 카테고리의 다른 글
무슨~ 어디서~ 잘 못 됐는지~ 모르겠는디요~ (0) | 2021.05.12 |
---|---|
[파이썬을 이용한 웹 크롤링과 스크레이핑] XML(RSS) 스크레이핑 (0) | 2021.05.04 |
Mac OS 터미널 실행시 (base) user로 뜰 때/가상환경 사용법 (2) | 2021.05.03 |
ModuleNotFoundError: No module named 'MySQLdb' / 왜 안될까 왜 안될까 (0) | 2021.04.08 |
[python] bs4 패키지를 이용해 네이버 날씨 crawling 연습해보기 (0) | 2021.04.05 |
Comments