pyquery解析库
这一篇整理一下pyquery这个解析库。还是菜,若有错误的地方,欢迎大家随时指正。。。。。。。(come on.......)
pyquery:是一个css选择器,再使用时,也需要传入HTML文本来初始化一个PyQuery对象。但它的初始化方式有多种,比如直接传入字符串,传入URL,传入文件名,等等。还是先声明一下那个html字符串。
html = '''
<div id="container">
<ul class="list">
<li class="item-0">first item</li>
<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">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
<ul class="list">
<li class="item-0">first item</li>
<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">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
'''
(1)建立文档树:
字符串初始化:
from pyquery import PyQuery as pq
pq_tree = pq(html)
第一行,从pyquery里面引入PyQuery类,并起别名为pq,第二行,直接把字符串放在pq后面,这样就建立了文档树
url初始化:初始化的参数不仅可以以字符串的形式传递,还可以传入网页的URL,此时只需要指定参数为url即可。举个栗子
from pyquery import PyQuery as pq
doc = pq(url='https://www.baidu.com')
文件初始化:除了传递URL,还可以传递本地的文件名,此时将参数指定为filename即可。举个例子
from pyquery import PyQuery as pq
pq_tree = pq(html)
ul_list = pq_tree('#container .list li')
print(ul_list)
print(type(ul_list)) 输出结果如下:
<li class="item-0">first item</li>
<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">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
<li class="item-0">first item</li>
<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">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
<class 'pyquery.pyquery.PyQuery'>
第一行,用字符串的方法建立了文档树,第二行代码表示的是再这个文档树中先搜索出id属性为container 的标签,然后再找到下面class属性为list 的标签,并找出里面所有的li标签
第四行,用type查看ul_list的类型,可以看到,是一个PyQuery的对象。
(3)遍历:刚才可以观察到,pyquery的选择结果可能是多个节点,也可能是单个节点,类型都是PyQuery类型,并没有返回像Beautiful Soup那样的列表。对于多个节点的结果,我们需要遍历来获取了。遍历是使用items()方法
pq_tree = pq(html)
ul_list = pq_tree('#container .list')
for ul in ul_list.items():
print('*'*50)
print(type(ul))
print('*'*50)
li_list = ul('li')
for li in li_list.items():
print(li, end='') 输出结果如下:
**************************************************
<class 'pyquery.pyquery.PyQuery'>
**************************************************
<li class="item-0">first item</li>
<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">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
**************************************************
<class 'pyquery.pyquery.PyQuery'>
**************************************************
<li class="item-0">first item</li>
<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">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
上面的代码是遍历出li标签
第二行,利用属性选择找出了两个ul标签,第三行,再利用for循环遍历的时候,我们再ul_list后面加了items()方法,这就让ul_list变成了一个生成器,逐个得到ul节点对象。然后第五行,利用type查看ul的类型,是PyQuery类型,第七行,在ul标签里面搜索出所有的li标签,赋值给li_list对象,第八行,对li_list使用items(),遍历出每个ul标签里面的li标签。当然,你也可以直接找到ul下所有的li标签,然后运用items()方法进行遍历,像这样:
pq_tree = pq(html)
li_list = pq_tree('#container .list li')
for li in li_list.items():
print(li, end='')
(4):查找子节点,并根据属性过滤。
上面那种方法,能帮助我们获取一个节点内指定的子节点,但却无法根据属性进行guol,比如:只需要class属性为item-0的li标签。这时,我们可以用find()方法:
pq_tree = pq(html)
ul_list = pq_tree('#container .list')
li_list = ul_list.find('.item-0')
for li in li_list.items():
print(li, end='') 输出结果如下:
<li class="item-0">first item</li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
<li class="item-0">first item</li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
第二行代码,找到两个ul标签,第三行中,在ul中找到所有class属性为item-0的li标签,第四行,利用items()方法对结果进行遍历输出
(5)获取文本和属性:获取节点之后的另一个主要操作就是获取其内部的文本和属性了,此时可以调用text()方法和attrs()方法来实现。稍微改一下上面的代码
pq_tree = pq(html)
ul_list = pq_tree('#container .list')
li_list = ul_list.find('.item-0')
for li in li_list.items():
print('文本内容是:',li.text(), '\t', 'class属性是:',li.attr('class')) 输出结果是:
文本内容是: first item class属性是: item-0
文本内容是: third item class属性是: item-0 active
文本内容是: fifth item class属性是: item-0
文本内容是: first item class属性是: item-0
文本内容是: third item class属性是: item-0 active
文本内容是: fifth item class属性是: item-0
有很多没说到的地方,应该也有一些我没发觉的错误,欢迎大家随时指正。。。。参考文章:https://cuiqingcai.com/5551.html
******************************不积跬步,无以至千里。******************************
pyquery解析库的更多相关文章
- 【Python爬虫】PyQuery解析库
PyQuery解析库 阅读目录 初始化 基本CSS选择器 查找元素 遍历 获取信息 DOM操作 伪类选择器 PyQuery 是 Python 仿照 jQuery 的严格实现.语法与 jQuery 几乎 ...
- Python3 BeautifulSoup和Pyquery解析库随笔
BeautifuSoup和Pyquery解析库方法比较 1.对象初始化: BeautifySoup库: from bs4 import BeautifulSoup html = 'html strin ...
- 第四节:Web爬虫之pyquery解析库
PyQuery库也是一个非常强大又灵活的网页解析库,如果你有前端开发经验的,都应该接触过jQuery,那么PyQuery就是你非常绝佳的选择,PyQuery 是 Python 仿照 jQuery 的严 ...
- Pyquery解析库的安装和使用
Pyquery同样是一个强大的网页解析工具,它提供了和jQuery类似的语法来解析HTML文档,支持CSS选择器,使用非常方便.GitHub:https://github.com/gawel/pyqu ...
- pyquery解析库的介绍和使用
### pyquery的介绍和使用 ## 测试文本 text = ''' <html><head><title>there is money</title&g ...
- xpath beautiful pyquery三种解析库
这两天看了一下python常用的三种解析库,写篇随笔,整理一下思路.太菜了,若有错误的地方,欢迎大家随时指正.......(conme on.......) 爬取网页数据一般会经过 获取信息-> ...
- Python爬虫3大解析库使用导航
1. Xpath解析库 2. BeautifulSoup解析库 3. PyQuery解析库
- pyquery 的用法 --爬虫解析库
如果你对Web有所涉及,如果你比较喜欢用CSS选择器,如果你对jQuery有所了解,那么这里有一个更适合你的解析库--pyquery. 接下来,我们就来感受一下pyquery的强大之处. 1. 准备工 ...
- Python爬虫【解析库之pyquery】
该库跟jQuery的使用方法基本一样 http://pyquery.readthedocs.io/ 官方文档 解析库的安装 pip3 install pyquery 初始化 1.字符串初始化 htm ...
随机推荐
- 如果不配https访问权限,可以用 .htaccess 搞定
.htaccess 此文件存放在,网站程序根目录下# 只允许通过域名形式访问 RewriteEngine On RewriteBase / rewritecond %{http_host} !^www ...
- CentOS7 忘记Root密码解决方法
1- 在启动grub菜单,选择编辑选项启动 2 - 按键盘e键,来进入编辑界面 3 - 找到Linux 16的那一行,将ro改为rw init=/sysroot/bin/sh 4 - 现在 ...
- 《Web Development with Go》写一个简单的LoggingMiddleware
main.go package main import ( "fmt" "log" "net/http" "time" ...
- sed命令总结
目录 1.概述 2.查 1.打印整行(一或多) 2.正则打印包含关键字的行 2.增 3.删 4.改 5.后向引用 6.结合 7.练习 我叫张贺,贪财好色.一名合格的LINUX运维工程师,专注于LINU ...
- POJ 2386 Lake Counting 题解《挑战程序设计竞赛》
地址 http://poj.org/problem?id=2386 <挑战程序设计竞赛>习题 题目描述Description Due to recent rains, water has ...
- CF1278B-A and B-(简单数学)
https://vjudge.net/problem/CodeForces-1278B 题意:给两个数a和b,有一种操作:第i次操作任选其中一个数加或减i:如第1次操作可以任选其中一个数加1或减1,第 ...
- Note | 用Hugo搭建博客并部署到GitHub Pages
目录 1. 本地搭建 1.1 安装Hugo 1.2 创建站点 1.3 新建页面和文章 1.4 使用主题 1.5 修改配置文件 1.6 预览 2. 部署 之前担心过现有博客平台(如博客园,CSDN)突然 ...
- iOS: 本地通知的前后变化(iOS10)
一.介绍 通知和推送是应用程序中很重要的组成部分.本地通知可以为应用程序注册一些定时任务,例如闹钟.定时提醒等.远程推送则更强大,提供了一种通过服务端主动推送消息到客户端的方式,服务端可以更加灵活地 ...
- 实例调用(__call__())
任何类,只需要定义一个__call__()方法,就可直接对实例进行调用 对实例进行直接调用就好比对一个函数进行调用一样 __call__()还可定义参数,所以调用完全可以把对象看成函数,把函数看成对象 ...
- 黄聪:不使用 webpack,vuejs 异步加载模板
webpack 打包不会玩,整了这么个小玩具 一段 vue 绑定代码,关键点在 gmallComponent 1.异步加载外部 vue 文件(非 .vue) 2.按一定规则拆分 template.sc ...