[Python.Web] wget으로 웹 데이터 다운로드 및 파싱 - wget.download
요약
- 2020/11/13 - [Python과 머신러닝/웹 데이터 추출] - [Python.Web] 정규표현식을 이용한 웹 데이터 파싱 - urllib, regular expression
- 한 웹사이트에서 여러 가지의 파일을 다운로드하고 싶을 때에, wget을 사용하여 한번에 다운 받는 프로그램을 짤 수 있다
- 이전에 정리한 내용에 이어서, 정규식을 사용하여 원하는 파일을 다운 받을 URL을 추출한 뒤, wget함수로 다운로드한다.
- 오늘의 예제는 이 링크를 기반으로 진행할 예정이다. 이 페이지는 미국의 특허 관련 문서들을 zip 파일로 정리해 두었는데, 이걸 하나하나 다운로드하지 않고 python 프로그램을 통해서 다운로드 해보자.
- 성격 급한 분들을 위한 선 정답 공개, 후 설명
[Python.Web] 정규표현식을 이용한 웹 데이터 파싱 - urllib, regular expression
웹사이트에서 원하는 형태의 데이터를 긁어오는 방법을 알아보자. 0. 요약 1. 원하는 URL을 정한다. 2. URL로부터 모든 text를 string으로 읽어온다. 3. 내가 찾고자 하는 string을 regular expression 형태로
coding-grandpa.tistory.com
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))
Python으로 웹사이트에서 데이터 추출하기 (urllib, regular expression)
웹사이트에서 원하는 형태의 데이터를 긁어오는 방법을 알아보자. 요약 1. 원하는 URL을 정한다. 2. URL로부터 모든 text를 string으로 읽어온다. 3. 내가 찾고자 하는 string을 regular expression 형태로 정
coding-grandpa.tistory.com
- 정규식 계산이 가장 헷갈리는데, 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.Web] 실시간 금융 데이터 파싱하기 추출
요약 URL로부터 정보를 뽑아오는 3번째 예제이다 (앞의 예제를 못 봤다면 참고해야 이해가 될 것이다) Python으로 웹사이트에서 데이터 추출하기 (urllib, regular expression) 웹사이트에서 원하는 형태의
coding-grandpa.tistory.com
[Python.Web] BeautifulSoup으로 하는 웹크롤링, 데이터 스크레이핑
요약 XML이란 eXtensible Markup Language의 약자로 데이터의 구조와 의미를 설명하기 위해 Tag(Markup)를 사용하는 언어이다. HTML과 비슷하게 데이터가 정형화되어 있어 분석이 편리하고, 이를 더욱 쉽게 Pa
coding-grandpa.tistory.com
[Python.Web] BeautifulSoup과 wget 으로 웹크롤링, 데이터 스크레이핑
요약 지난 내용은 다운로드하여놓은 xml파일을 분석했다면, 이번엔 웹에서 다운로드하는 단계까지 자동화한다 BeautifulSoup으로 하는 웹크롤링, 데이터 스크레이핑 요약 XML이란 eXtensible Markup Languag
coding-grandpa.tistory.com