首页 > 其他分享 >PyQuery详解

PyQuery详解

时间:2022-10-18 11:47:00浏览次数:34  
标签:pq PyQuery doc li 详解 items print

为什么选择PyQuery?

Python爬虫解析库,主流的有

  • PyQuery
  • Beautifulsoup
  • Scrapy Selectors
  • 正则表达式。

PyQuery和scrapy Selectors都是基于lxml模块,而lxml和正则表达式都是C语言写的,只有Beautifulsoup是用纯Python编写的,所以在实测中,Beautifulsoup 的解析速度比其他几种慢了5倍以上!

正则表达式的构造稍微复杂一点,一般在结构化的网页中没必要用正则(易出错)。Scrapy Selectors支持css,xpath以及正则表达式,PyQuery只支持css(我最开始学的是xpath,后来觉得css语法更精简一些)。Scrapy Selector中的css语法和PyQuery中的略有不同,本文以PyQuery为例(不用Scrapy框架的话,PyQuery就够用了)

如何使用?

首先在命令行里 pip install pyquery 安装一下
pip install pyquery==1.4.3

利用它,我们可以直接解析 DOM 节点的结构,并通过 DOM 节点的一些属性快速进行内容提取。

html = '''
<div id="cont">
    <ul class="slist">
         <li class="item-0">web开发</li>
         <li class="item-1"><a href="link2.html">爬虫开发</a></li>
         <li class="item-0 active"><a href="link3.html"><span class="bold">数据分析</span></a></li>
         <li class="item-1 active"><a href="link4.html">深度学习</a></li>
         <li class="item-0"><a href="link5.html">机器学习</a></li>
     </ul>
 </div>
'''

1、实例演示

from pyquery import PyQuery as pq
doc = pq(html)
print(doc('li'))

2、css选择器

doc = pq(html)
print(doc('#cont .slist li'))
print(type(doc('#cont .slist li')))

3、提取内容

for item in doc('#cont .slist li').items():
    print(item.text())

4、子节点

from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.slist')
print(type(items))
print(items)       # 提取节点所有内容
lis = items.find('li')    # 获取符合条件的li标签
print(type(lis))
print(lis)

5、 属性获取

from pyquery import PyQuery as pq
doc = pq(html)
a = doc('.item-0.active a')
print(a, type(a))
print(a.attr('href'))

6、 遍历提取

doc = pq(html)
a = doc('a')
for s in a.items():
    print(s.attr('href'))  # 属性获取
    print(s.text())   #  值获取

标签:pq,PyQuery,doc,li,详解,items,print
From: https://www.cnblogs.com/feng0815/p/16802031.html

相关文章

  • 【Vue】Axios详解
    @[toc]1Axios简介1.1什么是Axios?Axios是一个基于​​promise​​​网络请求库,作用于​​node.js​​和浏览器中。它是​​isomorphic​​​的(即同一套代码可以运......
  • Java内存模型(JMM)详解
    目录什么是JMM?Java运行时内存区域与硬件内存的关系Java内存区域和Java内存模型有何区别?Java线程与主内存的关系什么是主内存?什么是本地内存?线程间通信重温Java并发三......
  • Java 8 Stream详解
     【Java8系列】Stream详解,看这一篇就够啦https://blog.csdn.net/yy339452689/article/details/110956119......
  • K8S Service基础详解
    ​一起学kubernetes系列(2)‌本篇文章我们介绍KubernetesService的各个类型,各类端口的含义,向外部暴露内部服务的方式。Service介绍Kubernetes中一个应用服务会有一个或多......
  • Selenium4Web自动化3-等待机制详解
    一、sleepsleep(timeout)是设定一个固定的等待时长,代码运行到此处,会强行进行等待指定的时间,使用方便的同时,效率最低,不建议使用。缺点:不能准确把握需要等待的时间(有时操......
  • 【蓝桥杯】模拟赛详解,冲刺国赛
    ......
  • Python __new__()方法详解
    __new__()是一种负责创建类实例的静态方法,它无需使用staticmethod装饰器修饰,且该方法会优先__init__()初始化方法被调用。一般情况下,覆写__new__()的实现将会使用合......
  • Python函数(函数定义、函数调用)用法详解
    Python 中函数的应用非常广泛,前面章节中我们已经接触过多个函数,比如input()、print()、range()、len()函数等等,这些都是Python的内置函数,可以直接使用。除了可以直接......
  • Python while循环语句详解
    Python 中,while循环和if条件分支语句类似,即在条件(表达式)为真的情况下,会执行相应的代码块。不同之处在于,只要条件为真,while就会一直重复执行那段代码块。while语句的......
  • Python for循环及用法详解
    Python 中的循环语句有2种,分别是while循环和for循环,前面章节已经对while做了详细的讲解,本节给大家介绍for循环,它常用于遍历字符串、列表、元组、字典、集合等序......