pyquery 是python仿照jQuery的严格实现,语法与jQuery几乎完全相同,所以对于学过前端的朋友们可以立马上手,没学过的小朋友也别灰心,我们马上就能了解到pyquery的强大.

1 安装

  1. pip install pyquery

2 官方文档

http://pyquery.readthedocs.io/

3 学习代码html代码

  1. html = '''
  2. <div>
  3. <ul>
  4. <li class="item-0">first item</li>
  5. <li class="item-1"><a href="link2.html">second item</a></li>
  6. <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
  7. <li class="item-1 active"><a href="link4.html">fourth item</a></li>
  8. <li class="item-0"><a href="link5.html">fifth item</a></li>
  9. </ul>
  10. </div>
  11. '''

4 字符串初始化

  1. html = '''
  2. <div>
  3. <ul>
  4. <li class="item-0">first item</li>
  5. <li class="item-1"><a href="link2.html">second item</a></li>
  6. <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
  7. <li class="item-1 active"><a href="link4.html">fourth item</a></li>
  8. <li class="item-0"><a href="link5.html">fifth item</a></li>
  9. </ul>
  10. </div>
  11. '''
  12. from pyquery import PyQuery as pq
  13. # 格式化html文本,获取'$对象
  14. doc=pq(html) # doc ---> '$'
  15. #获取html文本下所有的li标签
  16. print(doc('li'))

结果

5 URL初始化

  1. from pyquery import PyQuery as pq
  2. #直接获取网页源码
  3. doc=pq(url='https://www.baidu.com')
  4. title=doc(':submit').attr.value
  5. print(title)

结果

6 文件初始化

  1. from pyquery import PyQuery as pq
  2. #读取文件
  3. doc = pq(filename='demo.html')
  4. print(doc('li'))

结果

7 基于css选择器

  1. html = '''
  2. <div id="container">
  3. <ul class="list">
  4. <li class="item-0">first item</li>
  5. <li class="item-1"><a href="link2.html">second item</a></li>
  6. <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
  7. <li class="item-1 active"><a href="link4.html">fourth item</a></li>
  8. <li class="item-0"><a href="link5.html">fifth item</a></li>
  9. </ul>
  10. </div>
  11. '''
  12. from pyquery import PyQuery as pq
  13. doc = pq(html)
  14. #找id=container标签下 所有class=list标签下的 所有的li标签
  15. print(doc('#container .list li'))

结果

8 查找元素

子元素(不找孙子)

(链式寻找,doc($)找到的标签对象可以继续查找)

  1. html = '''
  2. <div id="container">
  3. <ul class="list">
  4. <li class="item-0">first item</li>
  5. <li class="item-1"><a href="link2.html">second item</a></li>
  6. <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
  7. <li class="item-1 active"><a href="link4.html">fourth item</a></li>
  8. <li class="item-0"><a href="link5.html">fifth item</a></li>
  9. </ul>
  10. </div>
  11. '''
  12. from pyquery import PyQuery as pq
  13. doc = pq(html)
  14. #先获取所有的class=list 标签
  15. items = doc('.list')
  16. #再获取所有的li标签
  17. lis=items('li')
  18. print(lis)

结果

  1. #获取当前标签的所有子标签
  2. lis=items.children()
  3. print(type(lis))
  4. print(lis)

结果

父元素(不找爷爷)

  1. html = '''
  2. <html>
  3. <div id="container">
  4. <ul class="list">
  5. <li class="item-0">first item</li>
  6. <li class="item-1"><a href="link2.html">second item</a></li>
  7. <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
  8. <li class="item-1 active"><a href="link4.html">fourth item</a></li>
  9. <li class="item-0"><a href="link5.html">fifth item</a></li>
  10. </ul>
  11. </div>
  12. </html>
  13. '''
  14. from pyquery import PyQuery as pq
  15. doc = pq(html)
  16. items = doc('.list')
  17. #获取当前标签的父级别标签(不取爷爷标签)
  18. container = items.parent()
  19. print(type(container))
  20. print(container)

结果

9 遍历

  1. html = '''
  2. <div class="wrap">
  3. <div id="container">
  4. <ul class="list">
  5. <li class="item-0">first item</li>
  6. <li class="item-1"><a href="link2.html">second item</a></li>
  7. <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
  8. <li class="item-1 active"><a href="link4.html">fourth item</a></li>
  9. <li class="item-0"><a href="link5.html">fifth item</a></li>
  10. </ul>
  11. </div>
  12. </div>
  13. '''
  14. from pyquery import PyQuery as pq
  15. doc = pq(html)
  16. #寻找class=items-0并且class=active的标签
  17. li = doc('.item-0.active')
  18. print(li)

结果

10 获取文本

  1. html = '''
  2. <div class="wrap">
  3. <div id="container">
  4. <ul class="list">
  5. <li class="item-0">first item</li>
  6. <li class="item-1"><a href="link2.html">second item</a></li>
  7. <li class="item-0 active"><a href="link3.html"><span class="bold">我们一起high high</span></a></li>
  8. <li class="item-1 active"><a href="link4.html">fourth item</a></li>
  9. <li class="item-0"><a href="link5.html">fifth item</a></li>
  10. </ul>
  11. </div>
  12. </div>
  13. '''
  14. from pyquery import PyQuery as pq
  15. doc = pq(html)
  16. #定位到 a标签
  17. a = doc('.item-0.active a')
  18. print(a)
  19. #输出文本使用.text()
  20. print(a.text())

结果

11 获取HTML

  1. html = '''
  2. <div class="wrap">
  3. <div id="container">
  4. <ul class="list">
  5. <li class="item-0">first item</li>
  6. <li class="item-1"><a href="link2.html">second item</a></li>
  7. <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
  8. <li class="item-1 active"><a href="link4.html">fourth item</a></li>
  9. <li class="item-0"><a href="link5.html">fifth item</a></li>
  10. </ul>
  11. </div>
  12. </div>
  13. '''
  14. from pyquery import PyQuery as pq
  15. doc = pq(html)
  16. li = doc('.item-0.active')
  17. print(li)
  18. #获取对应 标签下的 html数据
  19. print(li.html())

结果

12 DOM操作

addClass、removeClass

  1. html = '''
  2. <div class="wrap">
  3. <div id="container">
  4. <ul class="list">
  5. <li class="item-0">first item</li>
  6. <li class="item-1"><a href="link2.html">second item</a></li>
  7. <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
  8. <li class="item-1 active"><a href="link4.html">fourth item</a></li>
  9. <li class="item-0"><a href="link5.html">fifth item</a></li>
  10. </ul>
  11. </div>
  12. </div>
  13. '''
  14. from pyquery import PyQuery as pq
  15. doc = pq(html)
  16. li = doc('.item-0.active')
  17. print(li)
  18. #给选定标签删除 class='active'
  19. li.removeClass('active')
  20. print(li)
  21. #给选定标签添加 class='active'
  22. li.addClass('active')
  23. print(li)

结果

attr、css

  1. html = '''
  2. <div class="wrap">
  3. <div id="container">
  4. <ul class="list">
  5. <li class="item-0">first item</li>
  6. <li class="item-1"><a href="link2.html">second item</a></li>
  7. <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
  8. <li class="item-1 active"><a href="link4.html">fourth item</a></li>
  9. <li class="item-0"><a href="link5.html">fifth item</a></li>
  10. </ul>
  11. </div>
  12. </div>
  13. '''
  14. from pyquery import PyQuery as pq
  15. doc = pq(html)
  16. li = doc('.item-0.active')
  17. print(li)
  18. #添加属性 name=link
  19. li.attr('name', 'link')
  20. print(li)
  21. #添加css font-size=14px
  22. li.css('font-size', '14px')
  23. print(li)

结果

remove

  1. html = '''
  2. <div class="wrap">
  3. Hello, World
  4. <p>This is a paragraph.</p>
  5. </div>
  6. '''
  7. from pyquery import PyQuery as pq
  8. doc = pq(html)
  9. wrap = doc('.wrap')
  10. print(wrap.text())
  11. #find 找到指定标签,remove 移除
  12. wrap.find('p').remove()
  13. print(wrap.text())

结果

其他DOM方法

13 伪类选择器

  1. html = '''
  2. <div class="wrap">
  3. <div id="container">
  4. <ul class="list">
  5. <li class="item-0">first item</li>
  6. <li class="item-1"><a href="link2.html">second item</a></li>
  7. <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
  8. <li class="item-1 active"><a href="link4.html">fourth item</a></li>
  9. <li class="item-0"><a href="link5.html">fifth item</a></li>
  10. </ul>
  11. </div>
  12. </div>
  13. '''
  14. from pyquery import PyQuery as pq
  15. doc = pq(html)
  16. # 获取第一个li 标签
  17. li = doc('li:first-child')
  18. print(li)
  19. #获取最后一个li 标签
  20. li = doc('li:last-child')
  21. print(li)
  22. #获取第2个li 标签
  23. li = doc('li:nth-child(2)')
  24. print(li)
  25. #获取索引>2 的li 标签
  26. li = doc('li:gt(2)')
  27. print(li)
  28. #获取偶数 的li标签
  29. li = doc('li:nth-child(2n)')
  30. print(li)
  31. #获取文本包含second的 li标签
  32. li = doc('li:contains(second)')
  33. print(li)

结果

更多CSS选择器可以查看 http://www.w3school.com.cn/css/index.asp

pyquery 学习的更多相关文章

  1. python爬虫之pyquery学习

    相关内容: pyquery的介绍 pyquery的使用 安装模块 导入模块 解析对象初始化 css选择器 在选定元素之后的元素再选取 元素的文本.属性等内容的获取 pyquery执行DOM操作.css ...

  2. pyquery学习笔记

    很早就听说了pyquery的强大.写了个简单的测试程序实验下. 思路是找个动态网页,先用PhantomJS加载,然后用PYQUERY解析. 1.随便找了个带表格的股票网页,里面有大量的股票数据,测试的 ...

  3. python之pyquery 学习

    pyquery是jQuery的Python实现,可以用以解析HTML网页的内容.官网文档:http://pythonhosted.org/pyquery/ 下载:https://pypi.python ...

  4. 学习PyQuery库

    学习PyQuery库 好了,又是学习的时光啦,今天学习pyquery 来进行网页解析 常规导入模块(PyQuery库中的pyquery类) from pyquery import PyQuery as ...

  5. 学习使用pyquery解析器爬小说

    一.背景:个人喜欢在网上看小说,但是,在浏览器中阅读小说不是很方便,喜欢找到小说的txt版下载到手机上阅读,但是有些小说不太好找txt版本,考虑自己从网页上爬一爬,自己搞定小说的txt版本.正好学习一 ...

  6. 爬虫学习笔记(六)PyQuery模块

    PyQuery模块也是一个解析html的一个模块,它和Beautiful Soup用起来差不多,它是jquery实现的,和jquery语法差不多,会用jquery的人用起来就比较方便了. Pyquer ...

  7. python爬虫神器PyQuery的使用方法

    你是否觉得 XPath 的用法多少有点晦涩难记呢? 你是否觉得 BeautifulSoup 的语法多少有些悭吝难懂呢? 你是否甚至还在苦苦研究正则表达式却因为少些了一个点而抓狂呢? 你是否已经有了一些 ...

  8. Pyquery API中文版

    Pyquery的用法与jQuery相同,可以直接参考jQuery API学习.

  9. python爬虫学习笔记(一)——环境配置(windows系统)

    在进行python爬虫学习前,需要进行如下准备工作: python3+pip官方配置 1.Anaconda(推荐,包括python和相关库)   [推荐地址:清华镜像] https://mirrors ...

随机推荐

  1. Linux 普通用户之间免密登陆

    目的: 同台机器之间实现普通用户之间的免密登陆: NN01 的user1 免密登陆 user2 不同机器之间实现普通用户之间的免密登陆 :NN01 的user1 免密登陆 NN01 的user1 一. ...

  2. HTTP认证方式详解

    HTTP请求报头: Authorization HTTP响应报头: WWW-Authenticate   HTTP认证 基于 质询 /回应( challenge/response)的认证模式.   ◆ ...

  3. vs2017 x64 ibatis.net 平台调用 Oracle.DataAccess, Version=2.112.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342 x64

    遇到的问题: 1.x86无法调用x64 2.调用ibatis.net的providers.config无法通过节点反射查找Oracle.DataAccess, Version=2.112.1.0, C ...

  4. Git协作流程

    Git 作为一个源码管理系统,不可避免涉及到多人协作. 协作必须有一个规范的流程,让大家有效地合作,使得项目井井有条地发展下去."协作流程"在英语里,叫做"workflo ...

  5. java Socket多线程聊天程序

    参考JAVA 通过 Socket 实现 TCP 编程 参考java Socket多线程聊天程序(适合初学者) 以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包 ...

  6. POJ_2104_K-th Number_主席树

    POJ_2104_K-th Number_主席树 题意:给定一个长度为n的序列,m次询问区间第k小 分析: 主席树模板 主席树可以理解成为n棵权值线段树的前缀和 但我们不能建n棵线段树,只需要对于每个 ...

  7. eclipse使用javaFX写一个HelloWorkld

    ------------------------------------------------ 操作系统:Ubuntu18.04 EclipseVersion: Oxygen.3a Release ...

  8. 命令提示符编译java

    先新建一个文件夹kun,kun就是类所在的package.新建一个java文件. HelloWorld.java的代码如下: package kun; public class HelloWorld{ ...

  9. golang从简单的即时聊天来看架构演变

    前言 俗话说的好,架构从来都不是一蹴而就的,没有什么架构一开始设计就是最终版本,其中需要经过很多步骤的变化,今天我们就从一个最简单的例子来看看,究竟架构这个东西是怎么变的. 我将从一个最简单的聊天室的 ...

  10. RK3399配置笔记

    1. adb shell 默认超级管理员 在build/core/main.mk下将ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=1改成ADDITIONAL_D ...