### 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. boost编译中的细节问题

    原文链接 http://www.cppblog.com/Robertxiao/archive/2013/01/06/197022.html 生成文件命名规则:boost中有许多库,有的库需要编译.而有 ...

  2. 海思 core 电压动态调整

    http://www.eda365.com/forum.php?mod=viewthread&tid=108620&_dsign=5bee4dcb http://www.eda365. ...

  3. linux安装后ping不通局域网其他主机的解决方式

    安装了linux后尝试进行机器间的相互通讯,发现自己虚拟机并不能查看ip地址,也不能够ping通任何一台局域网内的主机 上网查了一下发现是网卡并没有打开,需要进行如下配置 查看ls 一下/etc/sy ...

  4. Ubuntu 16.04 下 旋转显示器屏幕 竖屏显示

    xrandr -o left $ xrandr -o left 向左旋转90度 $ xrandr -o right 向右旋转90度 $ xrandr -o inverted 上下翻转 $ xrandr ...

  5. 什么是 Webhook?

    1. 什么是 Webhook? Webhook 是一个 API 概念,是微服务 API 的使用范式之一,也被成为反向 API,即前端不主动发送请求,完全由后端推送:举个常用例子,比如你的好友发了一条朋 ...

  6. ELK集群之elasticsearch(3)

    Elasticsearch-基础介绍及索引原理分析 介绍 Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引 ...

  7. 大数据SQL中的Join谓词下推,真的那么难懂?

    听到谓词下推这个词,是不是觉得很高大上,找点资料看了半天才能搞懂概念和思想,借这个机会好好学习一下吧. 引用范欣欣大佬的博客中写道,以前经常满大街听到谓词下推,然而对谓词下推却总感觉懵懵懂懂,并不明白 ...

  8. electron获取不到remote

    electron获取不到remote 问题 // 渲染进程 let remote = require('electron').remote console.log(remote) // undefin ...

  9. PTA 7-2 哈夫曼编码 (30分)

    PTA 7-2 哈夫曼编码 (30分) 给定一段文字,如果我们统计出字母出现的频率,是可以根据哈夫曼算法给出一套编码,使得用此编码压缩原文可以得到最短的编码总长.然而哈夫曼编码并不是唯一的.例如对字符 ...

  10. Java线程状态及同步锁

    线程的生命历程 线程的五大状态 创建状态:简而言之,当创建线程对象的代码出现的时候,此时线程就进入了创建状态.这时候的线程只是行代码而已.只有调用线程的start()方法时,线程的状态才会改变,进入就 ...