ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

解析库的使用

2022-08-13 08:31:40  阅读:124  来源: 互联网

标签:pq name doc item html 使用 解析 节点


ch4. 解析库的使用

  • 使用 Xpath
  • 使用pyquery

使用pyquery

1. 基本方法

from pyquery import PyQuery as pq
doc = pq(html)
print(doc)

PyQuery对象可以接受的参数有

  • html格式的字符串
  • html文件
  • 指定参数url = '...'

PyQuery对象用于后续的进行选择、筛选等操作

2. CSS选择器

用于解析的html格式的字符串html

html = '''
<div class = "wrap">
<div id = "container">
<ul class = "list">
<li class = "item-1"><a href = "link2.html">second item</a></li?
<li class = "item-0 active"><a href = "link3.html"><span class = "bold">third item</span></a></li>
<li class = "item-1 active"><a href = link4.html"><forth item</a></li>
<li class = "item-0"><a href = "link5.html">fifth item</a></li>
</ul>
</div>
</div>
'''	
from pyquery import PyQuery as pq
doc = pq(html)
doc('#container .list li')
print(doc)
  • 用pq对象初始化后,通过在单引号中输入筛选条件来完成在pq文件中的筛选

  • 这种筛选用法为css选择器,选择条件间以空格分开

  • #name表示id为name,.name表示class为name,name表示选择name节点

  • 此时doc对象仍为pq类型

  • 选择器的并列于先后关系

    ​ 以doc('.list .item-0.active')为例

    • 先选择了class = "list"的节点,之后再进行一次筛选,选择了class = "item-0 active"的节点
    • 也即是说空格前后在筛选时有着先后的顺序关系,未以空格分割开的同类条件有着并列关系。

3. 查找结点的函数

  • pq.find():在所有子孙节点中查找
  • pq.children():在所有子节点中查找
  • pq.parent():在该结点的父结点中查找
  • pq.parents():在该结点的祖先节点中查找

其中括号中传入的参数仍为CSS选择器的语法,即仍为:doc('#container .list li')

4. 结合选择器进行遍历

在查询结果不止一条时,需要通过遍历来完成更高的操作要求。

doc = pq(html)
lis = doc('li').items()
for aNode in lis:
    print(aNode)
  • 对查询结果调用了items()方法,这时类型会由PyQuery转变为迭代对象generator,可以使用for语句来进行操作

5. 对查询结果进行进一步的操作

​ 可以进行的操作包括

  • 获取节点的属性、文本
  • 删除、改变或添加节点的属性、文本
  • 移除某个节点
1. 获取属性
  • pq.attr('attrName')

    doc = pq(html)
    a = doc('.item-0.active a')
    print(a.attr('href')) 
    print(a.attr.href) #另一种写法
    

    该代码段选中的节点如下:<a href="link3.html"><span class="bold">third item</span></a>

    最后输出结果为:link3.html,输出了对应的a节点中的超链接的内容。

    • 特别注意:在PyQuery查询对象结果中有多个时,该方法只会输出第一个节点中的内容。若要实现多个节点的内容均输出,需要结合上一届的迭代来完成。
2. 获取文本
  • pq.text()

    doc = pq(html)
    a = doc('.item-0.active a')
    print(a.text())	
    

    该代码段选中的节点如下:<a href="link3.html"><span class="bold">third item</span></a>

    最后输出的结果为:third item,输出了节点的纯文字内容。

  • pq.html()

    若选择该方法,则返回的为该节点的全部html语句,即输出结果为:<a href="link3.html"><span class="bold">third item</span></a>,但此时的类型为字符串。

  • 特别注意

    若得到的查询结果为多个节点

    • .text()方法不需要遍历就可以取得
    • .html()方法需要遍历才可以取得
3. 移除/添加class
  • pq.removeClass('className'):移除类名

  • pq.addClass('className'):添加类名

    使用这些方法时,需要先选定要修改的节点

4. 对节点内容修改、添加与删除
  • pq.attr('name','content): 若name为已经存在的属性名称,则进行修改操作;若name尚不存在,则表示添加新属性
  • pq.text('content'): 将该节点的纯文本内容改作content
  • pq.html('content'):将该节点的html内容改为content
  • pq.remove(): 需要先选中某个节点,执行后会将该节点删除。

标签:pq,name,doc,item,html,使用,解析,节点
来源: https://www.cnblogs.com/dysonxxxxx/p/16581937.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有