1. 상대 경로를 전개하는 방법

 

상대 경로를 전개할 때는 urllib.parse.urljoin()을 사용

 

from urllib.parse import urljoin

 

base = "http://example.com/html/a.html"

 

print(urljoin(base, "b.html"))

print(urljoin(base, "/hihi/c.html"))

print(urljoin(base, "./hehe/d.html"))

print(urljoin(base, "../haha/e.html"))

 

이렇게 4가지 경우를 만들어 프로그램을 돌릴 경우 결과는,

상대 경로

1. urljoin(base, "b.html")의 경우 html/b.html로 마지막의 부분(a.html -> b.html)이 변경.

 

2. urljoin(base, "/hihi/c.html")의 경우 html/a.html이 모두 사라지고 com뒤에 /hihi/c.html가 되어 경로 변경.

 

3. urljoin(base, "./hehe/d.html")의 경우  첫 번째와 마찬가지로 마지막 부분(a.html -> hehe/d.html)이 변경.

 

4. urljoin(base, "../haha/e.html")의 경우 두 번째와 마찬가지로 com뒤에 haha/e.html가 되어 경로가 변경.

 

2. 절대 경로를 설정하는 방법

from urllib.parse import urljoin

 

base = "http://example.com/html/a.html"

 

print(urljoin(base, "hoge.html"))

print(urljoin(base, "http://otherExample.com/wiki"))

print(urljoin(base, "//anotherExample.org/test"))

 

이렇게 3가지 경우를 만들어 프로그램을 돌릴 경우 결과는,

절대 경로

1. urljoin(base, "hoge.html")의 경우 hoge.html로 마지막의 부분(a.html -> hoge.htmll)이 변경. (상대 경로 설정)

 

2. urljoin(base, "/hihi/c.html")의 경우 http://example.com/html/a.html이 전부 사라지고 http://otherExample.com/wiki경로가 설정 

 

3. urljoin(base, "//anotherExample.org/test")의 경우 역시 http://example.com/html/a.html이 전부 사라지고 //anotherExample.org/test로 설정이 됩니다.

 

즉, 절대 경로는 //로 시작하거나 http://로 시작하는 경우 절대 경로로 설정된다는 것을 알 수 있습니다.

 

3. 예제 학습하기

앞에서 배운 내용을 토대로 python공식 홈페이지에서 파이썬 메뉴얼이 있는 홈페이지 경로를 다운 받아보겠습니다.

 

일단 홈페이지에 가서 확인을 먼저 하면, 

다음과 같이 되어있고,

 

import urllib.request as req

 

url = "https://docs.python.org/3.8/library/"

res = req.urlopen(url)

soup = BeautifulSoup(res, "html.parser")

links = soup.select("link[rel='stylesheet']")  # CSS선택자를 이용하여 links 설정

links += soup.select("a[href]")  # links에 a[href]에 있는 상대 경로들을 추가하여 links 설정

result = []  # result란 리스트를 만들어준다

 

# for문을 사용하여 경로를 설정해주고 이를 result에 저장

for a in links:

    href = a.aattrs['href']

    url = urljoin(base, href)

    result.append(url)

print(result)

 

다음과 같이 프로그램을 짜서 실행을 시킬 경우, result안에 홈페이지 경로들이 저장될 것입니다.

'AI > 데이터 수집' 카테고리의 다른 글

Selenium을 활용한 로그인  (0) 2021.02.02
requests 모듈의 메서드  (0) 2021.01.31
requests를 사용하여 로그인  (0) 2021.01.31
CSS 선택자  (0) 2021.01.25
파이썬을 활용하여 데이터 받아오기(urllib을 활용)  (0) 2021.01.24

+ Recent posts