解析库之pyquery

Posted on 2022-10-11 11:23  风云伴日斜  阅读(102)  评论(0编辑  收藏  举报

pyquery.PyQuery

PyQuery有三种初始化的方式

  1. 提供一个html的字符串
  2. 提供一个url,pyquery使用requests.get(url).text方法获取,获取html的字符串
  3. 提供一个本地文件路径PyQuery(filename=’’)

find()

PyQuery对象可以直接被调用,传入css选择器即可,也可以调用PyQuery的find()方法,实现相同的效果,两种方式的查找范围都是当前tag的所有子孙标签

children()

作用与find()相同,查找范围仅限于当前tag的子标签

parent()

返回直接祖先结点

parents()

返回所有祖先结点,仍然是PyQuery对象,若想对所有祖先结点做出筛选,在parents()返回的对象上继续使用css选择器即可

siblings()

返回兄弟结点,可以继续使用css选择器

items()

当想要遍历PyQuery对象时,调用items方法返回一个生成器

attr()

pq.attr(‘class’) 可以获取class属性

也可以使用pq.attr.class_ 有个下划线

如果选中多个元素调用attr只会返回第一个元素的attr

text()

获取内部文本信息,会忽略内部的标签,但是会保留内部标签的文本信息

对打印为下图的pyquery对象使用text()方法

返回third item

<li class="item-0 active">12313<a href="link3.html"><span class="bold">third item</span></a></li>

会返回12313third item

如果css选择器选取了多个标签,text()方法会返回多个标签的文本信息

注:bs4中使用tag.string返回的文本信息同样会忽略掉内部标签保留文本信息,但是如果当前标签有文本信息,内部标签也有文本信息,会返回None;lxml的text()方法只会返回本标签的文本信息,内容标签及文本信息会全部被忽略。

html()

返回内部文本信息,不会忽略内部标签

选取多个元素时只会返回第一个的html内容

结点操作

addClass()和removeClass()

动态修改tag的class属性

attr(s1,s2)

修改s1属性为s2

text(s),html(s)

修改文本或者html为s

remove()

在tag上使用remove会删除掉当前结点

当选中多个元素时,会删除所有的元素

伪类选择器

第一个、最后一个,第二个,第三个及之后,偶数个,文本包含second的li结点。