[Python.Web] wget으로 웹 데이터 다운로드 및 파싱 - wget.download
2020. 11. 17. 05:00ㆍPython과 머신러닝/웹 데이터 추출
요약
- 2020/11/13 - [Python과 머신러닝/웹 데이터 추출] - [Python.Web] 정규표현식을 이용한 웹 데이터 파싱 - urllib, regular expression
- 한 웹사이트에서 여러 가지의 파일을 다운로드하고 싶을 때에, wget을 사용하여 한번에 다운 받는 프로그램을 짤 수 있다
- 이전에 정리한 내용에 이어서, 정규식을 사용하여 원하는 파일을 다운 받을 URL을 추출한 뒤, wget함수로 다운로드한다.
- 오늘의 예제는 이 링크를 기반으로 진행할 예정이다. 이 페이지는 미국의 특허 관련 문서들을 zip 파일로 정리해 두었는데, 이걸 하나하나 다운로드하지 않고 python 프로그램을 통해서 다운로드 해보자.
- 성격 급한 분들을 위한 선 정답 공개, 후 설명
import re
from urllib import request
import wget
url="http://www.google.com/googlebooks/uspto-patents-grants-text.html" #url 입력
html=request.urlopen(url) # url 열기
html_contents=str(html.read().decode("cp949")) #html 파일을 읽어서 문자열로 변환한다
url_list = re.findall(r"(http)(.+)(zip)", html_contents) #html_contents로부터 zip 파일들의 http 주소만 추출하기 (List로 반환)
for url in url_list: #list에서 tuple을 하나씩 꺼내서 전부 다운 받는 loop
url_full="".join(url) #tuple을 str으로 변환
file_name=url_full.split("/")[-1] # URL 중에서 파일 이름만 추출
print('\nDownloading ' + file_name)
wget.download(url_full) #URL 주소에서 wget을 통해 다운 받는다.
1. URL 소스로 들어가서 zip 파일을 추출할 정규식 만들기
- 지난 예제와 동일하게 URL에서 소스를 보면, zip파일을 다운로드하기 위한 정규식을 만들 수 있을 것이다 (기억이 나지 않으시는 분들은 참고 : 2020/11/13 - [2. Python을 이용한 데이터 분석과 머신러닝] - Python으로 웹사이트에서 데이터 추출하기 (urllib, regular expression))
- 정규식 계산이 가장 헷갈리는데, regexr.com을 통해서 여러 가지 시도해보면 (http)(.+)(zip)이 하나의 답이 될 수 있다는 것을 발견했을 것이다.
- url에서 소스를 읽어오는 것은 동일하니, 지난 코드에서 정규식만 수정해서 다음과 같이 작성할 수 있다.
import re
from urllib import request
url="http://www.google.com/googlebooks/uspto-patents-grants-text.html" #url 입력
html=request.urlopen(url) # url 열기
html_contents=str(html.read().decode("cp949")) #html 파일을 읽어서 문자열로 변환한다
url_list = re.findall(r"(http)(.+)(zip)", html_contents) #html_contents로부터 zip 파일들의 http 주소만 추출하기 (List로 반환)
2. 추출한 List로 다운로드하기 (wget)
- url_list는 tuple의 리스트 타입이고, 각각의 tuple은 하나의 url을 갖고 있다
- 즉, url의 한 요소가 우리가 다운로드하고자 하는 zip 파일이 된 것이다.
- 우리는 이 zip 파일을 다운로드하기 위해 wget.download라는 함수를 사용할 것이다.
- 그리고 이 함수는 string을 인자로 다운 받기 때문에 tuple을 string으로 변환하는 과정을 수행할 것이다.
import re
from urllib import request
import wget
url="http://www.google.com/googlebooks/uspto-patents-grants-text.html" #url 입력
html=request.urlopen(url) # url 열기
html_contents=str(html.read().decode("cp949")) #html 파일을 읽어서 문자열로 변환한다
url_list = re.findall(r"(http)(.+)(zip)", html_contents) #html_contents로부터 zip 파일들의 http 주소만 추출하기 (List로 반환)
for url in url_list: #list에서 tuple을 하나씩 꺼내서 전부 다운 받는 loop
url_full="".join(url) #tuple을 str으로 변환
file_name=url_full.split("/")[-1] # URL 중에서 파일 이름만 추출
print('\nDownloading ' + file_name)
wget.download(url_full) #URL 주소에서 wget을 통해 다운 받는다.
마무리
- Python은 다른 언어에 비해서 상당히 쉬운데, 그렇다고 기능이 부족하지도 않다.
- 제공되는 라이브러리를 잘 알고 사용하는 것이 능력일만큼, 다양한 라이브러리가 이미 제공되고 그중 하나가 wget이다.
- 여러 파일을 하나하나 다운로드 하는 노동을 줄이고 (특히나 동일한 페이지에서 주기적으로 파일을 다운로드 해야 할 경우), 다운로드는 프로그램을 통해 빠르게 하고 데이터를 가지고 보다 창의적인 업무에 집중을 쏟으면 좋겠다.
관련 포스트
- 2020/11/18 - [Python과 머신러닝/웹 데이터 추출] - [Python.Web] 실시간 금융 데이터 파싱하기 추출
- 2020/11/20 - [Python과 머신러닝/웹 데이터 추출] - [Python.Web] BeautifulSoup으로 하는 웹크롤링, 데이터 스크레이핑
- 2020/11/23 - [Python과 머신러닝/웹 데이터 추출] - [Python.Web] BeautifulSoup과 wget 으로 웹크롤링, 데이터 스크레이핑
'Python과 머신러닝 > 웹 데이터 추출' 카테고리의 다른 글
[Python.Web] BeautifulSoup과 wget 으로 웹크롤링, 데이터 스크레이핑 (0) | 2020.11.23 |
---|---|
[Python.Web] BeautifulSoup으로 하는 웹크롤링, 데이터 스크레이핑 (0) | 2020.11.20 |
[Python.Web] 실시간 금융 데이터 파싱하기 추출 (0) | 2020.11.18 |
[Python.Web] 정규표현식을 이용한 웹 데이터 파싱 - urllib, regular expression (0) | 2020.11.13 |
보일러 플레이트(Boiler Plate) 이해하기 (0) | 2020.10.31 |