溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python如何使用pyquery模塊

發(fā)布時(shí)間:2020-08-04 14:46:02 來源:億速云 閱讀:189 作者:小豬 欄目:開發(fā)技術(shù)

這篇文章主要為大家展示了python如何使用pyquery模塊,內(nèi)容簡而易懂,希望大家可以學(xué)習(xí)一下,學(xué)習(xí)完之后肯定會(huì)有收獲的,下面讓小編帶大家一起來看看吧。

pyquery的介紹

  • pyquery允許對(duì)xml、html文檔進(jìn)行jQuery查詢。
  • pyquery使用lxml進(jìn)行快速xml和html操作。
  • pyquery是python中的jquery

PyQuery的使用:

1.安裝模塊:

pip3 install pyquery

2.導(dǎo)入模塊:

from pyquery import PyQuery as pq

3.解析對(duì)象初始化:

【使用PyQuery初始化解析對(duì)象,PyQuery是一個(gè)類,直接將要解析的對(duì)象作為參數(shù)傳入即可

  • 解析對(duì)象為字符串時(shí)字符串初始化 :默認(rèn)情況下是字符串,如果字符串是一個(gè)帶http\https前綴的,將會(huì)認(rèn)為是一個(gè)url
    textParse = pq(html)
     
  • 解析對(duì)象為網(wǎng)頁時(shí)url初始化: 建議使用關(guān)鍵字參數(shù)url=
    # urlParse = pq('http://www.baidu.com') #1
    urlParse = pq(url='http://www.baidu.com') #2
     
  • 解析對(duì)象為文件時(shí)文件初始化:建議使用關(guān)鍵字參數(shù)filename=
    fileParse = pq(filename="L:\demo.html")
     
  • 解析完畢后,就可以使用相關(guān)函數(shù)或變量來進(jìn)行篩選,可以使用css等來篩選,

4.CSS選擇器:

  • 利用標(biāo)簽獲取:
    result = textParse('h3').text()
     
  • 利用類選擇器:
    result3=textParse(".p1").text()
     
  • 利用id選擇:
    result4=textParse("#user").attr("type")
     
  • 分組選擇:
    result5=textParse("p,div").text()
     
  • 后代選擇器:
    result6=textParse("div a").attr.href
     
  • 屬性選擇器:
    result7=textParse("[class='p1']").text()
     
  • CSS3偽類選擇器:
    result8=textParse("p:last").text()
     

(更多的,可以參考css)

5.在選定元素之后的元素再選取:

  • find():找出指定子元素 ,find可以有參數(shù),該參數(shù)可以是任何 jQuery 選擇器的語法,
  • filter():對(duì)結(jié)果進(jìn)行過濾,找出指定元素 ,filter可以有參數(shù),該參數(shù)可以是任何 jQuery 選擇器的語法,
  • children():獲取所有子元素,可以有參數(shù),該參數(shù)可以是任何 jQuery 選擇器的語法,
  • parent():獲取父元素,可以有參數(shù),該參數(shù)可以是任何 jQuery 選擇器的語法,
  • parents():獲取祖先元素,可以有參數(shù),該參數(shù)可以是任何 jQuery 選擇器的語法,
  • siblings():獲取兄弟元素,可以有參數(shù),該參數(shù)可以是任何 jQuery 選擇器的語法,
from pyquery import PyQuery as pq

html="""
<html>
<head>
</head>
<body>
<h3>This is a heading</h3>
<p class="p1">This is a paragraph.</p>
<p class="p2">This is another paragraph.</p>
<div> 
123
<a id="a1" href="http://www.baidu.com" rel="external nofollow" rel="external nofollow" rel="external nofollow" >hello</a>
</div>
<input type="Button" >
<input id="user" type="text" >
</body>
"""

###初始化
textParse = pq(html)
# urlParse = pq('http://www.baidu.com') #1
# urlParse = pq(url='http://www.baidu.com') #2
# fileParse = pq(filename="L:\demo.html")

##獲取
result = textParse('h3').text()
print(result)
result2= textParse('div').html()
print(result2)
result3=textParse(".p1").text()
print(result3)
result4=textParse("#user").attr("type")
print(result4)
result5=textParse("p,div").text()
print(result5)
result6=textParse("div a").attr.href
print(result6)
result7=textParse("[class='p1']").text()
print(result7)
result8=textParse("p:last").text()
print(result8)
result9=textParse("div").find("a").text()
print(result9)
result12=textParse("p").filter(".p1").text()
print(result12)
result10=textParse("div").children()
print(result10)
result11=textParse("a").parent()
print(result11)

6.元素的文本、屬性等內(nèi)容的獲取:

attr(attribute):獲取屬性

result2=textParse("a").attr("href")

attr.xxxx:獲取屬性xxxx

result21=textParse("a").attr.href
result22=textParse("a").attr.class_

text():獲取文本,子元素中也僅僅返回文本

result1=textParse("a").text()

html():獲取html,功能與text類似,但返回html標(biāo)簽python如何使用pyquery模塊

result3=textParse("div").html()

補(bǔ)充1:

元素的迭代:如果返回的結(jié)果是多個(gè)元素,如果想迭代出每個(gè)元素,可以使用items():

python如何使用pyquery模塊

補(bǔ)充2:pyquery是jquery的python化,語法基本都是相通的,想了解更多,可以參考jquery。


pyquery執(zhí)行DOM操作、css操作:

DOM操作:

add_class():增加class

remove_class():移除class

remove():刪除指定元素

from pyquery import PyQuery as pq

html="""
<html>
<head>
</head>
<body>
<h3>This is a heading</h3>
<p id="p1" class="p1">This is a paragraph.</p>
<p class="p2">This is another paragraph.</p>
<div > 
123
<a class="ca" href="http://www.baidu.com" rel="external nofollow" rel="external nofollow" rel="external nofollow" >hello</a>
</div>
<input type="Button" >
<input id="user" type="text" >
</body>
"""

textParse=pq(html)
textParse('a').add_class("c1")
print(textParse('a').attr("class"))

textParse('a').remove_class("c1")
print(textParse('a').attr("class"))

print(textParse('div').html())
textParse('div').remove("a")
print(textParse('div').html())

css操作:

  • attr():設(shè)置屬性
    • 設(shè)置格式:attr("屬性名","屬性值")
  • css():設(shè)置css
    • 設(shè)置格式1:css("css樣式","樣式值")
    • 格式2:css({"樣式1":"樣式值","樣式2":"樣式值"})
from pyquery import PyQuery as pq

html="""
<html>
<head>
</head>
<body>
<h3>This is a heading</h3>
<p id="p1" class="p1">This is a paragraph.</p>
<p class="p2">This is another paragraph.</p>
<div > 
123
<a class="ca" href="http://www.baidu.com" rel="external nofollow" rel="external nofollow" rel="external nofollow" >hello</a>
</div>
<input type="Button" >
<input id="user" type="text" >
</body>
"""

textParse=pq(html)
textParse('a').attr("name","hehe")
print(textParse('a').attr("name"))

textParse('a').css("color","white")
textParse('a').css({"background-color":"black","postion":"fixed"})
print(textParse('a').attr("style"))

這些操作什么時(shí)候會(huì)被用到:

【有時(shí)候可能會(huì)將數(shù)據(jù)樣式處理一下再存儲(chǔ)下來,就需要用到,比如我獲取下來的數(shù)據(jù)樣式我不滿意,可以自定義成我自己的格式】

【有時(shí)候需要逐層清理再篩選出指定結(jié)果,比如<div>123<a></a></div>中,如果僅僅想要獲取123就可以先刪除<a>再獲取】


一個(gè)利用pyquery爬取豆瓣新書的例子:

先使用審查元素,定位目標(biāo)元素python如何使用pyquery模塊

確認(rèn)爬取信息python如何使用pyquery模塊

要注意的是,豆瓣新書是有一些分在后面頁的,實(shí)際上目標(biāo)應(yīng)該是li的上一級(jí)ul:python如何使用pyquery模塊

使用PyQuery篩選出結(jié)果:

from pyquery import PyQuery as pq

urlParse=pq(url="https://book.douban.com/")

info=urlParse("div.carousel ul li div.info")

file=open("demo.txt","w",encoding="utf8")
for i in info.items():
  title=i.find("div.title")
  author=i.find("span.author")
  abstract=i.find(".abstract")
  file.write("標(biāo)題:"+title.text()+"\n")
  file.write("作者:"+author.text()+"\n")
  file.write("概要:"+abstract.text()+"\n")
  file.write("-----------------\n")
  print("\n")
file.close()

以上就是關(guān)于python如何使用pyquery模塊的內(nèi)容,如果你們有學(xué)習(xí)到知識(shí)或者技能,可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI