Python 에서 jquery 와 유사 한 pyquery 라 이브 러 리 용법 분석
pyquery:jquery 와 유사 한 Python 라 이브 러 리
pyquery 는 xml 문서 에서 jquery 조 회 를 할 수 있 습 니 다.API 는 가능 한 한 jquery 와 유사 합 니 다.pyquery 는 lxml 를 사용 하여 빠 른 xml 와 html 작업 을 수행 합 니 다.
이것 은 자바 script 코드 를 만 들 거나 자바 script 코드 와 상호작용 을 하 는 라 이브 러 리 가 아 닙 니 다.pyquery 의 작 가 는 jquery 의 API 를 매우 좋아 하기 때문에 python 으로 이 루어 집 니 다.
이 프로젝트 는 현재 Github 창고 에 위탁 관리 되 고 있 으 며 개발 이 활발 한 상태 다.저 자 는 원본 코드 에 기여 하고 자 하 는 모든 개발 자 에 게 push 권한 을 부여 하고 변경 사항 을 되 돌아 볼 수 있 습 니 다.원본 코드 를 공헌 하고 싶다 면 프로젝트 작성 자 에 게 이메일 을 보 낼 수 있 습 니 다.
프로젝트 의 버그 는 Github Issue Tracker 를 통 해 제출 할 수 있다.
쾌속 입문
PyQuery 클래스 를 사용 하여 문자열,lxml 문서,파일 또는 url 시계 에서 xml 문 서 를 불 러 올 수 있 습 니 다.
>>> from pyquery import PyQuery as pq
>>> from lxml import etree
>>> import urllib
>>> d = pq("<html></html>")
>>> d = pq(etree.fromstring("<html></html>"))
>>> d = pq(url=your_url)
>>> d = pq(url=your_url,
... opener=lambda url, **kw: urlopen(url).read())
>>> d = pq(filename=path_to_html_file)
현재,d 는 jquery 의$에 해당 합 니 다:
>>> d("#hello")
[<p#hello.hello>]
>>> p = d("#hello")
>>> print(p.html())
Hello world !
>>> p.html("you know <a href='http://python.org/'>Python</a> rocks")
[<p#hello.hello>]
>>> print(p.html())
you know <a href="http://python.org/" rel="external nofollow" >Python</a> rocks
>>> print(p.text())
you know Python rocks
css 표준 이 아 닌 일부 jQuery 에서 사용 할 수 있 습 니 다.예 를 들 어 first:last:even:odd:eq:lt:checked:selected:file:등
>>> d('p:first')
[<p#hello.hello>]
참조http://pyquery.rtfd.org/모든 문서 보기CSS
CSS 를 이렇게 추가,전환,제거 할 수 있 습 니 다:
>>> p.addClass("toto")
[<p#hello.hello.toto>]
>>> p.toggleClass("titi toto")
[<p#hello.hello.titi>]
>>> p.removeClass("titi")
[<p#hello.hello>]
또는 CSS 스타일 조작:
>>> p.css("font-size", "15px")
[<p#hello.hello>]
>>> p.attr("style")
'font-size: 15px'
>>> p.css({"font-size": "17px"})
[<p#hello.hello>]
>>> p.attr("style")
'font-size: 17px'
더 Pythonic 방식 으로 같은 기능 을 완성 합 니 다(''문자 변환'-'):
>>> p.css.font_size = "16px"
>>> p.attr.style
'font-size: 16px'
>>> p.css['font-size'] = "15px"
>>> p.attr.style
'font-size: 15px'
>>> p.css(font_size="16px")
[<p#hello.hello>]
>>> p.attr.style
'font-size: 16px'
>>> p.css = {"font-size": "17px"}
>>> p.attr.style
'font-size: 17px'
의사 클래스 사용:조작 하 다.
탭 의 꼬리 부분 에 요 소 를 추가 할 수 있 습 니 다.
>>> d = pq('<p class="hello" id="hello">you know Python rocks</p>')
>>> d('p').append(' check out <a href="http://reddit.com/r/python" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ><span>reddit</span></a>')
[<p#hello.hello>]
>>> print(d)
<p class="hello" id="hello">you know Python rocks check out <a href="http://reddit.com/r/python" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ><span>reddit</span></a></p>
또는 시작 까지 추가:
>>> p = d('p')
>>> p.prepend('check out <a href="http://reddit.com/r/python" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >reddit</a>')
[<p#hello.hello>]
>>> print(p.html())
check out <a href="http://reddit.com/r/python" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >reddit</a>you know ...
다른 원소 이전 또는 이후 에 원 소 를 추가 합 니 다:
>>> d = pq('<html><body><div id="test"><a href="http://python.org" rel="external nofollow" rel="external nofollow" >python</a> !</div></body></html>')
>>> p.prependTo(d('#test'))
[<p#hello.hello>]
>>> print(d('#test').html())
<p class="hello" ...
다른 요소 뒤에 요 소 를 삽입 합 니 다:
>>> p.insertAfter(d('#test'))
[<p#hello.hello>]
>>> print(d('#test').html())
<a href="http://python.org" rel="external nofollow" rel="external nofollow" >python</a> !
또는 다른 요 소 를 삽입 하기 전에:
>>> p.insertBefore(d('#test'))
[<p#hello.hello>]
>>> print(d('body').html())
<p class="hello" id="hello">...
모든 요소 에 대해 뭔 가 를 합 니 다:
>>> p.each(lambda i, e: pq(e).addClass('hello2'))
[<p#hello.hello.hello2>]
원소 제거:
>>> d = pq('<html><body><p id="id">Yeah!</p><p>python rocks !</p></div></html>')
>>> d.remove('p#id')
[<html>]
>>> d('p#id')
[]
선택 한 요소 의 내용 제거:
>>> d('p').empty()
[<p>]
수 정 된 html 내용 을 얻 을 수 있 습 니 다:
>>> print(d)
<html><body><p/></body></html>
html 세 션 을 생 성 할 수 있 습 니 다:
>>> from pyquery import PyQuery as pq
>>> print(pq('<div>Yeah !</div>').addClass('myclass') + pq('<b>cool</b>'))
<div class="myclass">Yeah !</div><b>cool</b>
모든 네 임 스페이스 제거:
>>> d = pq('<foo xmlns="http://example.com/foo"></foo>')
>>> d
[<{http://example.com/foo}foo>]
>>> d.remove_namespaces()
[<foo>]
두루일부 jQuery 옮 겨 다 니 는 방법 도 지원 할 수 있 습 니 다.여기에 몇 가지 예 가 있다.
선택 목록 을 문자열 선택 기 를 사용 하여 걸 러 낼 수 있 습 니 다:
>>> d = pq('<p id="hello" class="hello"><a/></p><p id="test"><a/></p>')
>>> d('p').filter('.hello')
[<p#hello.hello>]
eq 선택 기 를 사용 하여 단일 요 소 를 선택 할 수 있 습 니 다:
>>> d('p').eq(0)
[<p#hello.hello>]
당신 은 내장 요 소 를 찾 을 수 있 습 니 다:
>>> d('p').find('a')
[<a>, <a>]
>>> d('p').eq(1).find('a')
[<a>]
end 를 사용 하여 한 단계 에서 뛰 어 내 리 는 것 도 지원 합 니 다:
>>> d('p').find('a').end()
[<p#hello.hello>, <p#test>]
>>> d('p').eq(0).end()
[<p#hello.hello>, <p#test>]
>>> d('p').filter(lambda i: i == 1).end()
[<p#hello.hello>, <p#test>]
네트워크 스 크 래 핑pyquery 도 하나의 url 에서 html 문 서 를 불 러 올 수 있 습 니 다:
>>> pq(your_url)
[<html>]
결 성 된 것 은 python 의 urllib 입 니 다.requests 가 설치 되 어 있 으 면 requests 를 사용 합 니 다.대부분의 requests 인 자 를 사용 할 수 있 습 니 다.
>>> pq(your_url, headers={'user-agent': 'pyquery'})
[<html>]
>>> pq(your_url, {'q': 'foo'}, method='post', verify=True)
[<html>]
pyquery C PyQuery 전체 API 참조:http://pyquery.readthedocs.org/en/latest/api.htmlpyquery.ajax C PyQuery AJAX 확장
웹 Ob(pyquery 의존 항목 이 아 닙 니 다)가 설치 되 어 있다 면,wsgi app 을 조회 할 수 있 습 니 다.이 예 에서 테스트 app 은/에서 간단 한 입력 을 되 돌려 주 고/submit 에서 제출 단 추 를 되 돌려 줍 니 다:IN this example the test app returns a simple input at/and a submit button at/submit:
>>> d = pq('<form></form>', app=input_app)
>>> d.append(d.get('/'))
[<form>]
>>> print(d)
<form><input name="youyou" type="text" value=""/></form>
app 새 노드 에서 도 사용 가능:The app is also available in new nodes:
>>> d.get('/').app is d.app is d('form').app
True
다른 경 로 를 요청 할 수도 있 습 니 다.
>>> d.append(d.get('/submit'))
[<form>]
>>> print(d)
<form><input name="youyou" type="text" value=""/><input type="submit" value="OK"/></form>
restkit 가 설치 되 어 있 으 면 HostProxy app 에서 url 을 직접 가 져 올 수 있 습 니 다.
>>> a = d.get(your_url)
>>> a
[<html>]
app 의 응답 을 가 져 올 수 있 습 니 다:
>>> print(a.response.status)
200 OK
팁 팁링크 를 절대 체인 으로 바 꿀 수 있 습 니 다.화면 캡 처 시 유용 합 니 다.You can make links absolute which can be usefull for screen scrapping:
>>> d = pq(url=your_url, parser='html')
>>> d('form').attr('action')
'/form-submit'
>>> d.make_links_absolute()
[<html>]
다른 해석 기 사용 하기결 성 된 경우 pyquery 는 lxml xml 해상도 기 를 사용 하고 작 동 하지 않 으 면 lxml.html 의 html 해상도 기 를 계속 시도 합 니 다.xml 해상도 기 는 xhtml 페이지 를 분석 할 때 문제 가 발생 할 수 있 습 니 다.해상도 기 는 오류 가 발생 하지 않 고 사용 할 수 없 는 트 리 를 제공 하기 때 문 입 니 다.The xml parser can sometimes be problematic when parsing xhtml pages because the parser will not raise an error but give an unusable tree (on w3c.org for example).
어떤 해석 기 를 사용 하 는 지 명시 적 으로 설명 할 수 있 습 니 다.
>>> pq('<html><body><p>toto</p></body></html>', parser='xml')
[<html>]
>>> pq('<html><body><p>toto</p></body></html>', parser='html')
[<html>]
>>> pq('<html><body><p>toto</p></body></html>', parser='html_fragments')
[<p>]
html 와 htmlfragments 해상도 기 는 모두 lxml.html 에 있 습 니 다.더 많은 파 이 썬 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 논문 에서 말 한 것 이 여러분 의 Python 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.