1. 程式人生 > >python3 爬蟲之Pyquery的使用方法

python3 爬蟲之Pyquery的使用方法

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

python3 爬蟲之Pyquery的使用方法