Python3 크롤러 전투 -30, PyQuery

우리가 BeautifulSoup로의 사용을 도입 이전 섹션에서, 당신은 어려움을 겪고 사용할 수있는 몇 가지 방법을 느낀다 수없는, 매우 강력한 웹 분석 라이브러리입니다? 당신은 너무 강력 그것의 CSS 셀렉터 기능은 생각하지 마십시오?

당신이 CSS 선택기를 사용하는 것을 선호하는 경우는, 웹의 일부에 참여하는 경우가 jQuery를 이해한다면, 다음에 더 적합 파싱 라이브러리가있다 - PyQuery.

다음으로 우리는 PyQuery의 힘을 느낄 수 온다.

1. 준비

당신이 있는지 확인 시작하기 전에 제대로 PyQuery가, 설치 절차를 설치하지 않을 경우 첫 번째 챕터이다 설치했습니다.

2. 초기화

BeautifulSoup로 같은, PyQuery 초기화처럼, 그들은 또한 운영 목표를 초기화하는 HTML 데이터 소스를 통과해야, 같은 직접 들어오는 문자열을 입력 URL로 초기화 방법, 다양한있다, 파일 이름을 전달합니다. 우리는 자세히 설명 아래.

초기화 문자열

첫째, 우리는 느낌이 예제를 사용 :

html = '''
<div>
    <ul>
         <li class="item-0">first item</li>
         <li class="item-1"><a href="link2.html">second item</a></li>
         <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
         <li class="item-1 active"><a href="link4.html">fourth item</a></li>
         <li class="item-0"><a href="link5.html">fifth item</a></li>
     </ul>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
print(doc('li'))
Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎

결과 :

<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>

여기에서 우리는 먼저이 객체는, 별명이 PQ으로, 다음, PyQuery에 매개 변수로 긴 HTML 문자열을 선언 PyQuery을 도입되도록 초기화를 성공적으로 완료 한 후 다음 목표는 초기화됩니다 통과 CSS 선택기 이 예에서 우리는 모든 리 노드를 선택 할 수 있도록, 모든 리 노드의 HTML 텍스트 출력을 볼 수 있습니다, 리 노드를 전달합니다.

URL 초기화

단지 초기화 파라미터가 문자열로 전달 될 수있는 것은 아닙니다, 당신은 또한 페이지의 URL을 전달할 수 있습니다, 여기에만 URL에 매개 변수를 지정해야합니다 :

from pyquery import PyQuery as pq
doc = pq(url='http://www.segmentfault.com')
print(doc('title'))

결과 :

<title>SegmentFault 思否</title>

이 경우 PyQuery이 URL을 요청하고 문자열을 초기화 사실, 우리는 해당 페이지의 소스 코드를 PyQuery에 전달되는 사용을 얻기 위해 콘텐츠를 HTML로 초기화를 완료 첫번째됩니다.

그것은 다음과 같은 기능과 동일합니다 :

from pyquery import PyQuery as pq
import requests
doc = pq(requests.get('http://www.segmentfault.com').text)
print(doc('title'))

초기화 파일

물론, URL을 전달 이외에, 당신은 또한 로컬 파일 이름을 전달할 수, 파일 이름 매개 변수로 지정할 수 있습니다 :

from pyquery import PyQuery as pq
doc = pq(filename='demo.html')
print(doc('li'))

물론, 여기에 로컬 HTML 파일 demo.html의 필요성, HTML 문자열을 구문 분석 할 콘텐츠입니다. 먼저 로컬 파일의 내용을 읽을 수 있도록, 다음 PyQuery에 파일의 내용을 문자열을 초기화합니다.

이 세 가지 초기화 방법은 물론, 문자열을 초기화하는 가장 일반적인 방법은 통과 할 수 있습니다.

3. 기본 CSS 셀렉터

첫째, 우리는 CSS 셀렉터 사용 PyQuery의 느낌을 예를 사용합니다 :

html = '''
<div id="container">
    <ul class="list">
         <li class="item-0">first item</li>
         <li class="item-1"><a href="link2.html">second item</a></li>
         <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
         <li class="item-1 active"><a href="link4.html">fourth item</a></li>
         <li class="item-0"><a href="link5.html">fifth item</a></li>
     </ul>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
print(doc('#container .list li'))
print(type(doc('#container .list li')))

결과 :

<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
<class 'pyquery.pyquery.PyQuery'>

여기에 우리가, 오브젝트 후 PyQuery를 초기화 CSS의 셀렉터를 통과, 노드의 모든 리 아이디 노드를 선택하는 것을 의미 # 컨테이너 .list 리는 노드 목록의 컨테이너 클래스 안에 있습니다. 그런 다음 인쇄, 당신은 자격을 갖춘 노드의 성공을 볼 수 있습니다.

우리는 다음의 유형의 출력, 당신은 여전히 ​​유형 PyQuery 유형을 볼 수 있습니다.

4. 찾기 노드

여기에서 우리는 jQuery를 사용하고 기능도 동일하다 몇 가지 일반적인 쿼리 기능을 소개합니다.

자식 노드

노드 찾기 () 메소드를 사용할 필요가 아이를 찾아 전달하는 매개 변수는 CSS 셀렉터는 우리가 HTML의 예보다 여전히했다입니다 :

from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
print(type(items))
print(items)
lis = items.find('li')
print(type(lis))
print(lis)

결과 :

<class 'pyquery.pyquery.PyQuery'>
<ul class="list">
    <li class="item-0">first item</li>
    <li class="item-1"><a href="link2.html">second item</a></li>
    <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
    <li class="item-1 active"><a href="link4.html">fourth item</a></li>
    <li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
<class 'pyquery.pyquery.PyQuery'>
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>

먼저 우리는 우리가 CSS 선택기를 통과, 찾기 () 메서드를 호출, 노드 목록의 클래스를 선택, 내부 리 노드를 선택, 결국 출력 쿼리 결과를 해당 관찰 할 수있다, 찾을 수 있습니다 발견 ( ) 방법은 선택한 모든 노드가 조건을 충족 반환 결과의 유형은 PyQuery 유형입니다.

() 메소드를 실제로 발견 () 노드의 모든 자손에서 봐, 우리가 자식 노드를 찾으려면, 당신은 아이들을 사용할 수 있습니다 :

lis = items.children()
print(type(lis))
print(lis)

결과 :

<class 'pyquery.pyquery.PyQuery'>
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>

모든 자식 노드에게 자격을 갖춘 노드를 필터링하려면, 예를 들어, 우리는 () 아이들에게 CSS 셀렉터 .active는 전달 방법 할 수있다 활성 노드는 자식 노드 클래스를 필터링 할 수 있습니다합니다 :

lis = items.children('.active')
print(lis)

결과 :

<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>

당신은 활성 노드의 클래스를 떠나, 심사의 출력이 완료되었습니다 볼 수 있습니다.

부모의

우리는 노드의 부모 노드를 얻기 위해 부모 () 메소드를 사용하여, 우리는 느낌이 예제를 사용 :

html = '''
<div class="wrap">
    <div id="container">
        <ul class="list">
             <li class="item-0">first item</li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1 active"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
     </div>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
container = items.parent()
print(type(container))
print(container)

결과 :

<class 'pyquery.pyquery.PyQuery'>
<div id="container">
    <ul class="list">
         <li class="item-0">first item</li>
         <li class="item-1"><a href="link2.html">second item</a></li>
         <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
         <li class="item-1 active"><a href="link4.html">fourth item</a></li>
         <li class="item-0"><a href="link5.html">fifth item</a></li>
     </ul>
 </div>

여기에 우리가 처음 노드 목록의 클래스를 선택하고 부모 노드를 얻기 위해 부모 () 메서드를 호출 .list 사용 유형은 여전히 ​​PyQuery 유형입니다.

다음은 노드의 부모 노드의 직접적인 부모가, 즉, 부모의 부모, 그 조상 노드를 찾아 가지 않을 것이다.

우리는 조상 노드를 얻으려면하지만 어떻게 그것을 할까? 부모는 () 방법을 사용할 수 있습니다 :

from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
parents = items.parents()
print(type(parents))
print(parents)

결과 :

<class 'pyquery.pyquery.PyQuery'>
<div class="wrap">
    <div id="container">
        <ul class="list">
             <li class="item-0">first item</li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1 active"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
     </div>
 </div>
 <div id="container">
        <ul class="list">
             <li class="item-0">first item</li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1 active"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
     </div>

여기에 우리가 () 메소드 부모를 호출하면 노드가 컨테이너의 ID입니다, 하나의 노드를 포장 할 수있는 클래스, 두가 출력을 볼 수 있습니다, 그 부모 () 메소드는 모든 조상 노드를 반환 말을하는 것입니다.

노드의 상위 노드를 돌려줍니다 우리가 조상 노드를 필터링하려면, 당신은 부모 CSS 선택기를 전달할 수 있습니다 () 메소드는, 유효한 CSS 선택기입니다 :

parent = items.parents('.wrap')
print(parent)

결과 :

<div class="wrap">
    <div id="container">
        <ul class="list">
             <li class="item-0">first item</li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1 active"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
     </div>
 </div>
Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎

우리는 노드를 포장 만 클래스를 떠나, 노드의 출력 적은을 볼 수 있습니다.

형제

우리는 자녀와 부모 노드의 사용을 설명 위에서, 당신은 형제 자매 () 메서드를 사용하여 형제를 얻으려면, 인 형제 노드가있다. 우리는 느낄 예를 들어 HTML 코드 위에 계속했다 :

from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.list .item-0.active')
print(li.siblings())

여기서는 먼저 노드 활성 아이템 0, 세번째 리 노드 인 클래스 내부리스트 노드 클래스를 선택. 그리고 분명히 먼저 즉 네 형제,,, 2, 4, 오 개 리 노드가 있습니다.

결과 :

<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0">first item</li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>

우리는 우리가 단지 4 형제 말한 결과를 볼 수 있습니다.

당신이 형제 노드를 필터링하려면, 우리는 여전히 자격을 갖춘 노드의 모든 형제 자매에서 골라 것 CSS 선택 방법을 전달할 수 있습니다 :

from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.list .item-0.active')
print(li.siblings('.active'))

여기에 우리가 활성 노드의 클래스를 선별, 우리는 클래스가 네 번째 리튬 이전의 결과에 의해 활성화 된 유일한 형제 노드입니다 관찰 할 수있다, 그래서 결과는이어야한다.

결과 :

<li class="item-1 active"><a href="link4.html">fourth item</a></li>

5. 탐색

우리는, 선택은 결과 PyQuery 여러 노드가 될 수 있음을 관찰 할 수있는 하나의 노드 유형이 PyQuery의 유형이 될 수 있으며, BeautifulSoup로 같은 목록을 반환하지 않았다.

단일 노드를 들어, 우리가 직접 인쇄 할 수 있습니다, 문자열로 직접 전송할 수 있습니다 :

from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
print(str(li))

결과 :

<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>

여러 노드의 결과를 위해, 우리는 우리가 ,, 모든 노드 리튬을 통과해야한다 () 메소드 항목을 호출 할 필요가 예를 들어, 일어나 통과해야합니다

from pyquery import PyQuery as pq
doc = pq(html)
lis = doc('li').items()
print(type(lis))
for li in lis:
    print(li, type(li))

결과 :

<class 'generator'>
<li class="item-0">first item</li>
<class 'pyquery.pyquery.PyQuery'>
<li class="item-1"><a href="link2.html">second item</a></li>
<class 'pyquery.pyquery.PyQuery'>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<class 'pyquery.pyquery.PyQuery'>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<class 'pyquery.pyquery.PyQuery'>
<li class="item-0"><a href="link5.html">fifth item</a></li>
<class 'pyquery.pyquery.PyQuery'>

우리가 항목을 찾을 수있는 () 메서드 호출 후, 횡단, 발전기를 얻을 것이다, 당신은 리튬에 의해 노드 객체를 얻을 수 있고, 그것의 타입은 PyQuery 유형, 그래서 각 노드는 리튬 앞서 언급 한 방법을 호출 할 수 있습니다 자식 노드 등, 연구, 조상 노드를 찾기 위해 같은 선택, 그것은 매우 유연합니다.

6. 정보 가져 오기

노드의 압축을 푼 후에, 우리의 궁극적 인 목표는 물론 추출 된 노드에 포함 된 정보이며, 더 중요한 정보는 두 가지 종류가 있습니다, 하나는 재산을 취득하는 것이고, 둘째, 텍스트를 얻기 위해, 우리는 개별적으로 아래에 설명되어 있습니다.

취득 재산

노드의 PyQuery 유형으로 추출 후, 우리는 ATTR () 속성을 얻을 수있는 방법을 호출 할 수 있습니다 :

html = '''
<div class="wrap">
    <div id="container">
        <ul class="list">
             <li class="item-0">first item</li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1 active"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
     </div>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
a = doc('.item-0.active a')
print(a, type(a))
print(a.attr('href'))

결과 :

<a href="link3.html"><span class="bold">third item</span></a> <class 'pyquery.pyquery.PyQuery'>
link3.html

여기서는 먼저 노드 리 클래스 항목-0의 노드를 선택하고 활성화되어, 그 종류 PyQuery 종류를 알 수있다.

그리고 우리가 ATTR () 메서드를 호출하고 그것을 속성의 이름을 통과,이 속성의 값을 얻을 수 있습니다.

다음과 같이도 사용되는 속성 ATTR 속성을 호출하여 얻을 수 있습니다 :

print(a.attr.href)

결과 :

link3.html

결과는 정확히 동일합니다, 우리가하는 방법을 호출하지 마십시오, 그것은 ATTR 속성을 호출 한 다음 속성 이름을 호출, 속성 값을 얻을 수있다.

우리는 복수의 요소를 선택하면, 다음 ATTR () 메소드는 결과가 표시 어떤 것 전화를? 우리는 시험에 예제를 사용 :

a = doc('a')
print(a, type(a))
print(a.attr('href'))
print(a.attr.href)

결과 :

<a href="link2.html">second item</a><a href="link3.html"><span class="bold">third item</span></a><a href="link4.html">fourth item</a><a href="link5.html">fifth item</a> <class 'pyquery.pyquery.PyQuery'>
link2.html
link2.html

논리적으로 말하면 우리는 노드 사 선택되어야하지만, 인쇄 결과는 네하지만 우리 ATTR () 메소드를 호출 할 때, 그 결과는 리턴 있지만 첫번째.

반환 결과는 복수의 노드를 포함 할 경우에 따라서, 첫 번째 노드의 특성을 얻기 위해 ATTR () 메소드를 호출한다.

우리는 노드의 모든 속성을 얻으려면 그래서이 경우, 당신은 사용할 필요가 상기 횡단 :

from pyquery import PyQuery as pq
doc = pq(html)
a = doc('a')
for item in a.items():
    print(item.attr('href'))

결과 :

link2.html
link3.html
link4.html
link5.html

더 경우에 따라서 재산 중 하나 개 이상의 노드가 반환할지 여부를 보는 시간을 얻기 위해, 각 노드의 속성을 얻기 위해 통과해야합니다.

텍스트를 가져옵니다

인수 후 또 다른 주요 작업은 우리가 얻을 수있는 텍스트 () 메소드를 호출 할 수 있습니다, 내부의 텍스트 노드를 얻는 것입니다 :

html = '''
<div class="wrap">
    <div id="container">
        <ul class="list">
             <li class="item-0">first item</li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1 active"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
     </div>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
a = doc('.item-0.active a')
print(a)
print(a.text())

결과 :

<a href="link3.html"><span class="bold">third item</span></a>
third item

우리는 먼저 노드를 선택하고 텍스트 () 메소드는, 당신이 그것을 내부 노드는 모든 HTML을 포함하고 단지 일반 텍스트를 반환 무시 내부 정보의 텍스트를 얻을 수 있습니다 호출합니다.

우리가 HTML 텍스트의 내부 노드를 얻으려면, 당신은 HTML () 메소드를 사용할 수 있습니다 :

from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
print(li.html())

여기에서 우리는 그 결과가 HTML 리 노드 내의 모든 텍스트해야한다 반환하는 HTML () 메소드를 호출, 세 번째 리 노드를 선택했습니다.

결과 :

<a href="link3.html"><span class="bold">third item</span></a>

우리는, 결과는 다수의 노드 인 텍스트 () 또는 HTML을 선택하면 마찬가지로, 문제가있다 () 무엇을 반환됩니다?

우리는 예를 들어보기로를 사용 :

html = '''
<div class="wrap">
    <div id="container">
        <ul class="list">
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1 active"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
     </div>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('li')
print(li.html())
print(li.text())
print(type(li.text())

결과 :

<a href="link2.html">second item</a>
second item third item fourth item fifth item
<class 'str'>

결과는 () 메소드는 최초의 내부 노드 리 HTML 텍스트 및 텍스트 (반환) 내부 노드 리 일반 텍스트의 모든 반환 HTML에서 찾을 수 있습니다, 우리는 모든 리 노드를 확인, 더 놀라운 일이 될 수있다 중간 공간에 의해 분리 된, 실제로 문자열이다.

그래서이 곳은, 모든 우리가 결과를 얻을 경우 HTML 텍스트 안에 얻으려면 노드의 복수의 각 노드는, 각 노드를 통과해야하고, 텍스트 () 메소드는 탐색이 얻을 수있는 필요로하지 않는다는 것을 주목할 필요가있다 텍스트 문자열로 합병 노드 후 촬영.

7. 노드 동작

PyQuery 같은 노드의 클래스를 추가하는 등의 노드에서 동적 수정 작업 방법의 범위를 제공 노드를 제거하고 등등, 때때로 이러한 작업은 정보를 추출하는 큰 편의를 가져올 것이다.

너무 많은 노드가 사용을 설명하기 위해 몇 가지 전형적인 예에 ​​따라 방법을 운영하기 때문에.

addClass, removeClass

의 느낌을 예제를 사용하자 :

html = '''
<div class="wrap">
    <div id="container">
        <ul class="list">
             <li class="item-0">first item</li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1 active"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
     </div>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
li.removeClass('active')
print(li)
li.addClass('active')
print(li)

첫째, 우리는 다음의 removeClass () 메소드,이 클래스를 제거 활성 리 노드를 호출 세 번째 리 노드를 선택 후, 인쇄 클래스가 각각 하나 개의 작업을 수행하기 위해, 되돌아 추가, addClass () 메소드 호출 현재 리튬 노드의 내용을 출력.

결과 :

<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-0"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>

세 번 출력이 클래스가 제거 된 제 2 출력 노드 활성 리튬 총 실시 볼 수 있고 제 클래스 다시 첨가된다.

그래서 우리는 addClass (), removeClass ()이 메소드는 동적으로 클래스 속성 노드를 변경할 수 있습니다.

ATTR, 텍스트, HTML

물론, 클래스 속성의 작동뿐만 아니라,이 ATTR () 특정의 속성을 조작하는 방법은 콘텐츠 텍스트 (), HTML () 메소드를 사용하여 노드에서 변경 될 수 있습니다.

우리는 예를 느낄 :

html = '''
<ul class="list">
     <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
</ul>
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
li.attr('name', 'link')
print(li)
li.text('changed item')
print(li)
li.html('<span>changed item</span>')
print(li)

여기서는 먼저 리 노드 확인 후 속성을 수정 ATTR () 메소드를 호출하여, 첫 번째 인자는 상기 제 파라미터의 이름 속성 값이된다, 우리는 텍스트 ()와 HTML () 노드를 변경하는 방법을 호출 내부 컨텐츠. 세 가지 작업 후, 각각, 현재 리 노드를 인쇄 할 수 있습니다.

결과 :

<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-0 active" name="link"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-0 active" name="link">changed item</li>
<li class="item-0 active" name="link"><span>changed item</span></li>

찾을 수 있습니다, 전화 ATTR () 메소드 후, 텍스트 () 메서드를 호출, 이름, 링크의 값을 제시하지 않는 리튬 이상의 노드 속성은 입력 텍스트 후, 전체 내부 리 노드에서 찾을 텍스트를 전달하는 변경 텍스트 문자열로. HTML 호출 후 () 메소드를 수신 HTML 텍스트 리 내부 노드는 수신 된 HTML 텍스트 변경되었다.

두 번째 매개 변수에 전달한다면, 첫 번째 인수 전달 된 속성 이름, 속성 값을 얻을 경우에만 ATTR () 메소드는, 그렇게하지 않으면 속성 값, 텍스트 () 및 HTML () 메소드를 수정할 수 있습니다 이 매개 변수 할당에 전달되는 경우 노드를 얻기 위해 매개 변수를 전달하는 것은, 일반 텍스트 및 HTML 텍스트에 있습니다.

풀다

이름이 제거 된 제안 제거, 제거 () 메소드는 때때로 정보를 추출하는 큰 편의를 가져올 수 있습니다. 의 예를 살펴 보자 :

html = '''
<div class="wrap">
    Hello, World
    <p>This is a paragraph.</p>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
wrap = doc('.wrap')
print(wrap.text())

여기에 거기에 HTML 텍스트 우리가 지금 안녕하세요, 세계 문자열을 추출 할,하고, 문자열이없는 페이지 내부 노드를 수행하는 방법이를 추출?

여기에서 우리는 클래스 노드 우리는 다음과 같은 결과가 원하는 것이 아니다 볼 수있는 컨텐츠를 감싸 추출하는 최초의 직접 시도가 :

Hello, World This is a paragraph.

그러나,이 결과는 또한 내부 노드 (P)의 콘텐츠, 즉 텍스트 () 전체에서 추출한 모든 평문을 포함한다. 우리는 노드 P 안의 텍스트를 제거하려는 경우,이 방법은 분명히 더 복잡 다음 텍스트가 다시 P 노드 추출에서 선택할 수 있습니다, 다음 전체 결과에서 문자열을 제거 할 수 있지만.

음, 이것은 우리가 다음을 수행 할 수 있습니다, 제거 () 메서드를 편리하게 할 수 있습니다 :

wrap.find('p').remove()
print(wrap.text())

우리는 먼저 그것을 제거하려면 제거 () 메서드를 호출 한 다음 왼쪽 내부의 랩에 안녕하세요, 세계는이 문장, 당신은 텍스트 () 메소드를 추출하는 데 사용할 수, 노드 P를 선택했습니다.

그래서, 우리의 추출을 용이하게하기 위해, 일부 중복 콘텐츠를 제거 () 메소드를 제거합니다. 적절한 시간 사용에 효율성을 크게 향상시킬 수 있습니다.

사실, 같은 APPEND (), () 빈, 앞에 추가 () 메소드와 같은 추가 노드 작업에 많은 방법이있다, 그들은 jQuery를 사용 정확히 같은, 자세한 사용법은 공식 문서를 참조 할 수있다 :http://pyquery.readthedocs.io ...

제 의사 클래스 선택기

CSS 선택기는 매우 중요한 이유가이 의사 클래스 선택기의 다양한 지원이다, 강했다. 예를 들어, 첫 번째 노드, 마지막 노드, 패리티 노드의 수, 텍스트를 포함, 등등, 우리가 느끼는 예를 사용하여 노드를 선택 :

html = '''
<div class="wrap">
    <div id="container">
        <ul class="list">
             <li class="item-0">first item</li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1 active"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
     </div>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('li:first-child')
print(li)
li = doc('li:last-child')
print(li)
li = doc('li:nth-child(2)')
print(li)
li = doc('li:gt(2)')
print(li)
li = doc('li:nth-child(2n)')
print(li)
li = doc('li:contains(second)')
print(li)
Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎

여기서 우리는 두 번째의 텍스트를 포함하는 제 3 노드 아래의 제 1 노드 리튬, 리튬 마지막 노드, 제 2 노드 리튬, 리튬 리튬을 선택 CSS3 의사 클래스 선택기 순차 리 노드에도 위치를 사용 리 노드는 매우 강력하다.

9. 결론

presentation.thank에 대한 일반적인 사용의 지금까지 PyQuery

추천

출처blog.51cto.com/14445003/2426470