python3 爬蟲之Pyquery的使用方法


安裝

pip install pyquery

官方文檔: 

https://pythonhosted.org/pyquery/

初始化方式(四種)

1. 直接字符串

from pyquery import PyQuery as pq
doc = pq("<html></html>")

pq 參數可以直接傳入 HTML 代碼,doc 現在就相當於 jQuery 里面的 $ 符號了。

2. lxml.etree

from lxml import etree
doc = pq(etree.fromstring("<html></html>"))

可以首先用 lxml 的 etree 處理一下代碼,這樣如果你的 HTML 代碼出現一些不完整或者疏漏,都會自動轉化為完整清晰結構的 HTML代碼。

3. 直接傳URL

from pyquery import PyQuery as pq
doc = pq('http://www.baidu.com')

這里就像直接請求了一個網頁一樣,類似用 requests.get(url) 來直接請求這個鏈接,得到 HTML 代碼。

4. 傳文件

from pyquery import PyQuery as pq
doc = pq(filename='hello.html')

可以直接傳某個路徑的文件名。

HTML標簽操作

from pyquery import PyQuery as pq
doc = pq('http://so.fengniao.com/index.php?action=Image&keyword=%E7%BE%8E%E6%99%AF')
imgs = doc('img')#取到所有圖片
li = doc('li')
print(li.text())
divs = doc('div')
p = doc('p')

屬性操作

from pyquery import PyQuery as pq
doc = pq('http://so.fengniao.com/index.php?action=Image&keyword=%E7%BE%8E%E6%99%AF')
div = doc('div')
print(div.attr('id'))
print(div.attr('id','xiding'))
from pyquery import PyQuery as pq
p = pq('<p id="hello" class="hello"></p>')('p')
print p.addClass('beauty')
print p.removeClass('hello')
print p.css('font-size', '16px')
print p.css({'background-color': 'yellow'})

DOM操作

同樣原汁原味的 jQuery 語法

from pyquery import PyQuery as pq
p = pq('<p id="hello" class="hello"></p>')('p')
print p.append(' check out <a href="https://pythonhosted.org/pyquery/api.html"><span>python</span></a>')
print p.prepend('Oh yes!')
d = pq('<div class="wrap"><div id="test"><a href="https://pythonhosted.org/pyquery/api.html">api</a></div></div>')
p.prependTo(d('#test'))
print p
print d
d.empty()
print d

運行結果

<p id="hello" class="hello"> check out <a href="https://www.python.org/"><span>python</span></a></p>
<p id="hello" class="hello">Oh yes! check out <a href="https://www.python.org/"><span>python</span></a></p>
<p id="hello" class="hello">Oh yes! check out <a href="https://www.python.org/"><span>python</span></a></p>
<div class="wrap"><div id="test"><p id="hello" class="hello">Oh yes! check out <a href="https://www.python.org/"><span>https://www.python.org/</span></a></p><a href="http://cuiqingcai.com">Germy</a></div></div>
<div class="wrap"/>

DOM 操作也是與 jQuery 如出一轍。

遍歷

遍歷用到 items 方法返回對象列表,或者用 lambda,不過常用的還是items()

imgs = doc('img')#取到所有圖片
list_imgs = []
for img in imgs.items():
    list_imgs.append(img.attr('src'))#將所有圖片鏈接放到列表

網頁請求

from pyquery import PyQuery as pq
print pq('http://www.baidu.com/', headers={'user-agent': 'pyquery'})
print pq('http://www.baidu.com/post', {'foo': 'bar'}, method='post', verify=True)

Ajax

PyQuery 同樣支持 Ajax 操作,帶有 get 和 post 方法,不過不常用,一般我們不會用 PyQuery 來做網絡請求,僅僅是用來解析。

PyQuery AJAX

API

API

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM