pyquery库的使用
pyquery的强大之处就在于它有强大的CSS选择器,要初始化一个pyquery对象,首先需要传入一个HTML文本,它的初始化方式有多种,比如传入字符串、URL、文件名等。
字符串初始化:
我们先来看一个例子:
from pyquery import PyQuery as pq#引入PyQuery对象
html = '''
<div class="global-nav-items"><ul><li class="on"><a href="https://www.douban.com" data-moreurl-dict="{"from":"top-nav-click-main","uid":"0"}">豆瓣</a></li><li class=""><a href="https://book.douban.com" target="_blank" data-moreurl-dict="{"from":"top-nav-click-book","uid":"0"}">读书</a></li><li class=""><a href="https://movie.douban.com" target="_blank" data-moreurl-dict="{"from":"top-nav-click-movie","uid":"0"}">电影</a></li><li class=""><a href="https://music.douban.com" target="_blank" data-moreurl-dict="{"from":"top-nav-click-music","uid":"0"}">音乐</a></li><li class=""><a href="https://www.douban.com/location" target="_blank" data-moreurl-dict="{"from":"top-nav-click-location","uid":"0"}">同城</a></li><li class=""><a href="https://www.douban.com/group" target="_blank" data-moreurl-dict="{"from":"top-nav-click-group","uid":"0"}">小组</a></li><li class=""><a href="https://read.douban.com/?dcs=top-nav&dcm=douban" target="_blank" data-moreurl-dict="{"from":"top-nav-click-read","uid":"0"}">阅读</a></li><li class=""><a href="https://douban.fm/?from_=shire_top_nav" target="_blank" data-moreurl-dict="{"from":"top-nav-click-fm","uid":"0"}">FM</a></li></ul>
</div>
'''
doc = pq(html)
print(doc('li'))#将初始化好的对象传入CSS选择器获取li标签
<li class="on"><a href="https://www.douban.com" data-moreurl-dict="{"from":"top-nav-click-main","uid":"0"}">豆瓣</a></li><li class=""><a href="https://book.douban.com" target="_blank" data-moreurl-dict="{"from":"top-nav-click-book","uid":"0"}">读书</a></li><li class=""><a href="https://movie.douban.com" target="_blank" data-moreurl-dict="{"from":"top-nav-click-movie","uid":"0"}">电影</a></li><li class=""><a href="https://music.douban.com" target="_blank" data-moreurl-dict="{"from":"top-nav-click-music","uid":"0"}">音乐</a></li><li class=""><a href="https://www.douban.com/location" target="_blank" data-moreurl-dict="{"from":"top-nav-click-location","uid":"0"}">同城</a></li><li class=""><a href="https://www.douban.com/group" target="_blank" data-moreurl-dict="{"from":"top-nav-click-group","uid":"0"}">小组</a></li><li class=""><a href="https://read.douban.com/?dcs=top-nav&dcm=douban" target="_blank" data-moreurl-dict="{"from":"top-nav-click-read","uid":"0"}">阅读</a></li><li class=""><a href="https://douban.fm/?from_=shire_top_nav" target="_blank" data-moreurl-dict="{"from":"top-nav-click-fm","uid":"0"}">FM</a></li>
URL初始化:
当初始化的参数为URL时,需要指定参数为url:
from pyquery import PyQuery as pq
doc = pq(url='https://movie.douban.com/cinema/nowplaying/chengdu/')
print(doc('title'))
<title>成都 - 在线购票&影讯
</title>
PyQuery对象会首先请求这个url,然后用得到的html内容完成初始化,这相当于用网页的源代码以字符串的形式传递给PyQuery类来初始化,下面的写法也是相同的:
from pyquery import PyQuery as pq
import requests
doc = pq(requests.get('https://movie.douban.com/cinema/nowplaying/chengdu/').text)
print(doc('title'))
除了传递url以外,还可以传递本地的文件名,只需要将参数指定为filename即可:
from pyquery import PyQuery as pq
doc = pq(filename='rr.html')
print(doc('img'))
当然文件必须时html文件,这样的话会先读取本地的文件内容,然后将文件内容以字符串的形式传递给PyQuery类来初始化。
CSS选择器
先来看一个例子:
from pyquery import PyQuery as pq#引入PyQuery对象
html = '''
<div id="items"><ul class="list"><li class="on"><a href="https://www.douban.com" data-moreurl-dict="{"from":"top-nav-click-main","uid":"0"}">豆瓣</a></li><li class=""><a href="https://book.douban.com" target="_blank" data-moreurl-dict="{"from":"top-nav-click-book","uid":"0"}">读书</a></li></ul>
</div>
'''
doc = pq(html)
print(doc('#items .list li'))
print(type(doc('#items .list li')))
<li class="on"><a href="https://www.douban.com" data-moreurl-dict="{"from":"top-nav-click-main","uid":"0"}">豆瓣</a></li><li class=""><a href="https://book.douban.com" target="_blank" data-moreurl-dict="{"from":"top-nav-click-book","uid":"0"}">读书</a></li><class 'pyquery.pyquery.PyQuery'>
这里我们初始化了PyQuery对象以后传入一个CSS选择器:#items .list li它的意思是先选取id为items的节点,然后再选取其内部class为list的节点内部的所有li结点。
查找结点
使用find()方法,传入CSS选择器可以查找子节点:
from pyquery import PyQuery as pq#引入PyQuery对象
html = '''
<div id="items"><ul class="list"><li class="on"><a href="https://www.douban.com" data-moreurl-dict="{"from":"top-nav-click-main","uid":"0"}">豆瓣</a></li><li class=""><a href="https://book.douban.com" target="_blank" data-moreurl-dict="{"from":"top-nav-click-book","uid":"0"}">读书</a></li></ul>
</div>
'''
doc = pq(html)
items = doc('.list')
print(items)
print(type(items))
lis = items.find('li')
print(lis)
print(type(lis))
<ul class="list"><li class="on"><a href="https://www.douban.com" data-moreurl-dict="{"from":"top-nav-click-main","uid":"0"}">豆瓣</a></li><li class=""><a href="https://book.douban.com" target="_blank" data-moreurl-dict="{"from":"top-nav-click-book","uid":"0"}">读书</a></li></ul><class 'pyquery.pyquery.PyQuery'>
<li class="on"><a href="https://www.douban.com" data-moreurl-dict="{"from":"top-nav-click-main","uid":"0"}">豆瓣</a></li><li class=""><a href="https://book.douban.com" target="_blank" data-moreurl-dict="{"from":"top-nav-click-book","uid":"0"}">读书</a></li><class 'pyquery.pyquery.PyQuery'>
这里首先选取class为list的节点,然后调用find()方法,传入css选择器,选取其内部的li节点,这时find()方法就会将所有符合条件的子节点选出来。find()方法会将所有符合条件的子孙节点找出来,如果要选则直接子节点就可以用children()方法:
from pyquery import PyQuery as pq#引入PyQuery对象
doc = pq(html)
items = doc('.list')
lis = items.children()
print(lis)
print(type(lis))
<li class="on"><a href="https://www.douban.com" data-moreurl-dict="{"from":"top-nav-click-main","uid":"0"}">豆瓣</a></li><li class=""><a href="https://book.douban.com" target="_blank" data-moreurl-dict="{"from":"top-nav-click-book","uid":"0"}">读书</a></li><class 'pyquery.pyquery.PyQuery'>
如果要所有子节点中符合条件的节点,比如想筛选出子节点中class为on的节点可以向children()方法传入CSS选择器.on:
lis = items.children('.on')
print(lis)
<li class="on"><a href="https://www.douban.com" data-moreurl-dict="{"from":"top-nav-click-main","uid":"0"}">豆瓣</a></li>
如果想要获取父节点可以用parents()方法:
from pyquery import PyQuery as pq#引入PyQuery对象
doc = pq(html)
items = doc('.list')
lis = items.parent()
print(lis)
print(type(lis))
<div id="items"><ul class="list"><li class="on"><a href="https://www.douban.com" data-moreurl-dict="{"from":"top-nav-click-main","uid":"0"}">豆瓣</a></li><li class=""><a href="https://book.douban.com" target="_blank" data-moreurl-dict="{"from":"top-nav-click-book","uid":"0"}">读书</a></li></ul>
</div>
<class 'pyquery.pyquery.PyQuery'>
这里的父节点时直接父节点,如果想要查找祖先节点可以用parents()方法。
如果想要筛选某个祖先节点的话可以用CSS选择器:
parent = items.parents('.wrap')
这里筛选出class为wrap的父节点。
使用siblings()方法可以筛选出兄弟节点:
items = doc('.list .on')
print(items.siblings())
<li class=""><a href="https://book.douban.com" target="_blank" data-moreurl-dict="{"from":"top-nav-click-book","uid":"0"}">读书</a></li>
通过CSS选择器可以筛选出符合条件的兄弟节点:
print(items.siblings('.active'))
筛选出class为active的兄弟节点。
使用items()方法可以对其中的节点解析遍历:
lis = doc('li').items()
for li in lis:print(li)
解析网页的最终目的就是要提取其中的信息,下面分别来说一下如何来获取属性和文本:
attr()方法可以用来获取属性:
a = doc('.list .on a')
print(a.attr('href'))
https://www.douban.com
这里首先选中a标签,然后调用attr()方法获取href的属性值。
也可以调用attr的href属性:a.attr.href。
但要注意的是,当返回结果包含多个节点时attr()只会得到第一个节点的属性。但使用遍历就可以得到所有a节点的属性:
a = doc('a')
for item in a.items():print(item.attr('href'))
使用text()方法可以获取其中的文本:
a = doc('.list .on a')
print(a.text())
豆瓣
如果想要获取全部的html文本就可以使用html()方法。
pyquery库的使用相关推荐
- python pyquery倒数第二个节点之前的节点_Python中PyQuery库的使用总结
pyquery库是jQuery的Python实现,可以用于解析HTML网页内容,我个人写过的一些抓取网页数据的脚本就是用它来解析html获取数据的.他的官方文档地址是:http://packages. ...
- python爬虫从入门到放弃-python爬虫从入门到放弃(七)之 PyQuery库的使用
PyQuery库也是一个非常强大又灵活的网页解析库,如果你有前端开发经验的,都应该接触过jQuery,那么PyQuery就是你非常绝佳的选择,PyQuery 是 Python 仿照 jQuery 的严 ...
- python网络爬虫系列教程——python中pyquery库应用全解
全栈工程师开发手册 (作者:栾鹏) python教程全解 python网络爬虫lxml库的应用全解. 在线安装方法:cmd中输入"pip install pyquery" 离线安装 ...
- Python 中 PyQuery 库
文章目录 PyQuery库 一. 简介 1. 概述 2. 安装 3. 导包 二. 用法详解 1. 初始化 1.1 字符串初始化 1.2 URL 初始化 1.3 文件初始化 2. CSS选择器 2.1 ...
- Python爬虫:还在纠结买什么手机?pyquery库给你参考答案
目录 pyquery库 基本用法 CSS选择器 查找节点 查找子节点 查找父节点 查找其兄弟节点 获取节点信息 修改节点 伪类选择器 实战:抓取ZOL热门手机排行榜 pyquery库 虽然Beauti ...
- python爬虫(五)------pyquery库(一)------attr()、text()、html()、addClass()、hasClass()、removeattr()等方法
python爬虫(四)------bs4库(二)------BeautifulSoup的findall().find(().select()和select_one()等方法 pyquery库 安装 p ...
- python爬虫——Pyquery库
Pyquery库并非python标准库,所以需要下载:pip install pyquery Pyquery是一个类似jquery(一个js库)的库,使用 lxml 进行快速 xml 和 html 操 ...
- 如何使用PyQuery库?
PyQuery是一个类似于jQuery的Python库,它提供了一种可用于解析和操作HTML文档的强大工具.如何使用PyQuery库呢,下面是使用PyQuery库的详细说明: 安装PyQuery Py ...
- python pyquery库_python解析HTML之:PyQuery库的介绍与使用
前言 Python关于爬虫的库挺多的,也各有所长.了解前端的也都知道, jQuery 能够通过选择器精确定位 DOM 树中的目标并进行操作,所以我想如果能用 jQuery 去爬网页那就 cool 了. ...
- beautifulsoup解析动态页面div未展开_Python爬虫 | 0xb 数据解析:PyQuery库
(给抠腚男孩加星标,提升Python.Android技能) 作者:CoderPig 本节带来数据解析部分最后一个解析库PyQuery,它的API和前端著名框架jQuery相似,名字由此而来.如果你有前 ...
最新文章
- jquery validate 详解二
- docker swarm英文文档学习-8-在集群中部署服务
- HTML5实践 -- 使用css装饰你的图片画廊 - part2
- 河南经济管理学校2001级计算机,懂得取舍,习得自主——访管信2001级经英奖学金得主张瑞娟...
- [转]你在修佛,还是在修魔
- ConcurrentMap接口
- python实现解释器_Python 解释器初探
- 排序算法java快速排序_快速排序算法--Java实现
- hive表加载数据的不同方式
- 问题解决:AttributeError: 'module' object has no attribute '_rebuild_tensor_v2'
- DDD实战进阶第一波(七):开发一般业务的大健康行业直销系统(实现产品上下文接口与测试)...
- 武汉理工计算机专考研专业课,2017武汉理工大学考研计算机专业课真题
- 计算机二级刷题库刷的到原题吗,刷题能过计算机二级吗?
- LeetCode 分数加减运算
- Heartbeat高可用软件服务--1.Heartbeat介绍(2)
- javaScript入门,新手小白也能会
- 谈论机器学习中,哪种学习算法更好有意义吗?
- 烟搭桥,酒开路?这届年轻人可能宁愿自断后路
- 移动apn接入点哪个快_51物联卡:使用物联网卡时为什么总要让你设置APN?
- Python turtle库的应用实例——画大白(情人节表白神器)