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='''
'''
from pyquery import PyQuery as pq
doc = pq(html)
# 获取所有a标签
print(doc('body .mh-col li a'))
注意:
类名用.
id用#
标签用标签名
另外选择的是具有层级关系,从左到右,不是直接的父子的关系。
运行结果如下:
歌手高空拍MV坠亡
佛祖朱龙广金婚
常见租房陷阱
靳东回应发错诗词
煤老板们的影视江湖
1024程序员节
美的合并小天鹅
京昆高速4车相撞
操作
html='''
'''
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