您当前的位置:首页 > 计算机 > 编程开发 > Python

python爬虫8--pyquery解析库

时间:05-19来源:作者:点击数:

1.pyquery介绍

pyquery优势,CSS选择器功能非常强大。

2.初始化解析

2.1字符串初始化

html = '''
<div id="container">
<ul class="list>
<li class="li li-first" name="item"><a href="link1.html"><span>first item</span></a></li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-1 active"><a href="link3.html">third item</a></li>
<li class="item-1"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
print(doc('li'))

2.2 URL初始化

from pyquery import PyQuery as pq
doc = pq(url='http://www.baidu.com/')
print(doc('title'))

#用法同下:
import requests
res = requests.get('http://www.baidu.com/')
doc = pq(res.text)
print(doc('title'))

2.3 本地文件初始化

from pyquery import PyQuery as pq
doc = pq(filename='./test.html')
print(doc('li'))

3.基本CSS选择器使用

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

4.节点查找

4.1 子节点

items = doc('.list')
print(items.find('li'))   #find()查找所有子孙节点
print(items.children('li')) #children()查找子节点
print(items.children('.li-first'))

4.2 父节点

items = doc('.list')
print(items.parent())   #parent()查找直接父节点
print(items.parents())   #parents()查找所有祖先节点
print(items.parents('#container'))

4.3 兄弟节点

items = doc('.list .item-inactive')
print(items.siblings())   #返回所有兄弟节点
print(items.siblings('.item-0'))

5.遍历

lis = doc('li').items()  #调用items()得到一个生成器,每一个li为新的PyQuery类型,可以继续查找
print(type(lis))   #<class 'pyquery.pyquery.PyQuery'>
for li in lis:
    print(li)
    print(type(li))  #<class 'pyquery.pyquery.PyQuery'>

6.获取信息

6.1 获取属性

a = doc('a')
print(a.attr('href'))   #调用attr()方法时,只返回第一个符合条件的
for item in a.items():
    print(item.attr('href'))     #遍历后可以返回所有

6.2 获取文本

a = doc('a')
print(a.text())   #获取所有a节点内的纯文本信息,中间用空格隔开,返回一个字符串格式
print(type(a.text()))   #<class 'str'>
print(a.html())   #只返回第一个a节点里的HTML文本
for item in a.items():
    print(item.html())   #需遍历得到所有HTML文本

7.节点操作

pyquery提供了一系列的方法对节点进行动态操作,如添加移除class,添加节点等。

7.1 removeClass()和addClass(),对class属性进行移除和添加

li = doc('.item-1.active')   #同一个节点的多个属性见不用空格键,否则表示向下查找
print(li)                       #<li class="item-1 active"><a href="link3.html">third item</a></li>
li.removeClass('active')
print(li)                       #<li class="item-1"><a href="link3.html">third item</a></li>
li.addClass('active')
print(li)                       #<li class="item-1 active"><a href="link3.html">third item</a></li>

7.2 attr、text和html

li = doc('.item-1.active')
print(li)                         #<li class="item-1 active"><a href="link3.html">third item</a></li>
li.attr('name','link')           #修改属性,第一个参数名为属性名称,第二个为属性值,如果不传第二个参数则为获取该属性值
print(li)                         #<li class="item-1 active" name="link"><a href="link3.html">third item</a></li>
li.text('changed item')         #修改文本内容,不传参则为获取该文本内容
print(li)                          #<li class="item-1 active" name="link">changed item</li>
li.html('<span>changed item</span>')
print(li)                          #<li class="item-1 active" name="link"><span>changed item</span></li>

7.3 remove()

html ='''
<div id="container">
first
<p>second</p>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
div = doc('#container')
print(div.text())
div.find('p').remove()
print(div.text())      #只获取div的直接文本内容

其他操作方法还有append(),empty(),prepend()等,用法和jQuery用法一致。

8.伪类选择器

print(doc('li:first-child'))
print(doc('li:last-child'))
print(doc('li:nth-child(2)'))
print(doc('li:gt(3)'))
print(doc('li:nth-child(2n)'))
print(doc('li:contains(first)'))

9.BeautifulSoup,xpath和pyquery三者对比

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门