2012-01-21 2 views
2

URL 재 매핑을 통해 실제 HTML 문서 내부의 모든 "href"와 "src"및 "action"을 변경하는 것을 의미합니다.HTML 내부, 파이썬의 URL 재 매핑 라이브러리

이러한 유형의 URL 재 매핑을 수행 할 파이썬 라이브러리가 있습니까?

(토네이도 기반의) python 웹 서버 앱에서 일부 조건에 따라 서버에있는 HTML 코드를 수정할 수 있기를 원합니다.

디스크에서이 HTML을 읽는다고 상상해보십시오.하지만이 모든 하위 도메인/도메인 및 경로를 가리 키도록 모든 링크를 교체해야합니다.

내가 디스크에있는 모든 HTML을 (내부에 태그를 넣고 런타임에 태그를 바꾸기 위해) 다시 쓰는 데 템플릿을 사용하고 싶지 않다고해도 간단하게하기 위해 외부 링크가 없다고 상상해보십시오. google.com [조건부 재 매핑이 필요])으로 연결되지 않습니다.

답변

4

는 지금까지 내가 아는 한, 그런 라이브러리가없는,하지만 당신은 urlparse 표준 파이썬 MOULE와 함께 lxml 또는 BeautifulSoup 같은 일부 HTML 구문 분석 라이브러리를 사용할 수 있습니다. 나는 lxmlXPath을 선호합니다. , 난 단지 '상대 href 변환하고있어이 예에서

import urlparse 

import lxml.html 


with open('doc.htm') as f: 
    doc = lxml.html.parse(f) 

for el in doc.xpath('//*[@href | @src | @action]'): 
    tag = el.tag 
    href = el.get('href', '') 
    if not href: 
     continue 

    # not really need to check for '/' when using urljoin, but this is just example 
    if href.startswith('/'): 
     el.attrib['href'] = urlparse.urljoin('http://stackoverflow.com/', href) 

# then get string representation of tree back 
result = lxml.html.tostring(doc) 

:

예를 들어, 우리는 doc.html로 StackOverflow의 페이지를 저장 한, 우리는 href, src, actions을 포함 노드와 뭔가를하고 싶어 는 '/'로 시작하고 절대 값은 urlparse.urljoin이며 XPath 결과의 모든 요소가 사용되는 것은 아닙니다. 그러나 사용자의 필요에 맞게 사용자 정의 할 수 있습니다.