Python爬蟲之PyQuery使用
PyQuery簡介
pyquery能夠通過選擇器精确定位 DOM 樹中的目标并進行操作。pyquery相當于jQuery的python實作,可以用于解析HTML網頁等。它的文法與jQuery幾乎完全相同,對于使用過jQuery的人來說很熟悉,也很好上手。
初始化
有 4 種方法可以進行初始化:
可以通過傳入 字元串、lxml、檔案 或者 url 來使用PyQuery
from pyquery import PyQuery as pq
from lxml import etree
d = pq("")#傳入字元串
d = pq(etree.fromstring(""))#傳入lxml
d = pq(url='http://baidu.com/') #傳入url
d = pq(filename=path_to_html_file) #傳入檔案
基本CSS選擇器
html='''
- 歌手高空拍MV墜亡
- 佛祖朱龍廣金婚
- 常見租房陷阱
- 靳東回應發錯詩詞
- 煤老闆們的影視江湖
- 1024程式員節
- 美的合并小天鵝
- 京昆高速4車相撞
'''
from pyquery import PyQuery as pq
doc = pq(html)
# 擷取所有a标簽
print(doc('body .mh-col li a'))
注意:
類名用.
id用#
标簽用标簽名
另外選擇的是具有層級關系,從左到右,不是直接的父子的關系。
運作結果如下:
歌手高空拍MV墜亡
佛祖朱龍廣金婚
常見租房陷阱
靳東回應發錯詩詞
煤老闆們的影視江湖
1024程式員節
美的合并小天鵝
京昆高速4車相撞
操作
html='''
- 歌手高空拍MV墜亡
- 佛祖朱龍廣金婚
- 常見租房陷阱
- 靳東回應發錯詩詞
- 煤老闆們的影視江湖
- 1024程式員節
- 美的合并小天鵝
-
新聞
京昆高速4車相撞
'''
from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.mh-col')
#.find():查找嵌套元素
alist = items.find('li a')
print(alist)
#查找所有子元素
alist2 = items.children()
print(alist2)
#查找指定的子元素
alist3 = items.children('.g-ellipsis1')
print(alist2)
#查找父元素
#注意:一個元素隻有一個父元素
body = items.parent()
print(body)
#查找祖先元素
content = items.parents()
print(content)
#查找兄弟元素
li = doc('.mh-col .g-ellipsis1')
print(li.siblings())
#周遊 單個元素
#周遊所有的a标簽
alist =doc('.mh-col li a').items()
for a in alist: print(a)
擷取資訊
擷取屬性
a =doc('.mh-col li .g-a-noline8')
print(a.attr['href'])
print(a.attr.href)
擷取文本
a =doc('.mh-col li .g-a-noline8')
print(a.text())
擷取HTML
a =doc('.mh-col li .g-a-noline8')
print(a.html())
簡單的DOM操作
#addClass、removerClass
#修改類名
a =doc('.mh-col li .g-a-noline8')
print(a)
a.removeClass('g-a-noline8')
print(a)
a.addClass('g-a-noline8')
print(a)
#attr、css
#修改屬性和樣式
a =doc('.mh-col li .g-a-noline8')
print(a)
a.attr('name','link')
print(a)
a.css('font-size','14px')
print(a)
#remove
#删除标簽
li = doc('.mh-col .g-ellipsis8')
print(li)
li.find('a').remove()
print(li)
更多的DOM操作:https://pyquery.readthedocs.io/en/latest/api.html