python3 爬蟲之Pyquery的使用方法
阿新 • • 發佈:2018-02-15
ger -s pos amp int lxml pyquery add ddc
安裝
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‘)
可以直接傳某個路徑的文件名。
選擇器操作
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 importPyQuery 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
python3 爬蟲之Pyquery的使用方法