首頁  >  文章  >  後端開發  >  爬蟲的解析方式四:PyQuery

爬蟲的解析方式四:PyQuery

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼轉載
2019-06-05 15:14:533174瀏覽

眾多語言都能進行爬蟲,但基於python的爬蟲顯得更加簡潔,方便。爬蟲也成了python語言中不可或缺的一部分。爬蟲的解析方式也是多樣化。上一篇告訴大家的是爬蟲的解析方式三:正規表示式,今天帶給大家的是另一種方式,PyQuery。

爬蟲的解析方式四:PyQuery

PyQuery

PyQuery函式庫也是一個非常強大又靈活的網頁解析函式庫,如果你有前端開發經驗的,都應該接觸過jQuery,那麼PyQuery就是你非常絕佳的選擇,PyQuery 是Python 仿照jQuery 的嚴格實作。語法與 jQuery 幾乎完全相同,所以不用再去費心記一些奇怪的方法了。

初始化的時候一般有三種傳入方式:傳入字串,傳入url,傳入檔案。

字串初始化

html = 

from pyquery 
import PyQuery as pq
doc = pq(html)print(doc)
print(type(doc))
print(doc('li'))

結果如下:

爬蟲的解析方式四:PyQuery

#由於PyQuery寫起來比較麻煩,所以我們導入的時候都會加入別名:

from pyquery import PyQuery as pq

這裡我們可以知道上述程式碼中的doc其實就是一個pyquery對象,我們可以透過doc可以進行元素的選擇,其實這裡就是一個css選擇器,所以CSS選擇器的規則都可以用,直接doc(標籤名)就可以取得所有的該標籤的內容,如果想要取得class 則doc('.class_name'),如果是id則doc('#id_name') ....

URL初始化

from pyquery import PyQuery as pq
doc = pq(url="http://www.baidu.com",encoding='utf-8')print(doc('head'))

檔案初始化

我們在pq()這裡可以傳入url參數也可以傳入檔案參數,當然這裡的文件通常是html文件,例如:pq(filename='index.html')

#基本的CSS選擇器

html = '''
'''
from pyquery import PyQuery as pq
doc = pq(html)
print(doc('#container .list li'))

這裡我們需要注意的一個地方是doc ('#container .list li'),這裡的三者之間的並不是必須要挨著,只要是層級關係就可以,下面是常用的CSS選擇器方法:

爬蟲的解析方式四:PyQuery

找出元素

子元素
children,find
程式碼範例:

html = '''

'''
from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
print(type(items))
print(items)
lis = items.find('li')
print(type(lis))
print(lis)

運行結果如下

從結果裡我們也可以看出透過pyquery找到結果其實還是一個pyquery對象,可以繼續查找,上述中的程式碼中的items.find('li') 則表示查找ul裡的所有的li標籤
當然這裡透過children可以實現同樣的效果,並且透過.children方法得到的結果也是一個pyquery物件

li = items.children()
print(type(li))
print(li)

同時在children裡也可以用CSS選擇器

li2 = items.children('.active') 
print(li2)

父元素
parent,parents方法

#透過.parent就可以找到父元素的內容,範例如下:

html = ''''''from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
container = items.parent()
print(type(container))
print(container)

透過.parents就可以找到祖先節點的內容,例子如下:

html = '''

'''
from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
parents = items.parents()
print(type(parents))
print(parents)

結果如下:從結果我們可以看出返回了兩部分內容,一個是的父節點的信息,一個是父節點的父節點的信息即祖先節點的信息

同樣我們透過.parents查找的時候也可以加入css選擇器來進行內容的篩選

#兄弟元素
siblings

html = '''

'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.list .item-0.active')
print(li.siblings())

代碼中doc('.list .item-0.active') 中的.tem-0和.active是緊鄰的,所以表示是併的關係,這樣滿足條件的就剩下一個了:thired item的那個標籤了
這樣在通過.siblings就可以取得所有的兄弟標籤,當然這裡是不包括自己的
同樣的在.siblings()裡也是可以透過CSS選擇器進行篩選

#遍歷

單一元素

html = '''

'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
lis = doc('li').items()
print(type(lis))for li in lis:    
print(type(li))    
print(li)

運行結果如下:從結果中我們可以看出透過items()可以得到一個生成器,而我們透過for迴圈得到的每個元素依然是一個pyquery物件。

取得資訊

取得屬性
pyquery物件.attr(屬性名稱)
pyquery物件.attr.屬性名稱

html = '''

'''
from pyquery import PyQuery as pq
doc = pq(html)
a = doc('.item-0.active a')
print(a)
print(a.attr('href'))
print(a.attr.href)

所以這裡我們也可以知道得到屬性值的時候可以直接a.attr(屬性名稱)或a.attr.屬性名稱

取得文字
在很多時候我們是需要取得被html標籤包含的文字資訊,透過.text()就可以取得文字資訊

html = '''

'''
from pyquery import PyQuery as pq
doc = pq(html)
a = doc('.item-0.active a')
print(a)
print(a.text())

結果如下:

爬蟲的解析方式四:PyQuery

取得html


我們透過.html()的方式可以取得目前標籤所包含的html信息,範例如下:

#
html = '''

'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
print(li.html())

結果如下:

爬蟲的解析方式四:PyQuery

DOM運算

addClass、removeClass
熟悉前端操作的话,通过这两个操作可以添加和删除属性

html = '''

'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
li.removeClass('active')
print(li)
li.addClass('active')
print(li)

attr,css
同样的我们可以通过attr给标签添加和修改属性,
如果之前没有该属性则是添加,如果有则是修改
我们也可以通过css添加一些css属性,这个时候,标签的属性里会多一个style属性

html = '''

'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
li.attr('name', 'link')
print(li)
li.css('font-size', '14px')
print(li)

结果如下:

爬蟲的解析方式四:PyQuery

 

remove
有时候我们获取文本信息的时候可能并列的会有一些其他标签干扰,这个时候通过remove就可以将无用的或者干扰的标签直接删除,从而方便操作

html = '''
Hello, World

This is a paragraph.

'''from pyquery import PyQuery as pq doc = pq(html) wrap = doc('.wrap') print(wrap.text()) wrap.find('p').remove() print(wrap.text())

结果如下:

爬蟲的解析方式四:PyQuery

以上是爬蟲的解析方式四:PyQuery的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除