Python 에서 jquery 와 유사 한 pyquery 라 이브 러 리 용법 분석

13976 단어 Pythonpyquery
이 실례 는 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'

의사 클래스 사용:
  • :button
  • 모든 단추 입력 요소 와 단추 요소 일치 all button input elements and the button element 일치
  • :checkbox
  • 모든 체크 상자 입력 요소 일치 모든 체크 상자 입력 요소 일치
  • :checked
  • 선택 한 요소 와 일치 합 니 다.아래 표 시 는 0 부터 Matches odd elements,zero-indexed 입 니 다.
  • :child
  • 오른쪽 은 왼쪽 의 직접 하위 요소 right is an immediate child of left
  • :contains()
  • 요소 포함 주어진 텍스트 를 포함 하 는 모든 요 소 를 일치 시 킵 니 다.
  • :descendant
  • 오른쪽 은 왼쪽 의 하위 요소,손 요소 또는 더 먼 후계 요소 right is a child,grand-child or further descendant of left 입 니 다.
  • :disabled
  • 사용 하지 않 는 모든 요소 와 일치 합 니 다.Matches all elements that are disabled
  • :empty
  • 다른 요 소 를 포함 하지 않 는 모든 요소 와 일치 합 니 다.Match all elements that do not include other elements
  • :enabled
  • 사용 가능 한 모든 요소 와 일치 합 니 다.Matches all elements that are enabled
  • :eq()
  • 아래 표 시 를 사용 하여 index 로 단일 엘 리 먼 트 를 일치 시 킵 니 다.
  • :even
  • 아래 표 시 된 0 부터 모든 짝수 요소 와 일치 합 니 다.Matches even elements,zero-indexed
  • :file
  • 모든 파일 형식 과 일치 하 는 입력 요소 Matches all input elements of type file
  • :first
  • 첫 번 째 선 택 된 요소 와 일치 합 니 다.Matches the first selected element
  • :gt()
  • 지정 한 값 보다 아래 표 시 된 요소 와 일치 합 니 다.Matches all elements with an index over the given one
  • :header
  • 모든 제목 요소 일치 모든 헤더 요소 일치(h1,...,h6)
  • :image
  • 모든 이미지 입력 요소 일치 모든 이미지 입력 요소 일치
  • :input
  • 모든 입력 요소 일치 모든 입력 요소 일치
  • :last
  • 마지막 선택 한 요소 와 일치 합 니 다.Matches the last selected element
  • :lt()
  • 지정 한 값 보다 아래 표 시 된 모든 요소 와 일치 합 니 다.Matches all elements with an index below the given one
  • :odd
  • 일치 하 는 요소,아래 표 시 는 0 부터 일치 하 는 odd elements,zero-indexed
  • :parent
  • 다른 요 소 를 포함 하 는 모든 요소 와 일치 합 니 다.Match all elements that include other elements
  • :password
  • 모든 암호 입력 요소 일치 모든 암호 입력 요소 일치
  • :radio
  • 일치 하 는 단일 단추 입력 요소 모든 라디오 입력 요소 일치
  • :reset
  • 모든 리 셋 입력 요소 일치 모든 리 셋 입력 요소 일치
  • :selected
  • 선 택 된 모든 요소 와 일치 합 니 다.Matches all elements that are selected
  • :submit
  • 모든 제출 입력 요소 일치 모든 submit 입력 요소 일치
  • :text¶
  • 모든 텍스트 입력 요소 일치 모든 텍스트 입력 요소 일치
    조작 하 다.
    탭 의 꼬리 부분 에 요 소 를 추가 할 수 있 습 니 다.
    
    >>> 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.html
    pyquery.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 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

    좋은 웹페이지 즐겨찾기