使用pyquery
简单举例
- from pyquery import PyQuery as pq
- html = '''
- <div>
- <ul>
- <li class="item-O"><a href="linkl.html">first item</a></li>
- <li class="item-1"><a href="link2.html">second item</a></li>
- <li class="item-inactive"><a href="link3.html">third item</a></li>
- <li class="item-1"><a href="link4.html">fourth item</a></li>
- <li class="item-0"><a href="link5.html">fifth item</a>
- </ul>
- </div>
- '''
- doc = pq(html)
- print(doc)
- # 输出:
- <div>
- <ul>
- <li class="item-O"><a href="linkl.html">first item</a></li>
- <li class="item-1"><a href="link2.html">second item</a></li>
- <li class="item-inactive"><a href="link3.html">third item</a></li>
- <li class="item-1"><a href="link4.html">fourth item</a></li>
- <li class="item-0"><a href="link5.html">fifth item</a>
- </li></ul>
- </div>
字符串
- from pyquery import PyQuery as pq
- import requests
- # doc1 与 doc2 功能相同
- doc1 = pq(url='https://www.cnblogs.com/liyihua/')
- print(doc1('title'))
- doc2 = pq(requests.get('https://www.cnblogs.com/liyihua/').text)
- print(doc1('title'))
- # 输出:
- <title>李亦华 - 博客园</title>
- <title>李亦华 - 博客园</title>
URL
- from pyquery import PyQuery as pq
- doc = pq(filename='test.html')
- print(doc('li'))
- # 输出:
- <li class="item-O"><a href="linkl.html">first item</a></li>
- <li class="item-1"><a href="link2.html">second item</a></li>
- <li class="item-inactive"><a href="link3.html">third item</a></li>
- <li class="item-1"><a href="link4.html">fourth item</a></li>
- <li class="item-0"><a href="link5.html">fifth item</a>
- </li>
- # 文件内容:
- <div>
- <ul>
- <li class="item-O"><a href="linkl.html">first item</a></li>
- <li class="item-1"><a href="link2.html">second item</a></li>
- <li class="item-inactive"><a href="link3.html">third item</a></li>
- <li class="item-1"><a href="link4.html">fourth item</a></li>
- <li class="item-0"><a href="link5.html">fifth item</a>
- </ul>
- </div>
文件
基本CSS选择器
- from pyquery import PyQuery as pq
- 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>
- </div>
- '''
- doc = pq(html)
- print(doc('#container .list li'))
- print(
- type(
- doc('#container .list 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'>
查找节点
- from pyquery import PyQuery
- 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>
- </div>
- '''
- doc = PyQuery(html)
- items = doc('.list')
- print(
- type(items),
- items,
- sep='\n'
- )
- print(
- type(items.find('li')),
- items.find('li'),
- sep='\n'
- )
- # 输出:
- <class 'pyquery.pyquery.PyQuery'>
- <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>
- <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>
子孙节点----find()方法
# find()方法查找的是所有子孙节点,如果只查找子节点,可以使用children()方法
- from pyquery import PyQuery
- 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>
- </div>
- '''
- doc = PyQuery(html)
- items = doc('.list')
- print(items, '\n')
- print(
- type(items.parent()),
- items.parent(),
- sep='\n'
- )
- # 输出:
- <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>
- <class 'pyquery.pyquery.PyQuery'>
- <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>
- </div>
父节点----parent()方法
- parents(selector=None)
- parent(selector=None)
- from pyquery import PyQuery
- 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>
- </div>
- '''
- doc = PyQuery(html)
- # 选择class为list的节点内部class为item-0和active的节点
- items = doc('.list .item-0.active')
- print(
- type(items.siblings()),
- items.siblings(),
- sep='\n'
- )
- print("\n", items.siblings('.active'))
- # 输出:
- <class 'pyquery.pyquery.PyQuery'>
- <li class="item-1"><a href="link2.html">second item</a></li>
- <li class="item-0">first item</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-1 active"><a href="link4.html">fourth item</a></li>
兄弟节点----siblings()方法
遍历
- from pyquery import PyQuery
- 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>
- </div>
- '''
- doc = PyQuery(html)
- lis = doc('li').items() # 调用items()方法,得到一个生成器
- for li in lis:
- print(
- li,
- type(li)
- )
- # 输出:
- <li class="item-0">first item</li>
- <class 'pyquery.pyquery.PyQuery'>
- <li class="item-1"><a href="link2.html">second item</a></li>
- <class 'pyquery.pyquery.PyQuery'>
- <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
- <class 'pyquery.pyquery.PyQuery'>
- <li class="item-1 active"><a href="link4.html">fourth item</a></li>
- <class 'pyquery.pyquery.PyQuery'>
- <li class="item-0"><a href="link5.html">fifth item</a></li>
- <class 'pyquery.pyquery.PyQuery'>
遍历----items()
获取信息
获取属性
- attr()方法获取属性
- from pyquery import PyQuery
- 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>
- </div>
- '''
- doc = PyQuery(html)
- a = doc('.item-0.active a')
- print(
- a,
- type(a),
- a.attr('href'), # 也可以用a.attr.href,两者作用相同
- sep='\n'
- )
- # 输出:
- <a href="link3.html"><span class="bold">third item</span></a>
- <class 'pyquery.pyquery.PyQuery'>
- link3.html
- # 当返回结果包含多个节点时,调用attr()方法,只会得到第一个节点的属性。如果想获取所有返回的节点的属性,就要用到遍历了
获取文本
- from pyquery import PyQuery
- 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>
- </div>
- '''
- doc = PyQuery(html)
- li = doc('li')
- print(
- li.html(), # 获取节点的内部文本
- li.text(), # 获取节点文本,返回结果是纯文字内容
- type(li.text()),
- sep='\n'
- )
- # 输出:
- first item
- first item second item third item fourth item fifth item
- <class 'str'>
节点操作
add_class() 和 remove_class() ---- 添加class、移除class
- from pyquery import PyQuery
- 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>
- </div>
- '''
- doc = PyQuery(html)
- li = doc('.item-0.active')
- print(li)
- print(li.remove_class('active'))
- print(li.add_class('active'))
- # 输出:
- <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
- <li class="item-0"><a href="link3.html"><span class="bold">third item</span></a></li>
- <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
attr、text 和 html
- # attr(*args, **kwargs) ---- Attributes manipulation
# text(value=no_default, **kwargs) ---- Get or set the text representation of sub nodes.
# html(value=no_default, **kwargs) ---- Get or set the html representation of sub nodes.
- from pyquery import PyQuery
- html = '''
- <div id="container">
- <ul class="list">
- <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
- </ul>
- </div>
- '''
- doc = PyQuery(html)
- li = doc('.item-0.active')
- print(li)
- li.attr('name', 'link') # 添加属性name,属性值为link
- print(li)
- li.text('change item') # 将节点内部的内容改为'change item'
- print(li)
- li.html('<span>change item</span>') # 将节点内部的内容改为'<span>change item</span>'
- print(li)
- # 输出:
- <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
- <li class="item-0 active" name="link"><a href="link3.html"><span class="bold">third item</span></a></li>
- <li class="item-0 active" name="link">change item</li>
- <li class="item-0 active" name="link"><span>change item</span></li>
- # attr(*args, **kwargs) ---- Attributes manipulation
remove()----删除节点
- from pyquery import PyQuery
- html = '''
- <div class="LeeHua">
- LiYihua
- <ul class="201802004731">liyihua</ul>
- </div>
- '''
- doc = PyQuery(html)
- Leehua = doc('.LeeHua')
- print("移除节点ul前的输出:\n"+Leehua.text())
- Leehua.find('ul').remove()
- print("移除节点ul后的输出:\n"+Leehua.text())
- # 输出:
- 移除节点ul前的输出:
- LiYihua
- liyihua
- 移除节点ul后的输出:
- LiYihua
伪类选择器
- 示例:
- from pyquery import PyQuery
- html = '''
- <div class="wrap">
- <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>
- </div>
- </div>
- '''
- doc = PyQuery(html)
- # 选择属于父元素的第一个子元素的每个 <li> 元素。
- li = doc('li:first-child')
- print(li)
- # 选择属于父元素的最后一个子元素的每个 <li> 元素。
- li = doc('li:last-child')
- print(li)
- # 选择属于其父元素的第二个子元素的每个 <li> 元素
- li = doc('li:nth-child(2)')
- print(li)
- # 选择属于其父元素的最后两个子元素的每个 <li> 元素
- li = doc('li:gt(2)')
- print(li)
- # 选择属于父元素的第偶个子元素的每个 <li> 元素。
- li = doc('li:nth-child(2n)')
- print(li)
- # 选择包含'second'的每个元素
- li = doc('li:contains(second)')
- print(li)
- # 输出:
- <li class="item-0">first item</li>
- <li class="item-0"><a href="link5.html">fifth item</a></li>
- <li class="item-1"><a href="link2.html">second item</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-1"><a href="link2.html">second item</a></li>
- <li class="item-1 active"><a href="link4.html">fourth item</a></li>
- <li class="item-1"><a href="link2.html">second item</a></li>
CSS 选择器的用法:http://www.w3school.com.cn/cssref/css_selectors.asp
- 示例:
使用pyquery的更多相关文章
- pyquery的问题
在使用pyquery时发现一些问题, 1.爬取的html中如果有较多的错误时,不能很好的补全. 2.如果要获取某个class中的内容时,如果内容太多不能取完整!只能取一部分. 这个在现在的最新版本中还 ...
- python爬虫神器PyQuery的使用方法
你是否觉得 XPath 的用法多少有点晦涩难记呢? 你是否觉得 BeautifulSoup 的语法多少有些悭吝难懂呢? 你是否甚至还在苦苦研究正则表达式却因为少些了一个点而抓狂呢? 你是否已经有了一些 ...
- windows下python安装pyquery
安装pyquery之前首先要明确一点,easyinstall 是一款python包管理器,类似于node的npm,用于安装python的扩展包,它安装的包是以*.egg的方式. 要安装pq需要经历以下 ...
- Python开发包推荐系列之xml、html解析器PyQuery
使用python,喜欢她的简洁是一方面,另外就是它有着丰富的开发包 好用又方便 接下来会给大家推荐一系列很赞的开发包. 在解析html.xml过程中,我们有不少的包可以用.比如bs.lxml.xmlt ...
- python - PyQuery
偶尔的机会,知道这么个扩展,手贱翻了下文档,发现似乎挺有意思,遂记录一二. what: 这是一个python版本的jquery,而且是后端执行的,至少官方是这么说的: pyquery allows y ...
- 【pyQuery】抓取startup news首页
#! /usr/bin/python # coding: utf-8 from pyquery import PyQuery c=PyQuery('http://news.dbanotes.net/' ...
- 【pyQuery分析实例】分析体育网冠军联盟比赛成绩
目标地址:http://www.espncricinfo.com/champions-league-twenty20-2012/engine/match/574265.html liz@nb-liz: ...
- 【PyQuery】PyQuery总结
pyquery库是jQuery的Python实现,可以用于解析HTML网页内容, 官方文档地址是:http://packages.python.org/pyquery/. 二.使用方法 ? 1 fro ...
- win7下python安装pyquery
安装pyquery之前首先要明确一点,easyinstall 是一款python包管理器,类似于node的npm,用于安装python的扩展包,它安装的包是以*.egg的方式. 要安装pq需要经历以下 ...
- Python抓取页面中超链接(URL)的三中方法比较(HTMLParser、pyquery、正则表达式) <转>
Python抓取页面中超链接(URL)的3中方法比较(HTMLParser.pyquery.正则表达式) HTMLParser版: #!/usr/bin/python # -*- coding: UT ...
随机推荐
- 11 种在大多数教程中找不到的JavaScript技巧
当我开始学习JavaScript时,我把我在别人的代码.code challenge网站以及我使用的教程之外的任何地方发现的每一个节省时间的技巧都列了一个清单. 在这篇文章中,我将分享11条我认为特别 ...
- 30 分钟快速入门 Docker 教程
原文地址:梁桂钊的博客 博客地址:http://blog.720ui.com 欢迎关注公众号:「服务端思维」.一群同频者,一起成长,一起精进,打破认知的局限性. 一.欢迎来到 Docker 世界 1. ...
- postgresql从库搭建--逻辑复制
1 物理复制及逻辑复制对比 前文做了PostgreSQL物理复制的部署,其有如下主要优点 物理层面完全一致,是主要的复制方式,其类似于Oracle的DG 延迟低,事务执行过程中产生REDO recor ...
- [Python] 豆瓣电影top250爬虫
1.分析 <li><div class="item">电影信息</div></li> 每个电影信息都是同样的格式,毕竟在服务器端是用 ...
- golang的生产者消费者模型示例
package main import "fmt" func Producer(ch chan int) { for i := 1; i <= 10; i++ { ch &l ...
- web动态站面试题
1.简述 tomcat 的启动过程? 答:Tomcat 启动--> 读取自己的 server.xml-->根据 Context 标签的内容找到项目目录. 项目入口 path-->读取 ...
- 阿里巴巴开源 Dragonwell JDK 最新版本 8.1.1-GA 发布
导读:新版本主要有三大变化:同步了 OpenJDK 上游社区 jdk8u222-ga 的最新更新:带来了正式的 feature:G1ElasticHeap:发布了用户期待的 Windows 实验版本 ...
- 2. SOFAJRaft源码分析—JRaft的定时任务调度器是怎么做的?
看完这个实现之后,感觉还是要多看源码,多研究.其实JRaft的定时任务调度器是基于Netty的时间轮来做的,如果没有看过Netty的源码,很可能并不知道时间轮算法,也就很难想到要去使用这么优秀的定时调 ...
- AppBoxFuture: 服务模型的在线调试
框架内的服务模型(ServiceModel)用于处理各类业务逻辑(如最简单的CRUD操作),在设计时以类似于伪代码的形式存在,发布时后端会通过Roslyn转换并编译为运行时代码.为了方便开发者更简 ...
- angular之跨域
一.什么是跨域? 跨域是指一个域下的文档或者脚本去请求另一个域下的资源.(广义) 广义的跨域: 1.资源跳转:链接跳转.重定向.表单提交. 2.资源嵌入:<link>.<script ...