### pyquery的介绍和使用

## 测试文本
text = '''
<html><head><title>there is money</title></head>
<body>
<p class="title" name="dmr"><b>there is money</b>contents</p>
<p class="money">good good study, day day up
<a href="https://www.baidu.com/1" class="error" id="l1"><span><!-- 1 --></span></a>,
<a href="https://www.baidu.com/2" class="error ed2" id="l2"><span>2</span></a> and
<a href="https://www.baidu.com/3" class="error" id="l3">3</a>;
66666666666
</p>
<p class='body'>...</p>
'''

1. pyquery对象初始化,html字符串,url,file皆可

## pyquery对象初始化,html字符串,url,file皆可
from pyquery import PyQuery as pq
import requests # html字符串初始化
doc = pq(text)
print(doc('a'))
# url初始化
doc = pq(requests.get('https://www.baidu.com').text)
print(doc('title'))
# 读取文件内容初始化,编码格式为GBK,当有不可识别字符时会报错,可通过open指定编码格式为utf-8来解决
# doc = pq(filename='text')
# print(doc('li'))

2. 基本CSS选择器

## 基本CSS选择器
from pyquery import PyQuery as pq doc = pq(text)
print(type(doc))
print(doc('.money a'))
print(doc('.money #l1'))
'''
输出内容:
<class 'pyquery.pyquery.PyQuery'>
<a href="https://www.baidu.com/1" class="error" id="l1"><span><!-- 1 --></span></a>,
<a href="https://www.baidu.com/2" class="error" id="l2"><span>2</span></a> and
<a href="https://www.baidu.com/3" class="error" id="l3">3</a>;
66666666666 <a href="https://www.baidu.com/1" class="error" id="l1"><span><!-- 1 --></span></a>,
'''

输出内容

3. 查找节点,返回一个PyQuery对象,当匹配到多个节点时,PyQuery对象值为多个节点的字符串整合

## 查找节点,返回一个PyQuery对象,当匹配到多个节点时,PyQuery对象值为多个节点的字符串整合
from pyquery import PyQuery as pq doc = pq(text)
items = doc('p')
print(items)
print(type(items))
# 查找子节点
print(items.children('#l2'))
print('--------------------分隔符------------------')
# 查找父节点
print(items.parent())
print('--------------------分隔符------------------')
print(items.parents('html'))
print('--------------------分隔符------------------')
## 查找兄弟节点
print(items('#l2').siblings())
'''
输出内容:
<p class="title" name="dmr"><b>there is money</b></p>
<p class="money">good good study, day day up
<a href="https://www.baidu.com/1" class="error" id="l1"><span><!-- 1 --></span></a>,
<a href="https://www.baidu.com/2" class="error" id="l2"><span>2</span></a> and
<a href="https://www.baidu.com/3" class="error" id="l3">3</a>;
66666666666
</p>
<p class="body">...</p> <class 'pyquery.pyquery.PyQuery'>
<a href="https://www.baidu.com/2" class="error" id="l2"><span>2</span></a> and --------------------分隔符------------------
<body>
<p class="title" name="dmr"><b>there is money</b></p>
<p class="money">good good study, day day up
<a href="https://www.baidu.com/1" class="error" id="l1"><span><!-- 1 --></span></a>,
<a href="https://www.baidu.com/2" class="error" id="l2"><span>2</span></a> and
<a href="https://www.baidu.com/3" class="error" id="l3">3</a>;
66666666666
</p>
<p class="body">...</p>
</body>
--------------------分隔符------------------
<html><head><title>there is money</title></head>
<body>
<p class="title" name="dmr"><b>there is money</b></p>
<p class="money">good good study, day day up
<a href="https://www.baidu.com/1" class="error" id="l1"><span><!-- 1 --></span></a>,
<a href="https://www.baidu.com/2" class="error" id="l2"><span>2</span></a> and
<a href="https://www.baidu.com/3" class="error" id="l3">3</a>;
66666666666
</p>
<p class="body">...</p>
</body></html>
--------------------分隔符------------------
<a href="https://www.baidu.com/1" class="error" id="l1"><span><!-- 1 --></span></a>,
<a href="https://www.baidu.com/3" class="error" id="l3">3</a>;
66666666666
'''

输出内容

4. 遍历,通过PyQuery对象的items方法可以把匹配到多个节点的PyQuery对象构造成一个生成器

## 遍历,通过PyQuery对象的items方法可以把匹配到多个节点的PyQuery对象构造成一个生成器
from pyquery import PyQuery as pq doc = pq(doc)
print(doc('a'))
items = doc('a').items()
print(type(items))
for i, item in enumerate(items):
print(i, item, type(item))
'''
输出内容:
<a href="https://www.baidu.com/1" class="error" id="l1"><span><!-- 1 --></span></a>,
<a href="https://www.baidu.com/2" class="error" id="l2"><span>2</span></a> and
<a href="https://www.baidu.com/3" class="error" id="l3">3</a>;
66666666666 <class 'generator'>
0 <a href="https://www.baidu.com/1" class="error" id="l1"><span><!-- 1 --></span></a>,
<class 'pyquery.pyquery.PyQuery'>
1 <a href="https://www.baidu.com/2" class="error" id="l2"><span>2</span></a> and
<class 'pyquery.pyquery.PyQuery'>
2 <a href="https://www.baidu.com/3" class="error" id="l3">3</a>;
66666666666
<class 'pyquery.pyquery.PyQuery'>
'''

输出内容

5. 获取属性和文本

## 获取属性和文本
from pyquery import PyQuery as pq doc = pq(doc)
# 获取属性,当多个节点时,同上,用items方法构造生成器然后进行遍历输出
a = doc('.error.ed2')
print(a, type(a))
print(a.attr('href'))
print(a.attr.href) '''
输出结果:
<a href="https://www.baidu.com/2" class="error ed2" id="l2"><span>2</span></a> and
<class 'pyquery.pyquery.PyQuery'>
https://www.baidu.com/2
https://www.baidu.com/2
''' ## 获取文本
from pyquery import PyQuery as pq doc = pq(text)
print(doc('a.error'))
# 第一个a节点文本内容为注释内容,所以不输出
print(doc('a.error').text()) # 只输出节点内的文本内容
print(doc('a.error').html()) # 输出节点内的内容,包含标签内容
items = doc('a.error').items()
for i, item in enumerate(items):
print(i, type(item), item.text())
print(i, type(item), item.html()) '''
输出内容:
<a href="https://www.baidu.com/1" class="error" id="l1"><span><!-- 1 --></span></a>,
<a href="https://www.baidu.com/2" class="error ed2" id="l2"><span>2</span></a> and
<a href="https://www.baidu.com/3" class="error" id="l3">3</a>;
66666666666 2 3
<span><!-- 1 --></span>
0 <class 'pyquery.pyquery.PyQuery'>
0 <class 'pyquery.pyquery.PyQuery'> <span><!-- 1 --></span>
1 <class 'pyquery.pyquery.PyQuery'> 2
1 <class 'pyquery.pyquery.PyQuery'> <span>2</span>
2 <class 'pyquery.pyquery.PyQuery'> 3
2 <class 'pyquery.pyquery.PyQuery'> 3
'''

6. 节点操作

## 节点操作
from pyquery import PyQuery as pq doc = pq(text)
p = doc('.title')

# addClass和removeClass,增加或减少class属性值
p.add_class('admin')
print(p.attr.class_)
p.removeClass('title')
print(p.attr('class'))

# attr、text和html,修改属性、文本、HTML文本内容
print(p.attr.name)
print(p.text())
print(p.html())
p.attr('name', 'test')
print(p.attr.name)
p.text('change text')
print(p.text())
p.html('<span>change html</span>')
print(p.html())

# remove,移除节点
doc = pq(text)
p = doc('.title')
print(p.html())
p.remove('b')
print(p.html())
'''
输出内容:
title admin
admin
dmr
there is money
<b>there is money</b>
test
change text
<span>change html</span>
<b>there is money</b>contents
contents
'''

输出内容

7. 伪类编辑器

# 伪类编辑器
from pyquery import PyQuery as pq doc = pq(text)
# 第一个a节点
a = doc('a:first-child')
print(a)
# 最后一个a节点
a = doc('a:last-child')
print(a)
# 第二个a节点
a = doc('a:nth-child(2)')
print(a)
# 第0个节点之后的节点
a = doc('a:gt(0)')
print(a)
# 偶数位置的节点
a = doc('a:nth-child(2n)')
print(a)
# 文本内容包含3的节点
a = doc('a:contains("3")')
print(a) '''
输出内容:
<a href="https://www.baidu.com/1" class="error" id="l1"><span><!-- 1 --></span></a>, <a href="https://www.baidu.com/3" class="error" id="l3">3</a>;
66666666666 <a href="https://www.baidu.com/2" class="error ed2" id="l2"><span>2</span></a> and <a href="https://www.baidu.com/2" class="error ed2" id="l2"><span>2</span></a> and
<a href="https://www.baidu.com/3" class="error" id="l3">3</a>;
66666666666 <a href="https://www.baidu.com/2" class="error ed2" id="l2"><span>2</span></a> and <a href="https://www.baidu.com/3" class="error" id="l3">3</a>;
66666666666
'''

pyquery解析库的介绍和使用的更多相关文章

  1. 【Python爬虫】PyQuery解析库

    PyQuery解析库 阅读目录 初始化 基本CSS选择器 查找元素 遍历 获取信息 DOM操作 伪类选择器 PyQuery 是 Python 仿照 jQuery 的严格实现.语法与 jQuery 几乎 ...

  2. Python3 BeautifulSoup和Pyquery解析库随笔

    BeautifuSoup和Pyquery解析库方法比较 1.对象初始化: BeautifySoup库: from bs4 import BeautifulSoup html = 'html strin ...

  3. BeautifulSoup解析库的介绍和使用

    ### BeautifulSoup解析库的介绍和使用 ### 三大选择器:节点选择器,方法选择器,CSS选择器 ### 使用建议:方法选择器 > CSS选择器 > 节点选择器 ## 测试文 ...

  4. 第四节:Web爬虫之pyquery解析库

    PyQuery库也是一个非常强大又灵活的网页解析库,如果你有前端开发经验的,都应该接触过jQuery,那么PyQuery就是你非常绝佳的选择,PyQuery 是 Python 仿照 jQuery 的严 ...

  5. pyquery解析库

    这一篇整理一下pyquery这个解析库.还是菜,若有错误的地方,欢迎大家随时指正.......(come on.......) pyquery:是一个css选择器,再使用时,也需要传入HTML文本来初 ...

  6. Pyquery解析库的安装和使用

    Pyquery同样是一个强大的网页解析工具,它提供了和jQuery类似的语法来解析HTML文档,支持CSS选择器,使用非常方便.GitHub:https://github.com/gawel/pyqu ...

  7. xpath beautiful pyquery三种解析库

    这两天看了一下python常用的三种解析库,写篇随笔,整理一下思路.太菜了,若有错误的地方,欢迎大家随时指正.......(conme on.......) 爬取网页数据一般会经过 获取信息-> ...

  8. Python爬虫3大解析库使用导航

    1. Xpath解析库 2. BeautifulSoup解析库 3. PyQuery解析库

  9. pyquery 的用法 --爬虫解析库

    如果你对Web有所涉及,如果你比较喜欢用CSS选择器,如果你对jQuery有所了解,那么这里有一个更适合你的解析库--pyquery. 接下来,我们就来感受一下pyquery的强大之处. 1. 准备工 ...

随机推荐

  1. pyinstaller和wordcloud和jieba的使用案列

    一.pyinstaller库 1.简介 pyinstaller库:将脚本程序转变为可执行(.exe)格式的第三方库 注意:需要在.py文件所在目录进行以下命令,图标扩展名是.ico 2.格式: pyi ...

  2. 2021.9.25考试总结[NOIP模拟61]

    终于有点阳间题了然而挂了60pts 哈哈 T1 交通 类似简单题,限制看似很复杂,但不难发现当确定一条边是否被删后会产生裙带关系,很多边会跟着自动被确定是否被删. 仔细观察可以得出这种关系会构成偶环结 ...

  3. uvm Register Access Methods(16)

    转载: 译文:https://blog.csdn.net/zhajio/article/details/80731435 原文:http://cluelogic.com/2013/02/uvm-tut ...

  4. hdu 1506 Largest Rectangle in a Histogram(DP)

    题意: 有一个柱状图,有N条柱子.每一条柱子宽度都为1,长度为h1...hN. 在这N条柱子所构成的区域中找到一个最大面积,每平方米3块钱,问最多赚多少钱. 输入: 1<=N<=10000 ...

  5. JAVA笔记__窗体类/Panel类/Toolkit类

    /** * 窗体类 */ public class Main { public static void main(String[] args) { MyFrame m1 = new MyFrame() ...

  6. vue三级路由显示+面包屑

    问题一:如何让三级路由内容显示显示在一级路由页面 可以说是我点级二级路由导航的时候是不发生跳转的,但还要去动态的生成面包屑 const routes = [{ path: '/', name: 'Ho ...

  7. AC-DCN ESXi

    传统IT架构中的网络,根据业务需求部署上线以后,如果业务需求发生变动,重新修改相应网络设备(路由器.交换机.防火墙)上的配置是一件非常繁琐的事情.在互联网/移动互联网瞬息万变的业务环境下,网络的高稳定 ...

  8. Spring Cloud Gateway 整合阿里 Sentinel网关限流实战!

    大家好,我是不才陈某~ 这是<Spring Cloud 进阶>第八篇文章,往期文章如下: 五十五张图告诉你微服务的灵魂摆渡者Nacos究竟有多强? openFeign夺命连环9问,这谁受得 ...

  9. Matlab 中 arburg 函数的理解与实际使用方法

    1. 理解 1.1 Matlab 帮助: a = arburg(x,p)返回与输入数组x的p阶模型相对应的归一化自回归(AR)参数. 如果x是一个向量,则输出数组a是一个行向量. 如果x是矩阵,则参数 ...

  10. 【java+selenium3】自动化基础小结+selenium原理揭秘 (十七)

    一.自动化实现原理 1.创建驱动对象   (1) 首先加载浏览器安装目录下的exe文件 (2) 其次是加载可执行驱动的exe文件,监听等待客户端发送的web service请求. 底层原理如下: 1. ...