2021. 2. 25. 19:47ㆍ언어영역/Python
어차피 읽는 건 콘텐츠
이전 게시물에서 우리가 인터넷 링크의 여러 가지 정보를 가져올 수 있음을 공부했다. 하지만 우리가 무슨 헤더같은게 필요할까! 단지 콘텐츠만 있으면 된다. 그걸 분석하려는 거니까!
import urllib.request, urllib.parse, urllib.error
fhand = urllib.request.urlopen('http://data.pr4e.org/romeo.txt')
for line in fhand:
print(line.decode().strip())
그런 점에서 URL library는 최고의 패키지이다. 이렇게 urllib을 불러온 후, 파일을 읽기만 하면 된다. 다른 헤더는 모두 스킵하고, 파일의 컨텐츠만 불러오기 때문에 우리 컴퓨터 안에 있는 파일을 다루듯이 파일을 다룰 수 있다.
주의사항: decode할 것
소켓에서 우리에게 전달하는 파일은 사실 UTF-8이거나 ASCII등 다양한 종류의 캐릭터들이다. 하지만 우리가 우리 컴퓨터에서 이러한 글을 읽기 위해서는 Unicode 형태로 변환해야 한다. 때문에 위의 명령어에서도 볼 수 있듯이 .decode()를 사용해서 우리 컴퓨터에서 읽기 편한 형태로 바꿔줘야 한다.
BeautifulSoup
https://pypi.python.org/pypi/beautifulsoup4 또는 http://www.py4e.com/code3/bs4.zip 에서 파일을 다운로드 받는다.
.py파일과 같은 directory에 이 zip파일을 해제하면,
import urllib.request, urllib.parse, urllib.error
from bs4 import BeautifulSoup
위의 명령어를 실행하여 Beautifulsoup를 불러올 수 있다.
url = input('Enter the Url dear!')
html = urllib.request.urlopen(url).read()
soup = BeautifulSoup(html, 'html.parser')
# Retrieve all of the anchor tags
tags = soup('a')
for tag in tags:
print(tag.get(href), None)
cmd를 실행하고 Url을 입력한다. url은 urllib 라이브러리를 통해서 해당 url의 컨텐츠(여기서는 html파일)을 불러오게 된다. 이제 이건 그냥 우리 컴퓨터에 깔려있는 파일이나 다름없다. .read()를 통해서 파일을 읽어주고 이를 BeautifulSoup로 해석해준다. 만약 anchor 태그 중에서 href="" 에 있는 url을 모두 프린트하고 싶다면 위의 방식을 사용하면 된다. 이외에도 tag를 가져올 수 있는 방법은 많은데, 아래와 같다.
...
# Retrieve all of the anchor tags
tags = soup('a')
for tag in tags:
# Look at the parts of a tag
print 'TAG:',tag
print 'URL:',tag.get('href', None)
print 'Contents:',tag.contents[0]
print 'Attrs:',tag.attrs
'언어영역 > Python' 카테고리의 다른 글
PY4E Assignment 13 (0) | 2021.02.26 |
---|---|
Data on Web with XML(and schema) [Chapter 13] (0) | 2021.02.26 |
Networked Technology [Chapter 11] (0) | 2021.02.24 |
Tuples [Chapter 10] (0) | 2021.02.24 |
Python Data Structures [Chapter 9] (0) | 2021.02.23 |