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 |