pyquery基礎

1.pyquery庫的了解

pyquery庫是jQuery的Python實現(xiàn)房轿,能夠以jQuery的語法來操作解析 HTML 文檔聚唐,易用性和解析速度都很好。

image

1.1 pyquery庫的安裝方法:

在cmd輸入:pip install pyquery

1.2 pyquery庫的引用:(注意大小寫)

from pyquery import PyQuery as pq

2.pyquery初始化

像BeautifulSoup一樣佑笋,PyQuery初始化的時候也需要傳入HTML數(shù)據(jù)源來初始化一個操作對象寺滚,它的初始化方式有多種,比如直接傳入字符串氨淌,傳入URL泊愧,傳文件名。下面我們來詳細介紹一下盛正。

2.1直接傳入字符串

在這里我們首先引入了PyQuery這個對象拼卵,取別名為pq,然后聲明了一個長HTML字符串蛮艰,當作參數(shù)傳遞給PyQuery腋腮,這樣就成功完成了初始化,然后接下來將初始化的對象傳入CSS選擇器壤蚜,在這個實例中我們傳入li節(jié)點即寡,這樣就可以選擇所有的li節(jié)點,打印輸出可以看到所有的li節(jié)點的HTML文本袜刷。

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"))
<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>

2.2傳入URL

初始化的參數(shù)不僅可以以字符串的形式傳遞聪富,還可以傳入網(wǎng)頁的URL,在這里只需要指定參數(shù)為url即可著蟹。

>>> from pyquery import PyQuery as pq
>>> doc=pq(url="http://www.baidu.com")
>>> print(doc("head"))#輸出head標簽
<head><meta http-equiv="content-type" content="text/html;charset=utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=Edge"/><meta content="always" name="referrer"/><link rel="stylesheet" type="text/css" /><title>????o|??????????? ?°±??¥é??</title></head> 

這樣的話PyQuery會首先請求這個URL墩蔓,然后用得到的HTML內(nèi)容完成初始化梢莽,其實就相當于我們用網(wǎng)頁的源代碼以字符串的形式傳遞給PyQuery來初始化。

它與下面的功能是相同的:

>>> from pyquery import PyQuery as pq
>>> import requests
>>> doc=pq(requests.get("http://www.baidu.com").text)
>>> print(doc("head"))
<head><meta http-equiv="content-type" content="text/html;charset=utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=Edge"/><meta content="always" name="referrer"/><link rel="stylesheet" type="text/css" /><title>????o|??????????? ?°±??¥é??</title></head> 
>>> 

2.3傳文件名

當然除了傳遞一個URL奸披,還可以傳遞本地的文件名昏名,參數(shù)指定為filename即可。

image

當然在這里需要有一個本地HTML文件demo.html阵面,內(nèi)容是待解析的HTML字符串轻局。這樣它會首先讀取本地的文件內(nèi)容,然后用文件內(nèi)容以字符串的形式傳遞給PyQuery來初始化样刷。

以上三種初始化方式均可仑扑,當然最常用的初始化方式還是以字符串形式傳遞。

3.基本CSS選擇器

從這一節(jié)開始置鼻,我們就要對PyQuery對象進行操作镇饮,獲得我們想要的各種數(shù)據(jù)。你會看到解析網(wǎng)頁箕母,不論什么庫储藐,基本原理實際上是沒有區(qū)別的,學會了一種解析庫司蔬。再看其他解析庫文檔,是很容易理解的姨蝴。

在 CSS 中俊啼,選擇器是一種模式,用于選擇需要添加樣式的元素左医。

image

本文只講clas id 和element最常見的css選擇器授帕。對css不太懂了,也沒關系浮梢,可以去w3c的css選擇器

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>
'''

在這里我們初始化PyQuery對象之后跛十,傳入了一個CSS選擇器,#container .list li秕硝,意思是選取id為container的節(jié)點內(nèi)部的class為list的節(jié)點內(nèi)部的所有l(wèi)i節(jié)點芥映。然后打印輸出,可以看到成功獲取到了符合條件的節(jié)點远豺。

然后我們將它的類型打印輸出奈偏,可以看到它的類型依然是PyQuery類型。有層級的關系需要用空格隔開.

>>> from pyquery import PyQuery as pq
>>> doc=pq(html)
>>> print(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>

4.查找元素

下面我們介紹一些常用的查詢函數(shù)躯护,這些函數(shù)和jQuery中的函數(shù)用法也完全相同惊来。

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>
'''

4.1子元素

查找子節(jié)點需要用到find()方法,傳入的參數(shù)是CSS選擇器棺滞,我們還是以上面的HTML為例裁蚁∈冈ǎ可以使用層層嵌套的方式.

'''
>>> from pyquery import PyQuery as pq
>>> doc=pq(html)
>>> items=doc(".list")
>>> print(type(items))
<class 'pyquery.pyquery.PyQuery'>

>>> print(items)
<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>

>>> list=items.find("li")
>>> print(type(list))
<class 'pyquery.pyquery.PyQuery'>
>>> print(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>

首先我們選取了class為list的節(jié)點,然后我們調(diào)用了find()方法枉证,傳入了CSS選擇器矮男,選取其內(nèi)部的li節(jié)點,最后都打印輸出即可觀察到對應的查詢結果刽严,可以發(fā)現(xiàn)find()方法會將符合條件的所有節(jié)點選擇出來昂灵,結果的類型是PyQuery類型。

其實find()的查找范圍是節(jié)點的所有子孫節(jié)點舞萄,而如果我們只想查找子節(jié)點眨补,那可以用children()方法。

>>> list = items.children()
>>> print(type(list))
<class 'pyquery.pyquery.PyQuery'>
>>> print(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>

如果要篩選所有子節(jié)點中符合條件的節(jié)點倒脓,比如我們想篩選出子節(jié)點中class為active的節(jié)點撑螺,可以向children()方法傳入CSS選擇器.active

>>> list = items.children('.active')
>>> print(list)
<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>

4.2父元素

4.2.1parent()方法

我們可以用parent()方法來獲取某個節(jié)點的父節(jié)點,我們用一個實例來感受一下:

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>
'''

以下案例分析:

  • 在這里我們首先用.list選取了class為list的節(jié)點崎弃,然后調(diào)用了parent()方法甘晤,得到其父節(jié)點,類型依然是PyQuery類型饲做。

  • 這里的父節(jié)點是該節(jié)點的直接父節(jié)點线婚,也就是說,它不會再去查找父節(jié)點的父節(jié)點盆均,即祖先節(jié)點塞弊。

>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> items = doc('.list')
>>> container = items.parent()
>>> print(type(container))
<class 'pyquery.pyquery.PyQuery'>
>>> print(container)
<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>

4.2.2parents()方法

以下案例:但是如果我們想獲取某個祖先節(jié)點怎么辦呢?可以用parents()方法泪姨。

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>
'''

parents查找所有的父親節(jié)點,返回兩個結果.

>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> items = doc('.list')
>>> parents = items.parents()
>>> print(type(parents))
<class 'pyquery.pyquery.PyQuery'>
>>> print(parents)
<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>

parents可進行再次篩選

>>> 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>
>>> 

4.3兄弟元素

在上面我們說明了子節(jié)點和父節(jié)點的用法游沿,還有一種節(jié)點那就是兄弟節(jié)點,如果要獲取兄弟節(jié)點可以使用siblings()方法肮砾。我們還是以上面的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>
'''

屬性沒有加空格表表示同一個標簽列里面,是并列的意思.在這里我們首先選擇了class為list的節(jié)點內(nèi)部的class為item-0和active的節(jié)點诀黍,也就是第三個li節(jié)點。那么很明顯它的兄弟節(jié)點有四個仗处,那就是第一眯勾、二、四咒精、五個li節(jié)點】醯担可以看到運行結果也正是我們剛才所說的四個兄弟節(jié)點模叙。

>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> li = doc('.list .item-0.active')
>>> print(li.siblings())
<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>

果要篩選某個兄弟節(jié)點,我們依然可以向方法傳入CSS選擇器鞋屈,這樣就會從所有兄弟節(jié)點中挑選出符合條件的節(jié)點了范咨。
在這里我們篩選了class為active的節(jié)點故觅,通過剛才的結果我們可以觀察到class為active的兄弟節(jié)點只有第四個li節(jié)點,所以結果應該是一個,如下:

>>> 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的選擇結果可能是多個節(jié)點输吏,可能是單個節(jié)點,類型都是PyQuery類型替蛉,并沒有返回像BeautifulSoup一樣的列表贯溅。

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>
'''

5.1單個元素

對于單個節(jié)點來說,我們可以直接打印輸出躲查,也可直接轉成字符串它浅。

>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> li = doc('.item-0.active')
>>> print(li)
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>

5.2多個元素

如下案例:

  • 對于多個節(jié)點的結果,我們就需要遍歷來獲取了镣煮,例如這里我們把每一個li節(jié)點進行遍歷,姐霍,需要調(diào)用items()方法
  • 在這里我們可以發(fā)現(xiàn)調(diào)用items()方法后典唇,會得到一個生成器镊折,遍歷一下,就可以逐個得到li節(jié)點對象了介衔,它的類型也是PyQuery類型恨胚,所以每個li標簽還可以調(diào)用前面所說的方法進行選擇,比如繼續(xù)查詢子節(jié)點炎咖,尋找某個祖先節(jié)點等等赃泡,非常靈活。
>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> lis=doc("li").items()
>>> print(type(list))
<class 'pyquery.pyquery.PyQuery'>
>>> for li in lis:
    print(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>

6.獲取信息

提取到節(jié)點之后塘装,我們的最終目的當然是提取節(jié)點所包含的信息了急迂,比較重要的信息有兩類影所,一是獲取屬性蹦肴,二是獲取文本,下面我們分別進行說明猴娩。

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>
'''

6.1獲取屬性

提取到某個PyQuery類型的節(jié)點之后阴幌,我們可以調(diào)用attr()方法來獲取屬性,有兩種方式可以進行獲取,如下:

>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> a = doc('.item-0.active a')#這里有個空格,則選擇里面的標簽
>>> print(a)
<a href="link3.html"><span class="bold">third item</span></a>
>>> print(a.attr('href'))#方法一
link3.html
>>> print(a.attr.href)#方法二
link3.html

注意:

  • 當返回結果包含多個節(jié)點時,調(diào)用attr()方法只會得到第一個節(jié)點的屬性卷中。
  • 在進行屬性獲取的時候觀察一下返回節(jié)點是一個還是多個矛双,如果是多個,則需要遍歷才能依次獲取每個節(jié)點的屬性蟆豫。

6.2獲取文本

獲取節(jié)點之后的另一個主要的操作就是獲取其內(nèi)部的文本了议忽,我們可以調(diào)用text()方法來獲取

>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> a = doc('.item-0.active a')
>>> print(a)
<a href="link3.html"><span class="bold">third item</span></a>
>>> print(a.text())
third item

我們首先選中了一個a節(jié)點,然后調(diào)用了text()方法十减,就可以獲取其內(nèi)部的文本信息了栈幸,它會忽略掉標簽內(nèi)部包含的所有HTML愤估,只返回純文字內(nèi)容。

6.3獲取HTML

但如果我們想要獲取這個節(jié)點內(nèi)部的HTML文本速址,就可以用html()方法玩焰。

>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> li = doc('.item-0.active')
>>> print(li)
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>

>>> print(li.html())
<a href="link3.html"><span class="bold">third item</span></a>

這里我們選中了第三個li節(jié)點,然后調(diào)用了html()方法芍锚,它返回的結果應該是li標簽內(nèi)的所有HTML文本昔园。

6.4獲取屬性/文本/HTML總結

注意:這里同樣有一個問題,如果我們選中的結果是多個節(jié)點并炮,text()或html()會返回什么內(nèi)容默刚?

  • 我們選中的是所有的li節(jié)點,可以發(fā)現(xiàn)html()方法返回的是第一個li節(jié)點的內(nèi)部HTML文本,而text()則返回了所有的li節(jié)點內(nèi)部純文本臣淤,中間用一個空格分割開沉御,實際上是一個字符串。
  • 如果我們得到的結果是多個節(jié)點皂冰,如果要獲取每個節(jié)點的內(nèi)部HTML文本,則需要遍歷每個節(jié)點养篓,而text()方法不需要遍歷就可以獲取秃流,它是將所有節(jié)點取文本之后合并成一個字符串。

7.DOM操作

PyQuery提供了一系列方法來對節(jié)點進行動態(tài)修改操作柳弄,比如為某個節(jié)點添加一個class舶胀,移除某個節(jié)點等等,這些操作有時候會為提取信息帶來極大的便利碧注。

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>
'''

7.1addClass嚣伐、removeClass

首先我們選中了第三個li節(jié)點,然后調(diào)用了removeClass()方法萍丐,將li的active這個class移除轩端,后來又調(diào)用了addClass()方法,又將class添加回來逝变,每執(zhí)行一次操作基茵,就打印輸出一下當前l(fā)i節(jié)點的內(nèi)容。

>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> li = doc('.item-0.active')
>>> print(li)
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>

>>> li.removeClass('active')#[<li.item-0>]
>>> print(li)
<li class="item-0"><a href="link3.html"><span class="bold">third item</span></a></li>

>>> li.addClass('active')#[<li.item-0.active>]
>>> print(li)
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>

可以看到一共進行了三次輸出壳影,第二次輸出li標簽的active這個class被移除了拱层,第三次class又添加回來了。
所以說我們addClass()宴咧、removeClass()這些方法可以動態(tài)地改變節(jié)點的class屬性根灯。

7.2attr、css

7.2.1attr

當然除了操作class這個屬性,也有attr()方法來專門針對屬性進行操作

>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> li = doc('.item-0.active')
>>> print(li)
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>

>>> li.attr('name', 'link')#[<li.item-0.active>]
>>> print(li)
<li class="item-0 active" name="link"><a href="link3.html"><span class="bold">third item</span></a></li>

在這里我們首先選中了li標簽烙肺,然后調(diào)用attr()方法來修改/增加屬性芥驳,第一個參數(shù)為屬性名,第二個參數(shù)為屬性值.如原來存在,則修改屬性值,如不存在,則增加.

7.2.2css
>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> li = doc('.item-0.active')
>>> print(li)
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>

>>> li.css('font-size', '14px')#[<li.item-0.active>]
>>> print(li)
<li class="item-0 active" name="link" style="font-size: 14px"><a href="link3.html"><span class="bold">third item</span></a></li>

7.3remove

remove顧名思義移除茬高,remove()方法有時會為信息的提取帶來非常大的便利兆旬。這個用的比較頻繁下面我們看一個實例:

html = '''
<div class="wrap">
    Hello, World
    <p>This is a paragraph.</p>
 </div>
'''

在這里有一段HTML文本,我們現(xiàn)在想提取Hello, World這個字符串怎栽,而不要p節(jié)點內(nèi)部的字符串丽猬,這個怎樣來提取熏瞄?

>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> wrap = doc('.wrap')
>>> print(wrap.text())
Hello, World
This is a paragraph.
>>> wrap.find('p').remove()#[<p>]
>>> print(wrap.text())
Hello, World

注意:

  • 在這里我們直接先嘗試提取class為wrap的節(jié)點的內(nèi)容脚祟,看看是不是我們想要的,運行結果是Hello, World,This is a paragraph.
  • 然而這個結果還包含了內(nèi)部的p節(jié)點的內(nèi)容强饮,也就是說text()把所有的純文本全提取出來了由桌。如果我們想去掉p節(jié)點內(nèi)部的文本,可以選擇再把p節(jié)點內(nèi)的文本提取一遍邮丰,然后從整個結果中移除這個子串行您,但這個做法明顯比較繁瑣。
  • 那這是remove()方法就可以派上用場了剪廉,我們可以接著這么做,我們首先選中了p節(jié)點娃循,然后調(diào)用了remove()方法將其移除,然后這時wrap內(nèi)部就只剩下Hello, World這句話了斗蒋,然后再利用text()方法提取即可捌斧。
  • 所以說,remove()方法可以刪除某些冗余內(nèi)容泉沾,來方便我們的提取捞蚂。在適當?shù)臅r候使用可以極大地提高效率。

其他DOM方法

  • 另外其實還有很多節(jié)點操作的方法跷究,比如append()姓迅、empty()、prepend()等方法揭朝,他們和jQuery的用法是完全一致的队贱,詳細的用法可以看到官方文檔色冀。
    http://pyquery.readthedocs.io/en/latest/api.html

8.偽類選擇器

CSS選擇器之所以強大潭袱,還有一個很重要的原因就是它支持多種多樣的偽類選擇器。例如選擇第一個節(jié)點锋恬、最后一個節(jié)點屯换、奇偶數(shù)節(jié)點、包含某一文本的節(jié)點等等,我們用一個實例感受一下:

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>
'''

計數(shù)是從0開始的

from pyquery import PyQuery as pq
doc = pq(html)
li = doc('li:first-child')#節(jié)點彤悔、第一個
print(li)
li = doc('li:last-child')#節(jié)點嘉抓、最后一個
print(li)
li = doc('li:nth-child(2)')#節(jié)點、第二個
print(li)
li = doc('li:gt(2)')#獲取序號比2大的標簽
print(li)
li = doc('li:nth-child(2n)')#獲取偶數(shù)的標簽,2n+1則是獲得奇數(shù)
print(li)
li = doc('li:contains(second)')#包含second文本的
print(li)

<li class="item-0">first item</li>

<li class="item-0"><a href="link5.html">fifth item</a></li>

<li class="item-1"><a href="link2.html">second item</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>

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

<li class="item-1"><a href="link2.html">second item</a></li>

更多CSS選擇器可以查看
http://www.w3school.com.cn/css/index.asp
官方文檔
http://pyquery.readthedocs.io/

作者:durian221783310
鏈接:http://www.reibang.com/p/d223a0181edb
來源:簡書

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末晕窑,一起剝皮案震驚了整個濱河市抑片,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌杨赤,老刑警劉巖敞斋,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異疾牲,居然都是意外死亡植捎,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門阳柔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來焰枢,“玉大人,你說我怎么就攤上這事舌剂〖贸” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵霍转,是天一觀的道長拟淮。 經(jīng)常有香客問我,道長谴忧,這世上最難降的妖魔是什么很泊? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮沾谓,結果婚禮上委造,老公的妹妹穿的比我還像新娘。我一直安慰自己均驶,他們只是感情好昏兆,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著妇穴,像睡著了一般爬虱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上腾它,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天跑筝,我揣著相機與錄音,去河邊找鬼瞒滴。 笑死曲梗,一個胖子當著我的面吹牛赞警,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播虏两,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼愧旦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了定罢?” 一聲冷哼從身側響起笤虫,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎祖凫,沒想到半個月后耕皮,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蝙场,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年凌停,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片售滤。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡罚拟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出完箩,到底是詐尸還是另有隱情赐俗,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布弊知,位于F島的核電站阻逮,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏秩彤。R本人自食惡果不足惜叔扼,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望漫雷。 院中可真熱鬧瓜富,春花似錦、人聲如沸降盹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蓄坏。三九已至价捧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間涡戳,已是汗流浹背结蟋。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留妹蔽,地道東北人椎眯。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像胳岂,于是被迫代替她去往敵國和親编整。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5乳丰? 答:HTML5是最新的HTML標準掌测。 注意:講述HT...
    kismetajun閱讀 27,445評論 1 45
  • 寫在前面的話:我們前面學習了正則,但是正則是個很繁瑣的東西产园,一旦寫錯汞斧,就要匹配失敗,我們還要不斷的調(diào)試什燕,對于一個網(wǎng)...
    小新你蠟筆呢閱讀 2,016評論 1 7
  • 歡迎關注個人微信公眾賬號:byodian個人博客:Byodian's Blog JavaScript 基礎知識總結...
    工具速遞閱讀 754評論 0 3
  • 一粘勒、樣式篇 第1章 初識jQuery (1)環(huán)境搭建 進入官方網(wǎng)站獲取最新的版本 http://jquery.co...
    凜0_0閱讀 3,358評論 0 44
  • 我總覺得這夜是平靜的,明早太陽升起的時候屎即,也會是平靜的庙睡,覺得沒事的,會沒事的技俐,一定會沒事的乘陪。 坐在陽臺上,等夜光雕擂,...
    一只孤獨的青鳥閱讀 322評論 0 1