PyQuery模块也是一个解析html的一个模块,它和Beautiful Soup用起来差不多,它是jquery实现的,和jquery语法差不多,会用jquery的人用起来就比较方便了。
Pyquery需要依赖lxml模块,不装的话,使用会报错。
安装
1 2 | pip install lxml pip install pyquery |
解析html的3种方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | from pyquery import PyQuery html = """ <html><head><title>BestTest</title></head> <body> <div> <p class="content">最专业的软件测试培训 <a href="http://www.besttest.cn" class="link" id="link1"><!--首页--></a>, <a href="http://www.besttest.cn/page/3.html" class="link" id="link2">BestTest性能测试</a> and <a href="http://www.besttest.cn/page/47.html" class="link" id="link3" target="_blank">BestTest自动化测试</a>; 课程详情请点击上面的链接.</p> <p class="content">.这是广告植入.</p> <p class="title">BestTest is best</p> </div> </body> </html> """ #解析html的3种方式 doc = PyQuery(url='http://www.nnzhp.cn') #指定url doc2 = PyQuery(html) #指定html字符串 doc3 = PyQuery(filename='index.html') #指定文件 print(doc) print(doc2) print(doc3) |
css选择器
css在bs模块里面也用过,用法差不多。具体如下
1 2 3 4 5 6 7 8 | # css选择器 print(doc2('.link')) #通过class print(doc2('#link1')) #通过id print(doc2('.content,#link1')) #找到所有class为content和id为link1的 print(doc2('.content #link1')) #在content下面找到id为link1的元素 print(doc2('a'))#找到所有的a标签 print(doc2('[href]'))#找到所有带有href属性的元素 print(doc2('a[target=_blank]')#找到a标签下面target为_blank的 |
常用方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | eq方法,获取第几个元素 a_tags = doc2('a') print(a_tags.eq(0))#a标签里面第一个 print(a_tags.eq(1))#a标签里面第二个 # items() #如果找到多个元素的话,想循环取元素的话,就得用.items()方法,items就是为了循环用的 a_tag = doc2('a') for a in a_tag.items(): print(a.text()) # text() 、html() #text()方法是获取元素里面的文字的,html()是获取元素的html a=doc2('.content') print(a.html()) #html格式的 print(a.text()) #只有里面的文字 #find方法,查找元素 print(doc2.find('p').find('a'))#从所有的p标签里面找到a标签 print(doc2.find('p'))#找到所有的p标签 print(doc2.find('.content'))#找到所有class为content的 #filter方法,用来筛选 print(doc2.find('a').filter('#link1')) #先找到a标签,然后从a标签里面筛选出来id为link1的 #attr方法,获取属性 print(doc2('#link1').attr(('href')))#获取id为link1的href的属性值 |