[Python.Web] wget으로 웹 데이터 다운로드 및 파싱 - wget.download

2020. 11. 17. 05:00Python과 머신러닝/웹 데이터 추출

요약

 

[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 파일을 추출할 정규식 만들기

 

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_listtuple의 리스트 타입이고, 각각의 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이다.
  • 여러 파일을 하나하나 다운로드 하는 노동을 줄이고 (특히나 동일한 페이지에서 주기적으로 파일을 다운로드 해야 할 경우), 다운로드는 프로그램을 통해 빠르게 하고 데이터를 가지고 보다 창의적인 업무에 집중을 쏟으면 좋겠다. 

 

관련 포스트

 

[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

 

반응형