2025年3月28日 星期五 甲辰(龙)年 月廿七 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

python爬虫8--pyquery解析库

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

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三者对比

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