Python jquery 문법으로 HTML 파싱하는 PyQuery 라이브러리 알아보기
오늘은 Python으로 jquery 문법으로 HTML 파싱하는 라이브러리인 PyQuery를 적용해보려 합니다.
PyQuery 설치
우선 virtualenv로 파이썬 환경을 분리해줍니다.
pip3 install virtualenv
virtualenv -mvenv env
env라는 이름의 가상 환경을 생성합니다.
source env/bin/activate
가상환경을 폴더에서 활성화합니다.
pip3 install --upgrade pip
pip의 업그레이드가 존재하는지 확인하고 진행합니다.
pip install pyquery
pip로 PyQuery를 설치합니다.
속성
from pyquery import PyQuery
d = PyQuery("<option value='1'><option value='2'>")
print(d('option[value="1"]'))
PyQuery를 가져와서 특정 속성을 가져올 수 있습니다.
p = PyQuery('<p id="hello" class="hello"></p>')
p.attr.id = "hello_world"
print(p)
p.attr["id"] = "hello_world"
print(p)
p.attr(id='hello', class_='hello2')
print(p)
PyQuery를 가져와서 특정 속성 필드에 값을 대입할 수 있습니다.
css
from pyquery import PyQuery
p = PyQuery('<p id="hello" class="hello"></p>')('p')
print(p.addClass("hello_world"))
print(p.toggleClass("python hello_world"))
print(p.removeClass("python"))
PyQuery를 가져와서 클래스를 추가하거나 변경, 또는 삭제할 수 있습니다.
p = PyQuery('<p id="hello" class="hello"></p>')
p.css.font_size = "1px"
print(p.attr.style)
p.css['font-size'] = "2px"
print(p.attr.style)
p.css(font_size="3px")
print(p.attr.style)
p.css = {"font-size": "4px"}
print(p.attr.style)
PyQuery를 가져와서 css 속성 필드에 값을 대입할 수 있습니다.
의사 클래스 선택자
from pyquery import PyQuery
d = PyQuery('<div><input type="button"/><button></button></div>')
print(d(':button'))
d = PyQuery('<div><input type="file"/><textarea></textarea></div>')
print(d(':input'))
d = PyQuery('<div><h1/><h1 class="title">title</h1></div>')
print(d('h1:contains("title")'))
d = PyQuery('<div><h1><span>title</span></h1><h1/></div>')
print(d('h1:parent'))
d = PyQuery('<div><p class="first"></p><p></p></div>')
print(d('p:first'))
print(d('p:last'))
d = PyQuery('<div><h1><span>title</span></h1><h2/></div>')
print(d(':empty'))
d = PyQuery('<div><h1>title</h1></div>')
print(d(':header'))
d = PyQuery('<div class="foo"><div class="bar"></div></div>')
print(d('.foo:has(div)'))
특정 부분과 상황만 선택할 수도 있습니다.
조작
d = PyQuery('<p class="hello" id="hello">hello, world!</p>')
d('p').append(' check out <a href="https://www.google.com">google</a>')
print(d)
특정 태그의 내부에 추가할 수 있습니다.
p = d('p')
d = PyQuery('<html><body><div id="test"><a href="https://github.com">github</a></div></body></html>')
p.prependTo(d('#test'))
print(d)
p.insertAfter(d('#test'))
print(d)
p.insertBefore(d('#test'))
print(d)
특정 html 텍스트를 기존의 html 앞 혹은 뒤에 넣을 수 있습니다.
print(PyQuery('<div>hello,world!</div>').addClass('test') + PyQuery('<b>b</b>'))
연산자로 이어서 붙일 수 있습니다.
d = PyQuery('<p id="hello" class="hello"><a/></p><p id="test"><a/></p>')
print(d('p').filter('.hello'))
print(d('p').find('a'))
print(d('p').eq(1).find('a'))
print(d('p').find('a').end())
특정 태그에 필터나 검색을 할 수 있습니다.
Written on May 26, 2019