python爬蟲之pyquery學習

來源:互聯網
上載者:User

標籤:from   filename   自己   demo   操作   介紹   type   coding   title   

相關內容:
  • pyquery的介紹
  • pyquery的使用
    • 安裝模組
    • 匯入模組
    • 解析對象初始化
    • css選取器
    • 在選定元素之後的元素再選取
    • 元素的文本、屬性等內容的擷取
  • pyquery執行DOM操作、css操作
    • Dom操作
    • CSS操作
  • 一個利用pyquery爬取豆瓣新書的例子

 

首發時間:2018-03-09 21:26

 

pyquery的介紹
  • pyquery允許對xml、html文檔進行jQuery查詢。
  • pyquery使用lxml進行快速xml和html操作。
  • pyquery是python中的jquery

 

PyQuery的使用: 1.安裝模組:

pip3 install pyquery

2.匯入模組:
from pyquery import PyQuery as pq
3.解析對象初始化:

【使用PyQuery初始化解析對象,PyQuery是一個類,直接將要解析的對象作為參數傳入即可】

  • 解析對象為字串時字串初始化 :預設情況下是字串,如果字串是一個帶http\https首碼的,將會認為是一個url
    textParse = pq(html)
  • 解析對象為網頁時url初始化: 建議使用關鍵字參數url=
    # urlParse = pq(‘http://www.baidu.com‘) #1urlParse = pq(url=‘http://www.baidu.com‘) #2
  • 解析對象為檔案時檔案初始化:建議使用關鍵字參數filename=
    fileParse = pq(filename="L:\demo.html")
  • 解析完畢後,就可以使用相關函數或變數來進行篩選,可以使用css等來篩選,

 

4.CSS選取器:
  • 利用標籤擷取:
    result = textParse(‘h2‘).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可以有參數,該參數可以是任何 jQuery 選取器的文法,
  • filter():對結果進行過濾,找出指定元素 ,filter可以有參數,該參數可以是任何 jQuery 選取器的文法,
  • children():擷取所有子項目,可以有參數,該參數可以是任何 jQuery 選取器的文法,
  • parent():擷取父元素,可以有參數,該參數可以是任何 jQuery 選取器的文法,
  • parents():擷取祖先元素,可以有參數,該參數可以是任何 jQuery 選取器的文法,
  • siblings():擷取兄弟元素,可以有參數,該參數可以是任何 jQuery 選取器的文法,
from pyquery import PyQuery as pqhtml="""<html><head></head><body><h2>This is a heading</h2><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">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(‘h2‘).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.hrefprint(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.元素的文本、屬性等內容的擷取:

attr(attribute):擷取屬性

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

attr.xxxx:擷取屬性xxxx

result21=textParse("a").attr.hrefresult22=textParse("a").attr.class_result23=textParse("a").attr.id_result24=textParse("a").attr.value

text():擷取文本,子項目中也僅僅返迴文本

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

html():擷取html,功能與text類似,但返回html標籤

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

 

 

補充1:

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

補充2:pyquery是jquery的python化,文法基本都是相通的,想瞭解更多,可以參考jquery。

pyquery執行DOM操作、css操作: DOM操作:

add_class():增加class

remove_class():移除class

remove():刪除指定元素

from pyquery import PyQuery as pqhtml="""<html><head></head><body><h2>This is a heading</h2><p id="p1" class="p1">This is a paragraph.</p><p class="p2">This is another paragraph.</p><div style="color:blue"> 123<a class="ca" href="http://www.baidu.com">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():設定屬性
    • 設定格式:attr("屬性名稱","屬性值")
  • css():設定css
    • 設定格式1:css("css樣式","樣式值")
    • 格式2:css({"樣式1":"樣式值","樣式2":"樣式值"})

 

from pyquery import PyQuery as pqhtml="""<html><head></head><body><h2>This is a heading</h2><p id="p1" class="p1">This is a paragraph.</p><p class="p2">This is another paragraph.</p><div style="color:blue"> 123<a class="ca" href="http://www.baidu.com">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"))

 

這些操作什麼時候會被用到:

【有時候可能會將資料樣式處理一下再儲存下來,就需要用到,比如我擷取下來的資料樣式我不滿意,可以自訂成我自己的格式】

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

一個利用pyquery爬取豆瓣新書的例子:

 

先使用審查元素,定位目標元素

確認爬取資訊

要注意的是,豆瓣新書是有一些分在後面頁的,實際上目標應該是li的上一級ul:

使用PyQuery篩選出結果:

from pyquery import PyQuery as pqurlParse=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("標題:"+title.text()+"\n")    file.write("作者:"+author.text()+"\n")    file.write("概要:"+abstract.text()+"\n")    file.write("-----------------\n")    print("\n")file.close()

 

 

 

python爬蟲之pyquery學習

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.