3.4 XPath、Beautiful Soup 与 Pyquery的基本使用总结和比较

目录

一、三者共同点

二. 三者差异与基本使用

(一). 使用示例:

(二). XPath

(三). Beautiful Soup

(四). pyquery

(五). 三者差异

三.练习实战


一、三者共同点

        导入,获得网页文本,str 和 bytes 类型均可作为参数传入。

import requests
from lxml import etree    # XPath
from bs4 import BeautifulSoup
from pyquery import PyQuery as pqurl = ''    
response = requests.get(url)    # 获得响应
content =  response.text    # 获得网页文本,.text获得 str 类型
# content = response.content # .content 获得 bytes 类型

二. 三者差异与基本使用

(一). 使用示例:

content = '''
<div class="panel"><div class="panel-heading"><h4 href="h4_1">Hello</h4></div><div class="panel-body"><ul class="list" id="list-1"><li class="element">Foo</li><li class="element">Bar</li><li class="element">Jay</li></ul><ul class="list list-small" id="list-2"><li class="element">Foo</li><li class="element">Bar</li></ul></div>
</div>
'''

(二). XPath

  • 获得网页文本后,解析及解析得到的类型:
html = etree.HTML(content)    # 获得解析对象
# print(html, type(html)) # <Element html at 0x21626b253c0> <class 'lxml.etree._Element'>
# purpose_content = html.xpath()    # 开始解析purpose_content = html.xpath('//ul[@class="list list-small"]')
# purpose_content = html.xpath('//ul[contains(@class, "score")]') 等同上句
print(purpose_content, type(purpose_content)) # <class 'list'>li_text = html.xpath('//li/text()')
print(li_text)
# [<Element ul at 0x181e8f79800>] <class 'list'>
# ['Foo', 'Bar', 'Jay', 'Foo', 'Bar']

        可以看到 .xparh 解析得到的类型为 Element,是列表,所以可以遍历内容对其中的节点元素进行操作,即也可以 .xpath 解析。

        如果 class 内容较长,可用 contains 。

  • 解析匹配规则:
大多以 // 开头,/子节点,./表示本身
例如: 
属性匹配 ://div[@属性=“ ”]/li/a/text()    获得文本,注意里面是双引号
是指匹配 div 里的属性
//div/@class   获得 div 节点中的属性:
在 li 节点,获取其文本:./text() 

        详细内容见:3.1 XPath的使用-CSDN博客

(三). Beautiful Soup

  • 获得网页文本后,获得解析对象:
soup = BeautifulSoup(content, 'lxml')
print(soup, type(soup))
# 输出 content 内容和 <class 'bs4.BeautifulSoup'>
  • 解析方法和解析得到的类型、获取属性:
# 节点选择器
purpose_content = soup.div.h4
print(purpose_content,type(purpose_content))
# <h4>Hello</h4> <class 'bs4.element.Tag'>
print(purpose_content.string)
# 对节点进行获取文本 输出:Hello
print(purpose_content.attrs['href'])
# 等同 print(purpose_content['href'])# 方法选择器
purpose_content = soup.find_all('ul', class_='list')    # 指 ul 的class
print(purpose_content,type(purpose_content))
# 输出一个 节点文本列表 和 <class 'bs4.element.ResultSet'># css 选择器
purpose_content = soup.select('div ul li')  # 空格往子节点去
purpose_content2 = soup.select('.list')
# 若 class="word1 word2",则('.word1.word2')
print(purpose_content,type(purpose_content))
# 输出 列表 和 <class 'bs4.element.ResultSet'>

        可以看到 soup. 解析后得到的是 Tag 或者 ResultSet 类型,分别对应单个内容列表,但都可以继续解析通过 . 往后解析和获得属性。

        详细内容见:3.2 Beautiful Soup 的使用-CSDN博客

(四). pyquery

  • 获得网页文本后:
doc = pq(content)
print(doc, type(doc))
# 输出 content 内容 和 <class 'pyquery.pyquery.PyQuery'>
  • 解析方法和解析得到的类型、获取属性:
# 直接使用 CSS 选择器
h4 = doc('h4')  # 单个节点
print(h4, type(h4))
# 节点内容 和 PyQuery类型
print(h4.text()) # 纯文本,.html()获取 html文本lis = doc('.list li')   # 多个节点
print(type(lis))    # PyQuery 类型
items = lis.items()
for item in items:print(item.text())  # Foo Bar Jay Foo Bar
# doc()会直接包含,只要有 list 的class 就会算进去

        可以看到都是 PyQuery 类型,可直接通过 . 解析,注意单个节点和多个节点,多个节点需使用 .items 方法获取生成器,迭代获得内容。

        详细内容可见:3.3 pyquery 的使用-CSDN博客

(五). 三者差异

  • XPath 主要通过 常用规则 .xpath() 解析,例如://,/,./等;
  • Beautiful Soup 可用节点选择器( soup.节点.节点.),方法选择器(soup.find_all / find),CSS选择器(soup.select(' CSS规则')) 解析;
  • PyQuery 主要通过 doc('CSS规则') 解析,比 Beautiful Soup 的CSS选择器方便一点;

三者都要注意以下多个节点迭代

三.练习实战

2 三种解析方式爬取王者荣耀英雄图片-CSDN博客

文章到此结束,本人新手,若有错误,欢迎指正;若有疑问,欢迎讨论。若文章对你有用,点个小赞鼓励一下,谢谢大家,一起加油吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/743930.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

http postman

地址 &#xff1a; https://oaqas.lingyiitech.com:9800/auth-api/openapi/dingtalk-oa/topapi/message/corpconversation/asyncsend_v2?token40216bf0ceea8e56b778d537b20f5d23 https://oaqas.lingyiitech.com:9800/auth-api/openapi/dingtalk-oa/topapi/message/corpconve…

2024年太原等保测评中心名单看这里!

开年来&#xff0c;不少太原小伙伴打算做等保了。大家都在问&#xff0c;目前太原等保测评中心有哪些&#xff1f;在哪里丫&#xff1f;这不我们小编就给大家整理一下&#xff0c;仅供参考哈&#xff01; 2024年太原等保测评中心名单看这里&#xff01; 序号&#xff1a;1 …

Python入门:从基础到实践

&#x1f40d; Python入门&#xff1a;从基础到实践 &#x1f680; &#x1f31f; 引言 Python&#xff0c;作为一种高级编程语言&#xff0c;以其简洁明了的语法和强大的功能而广受欢迎。无论你是编程新手还是希望学习新语言的开发者&#xff0c;Python都是一个极佳的选择。…

接水问题(C++)

题意 学校里有一个水房&#xff0c;水房里一共装有 m个龙头可供同学们打开水&#xff0c;每个龙头每秒钟的供水量相等&#xff0c;均为 1。   现在有 n名同学准备接水&#xff0c;他们的初始接水顺序已经确定。 将这些同学按接水顺序从 1到 n编号&#xff0c;i号同学…

[C++]20.实现红黑树。

实现红黑树 一.基本概念&#xff1a;1.红黑树的概念&#xff1a;2.红黑树的性质&#xff1a; 二.实现红黑树&#xff1a;1.基本结构&#xff1a;2.插入节点的多种情况&#xff1a;1.叔叔存在且为红&#xff1a;2.叔叔不存在/存在且为黑(单旋变色)3.叔叔不存在/存在且为黑(多旋&…

C/C++中{}的用法总结(全)

C基础专栏&#xff1a;http://t.csdnimg.cn/UjhPR 目录 1.定义初始化列表&#xff08;Initializer List&#xff09; 2.类成员初始化列表 3.无默认构造函数的类的默认初始化&#xff08;C11 及以后版本&#xff09; 4.初始化器列表构造函数&#xff08;C11 及以后版本&…

计算机网络——分组延时、丢失和吞吐量

分组延迟是指从发送方发送数据包到接收方接收到数据包所经历的时间。 分组时延的四种类型&#xff1a; 传输时延、传播时延、排队时延、节点处理时延。 传输时延&#xff1a;传输时延是指分组从发送方到接收方所需的时间&#xff0c;取决于分组的长度和链路的传输速率。传输时…

centos配置nginx自动启动

查看是否存在相应的服务&#xff0c;如下&#xff0c;有nginx.service [rootnode142 ~]# systemctl list-unit-files |grep nginx nginx.service disabled 第一步&#xff1a;进入到/lib/systemd/system/目录 cd /lib/systemd/system 第二步&#xff1a;创建nginx.service文…

Docker学习之镜像管理(超详解析)

Docker镜像生命周期&#xff08;可以把docker镜像理解为虚拟机镜像&#xff09; 实验内容&#xff1a; 搜索官方仓库镜像 [rootlocalhost ~]# docker search busybox //以查找busybox为例 搜索说明&#xff1a;name镜像名称 description镜像说明 stars点赞数量 official…

四川宏博蓬达法律咨询有限公司:法律服务的行业翘楚

在当今社会&#xff0c;法律服务已经成为人们生活中不可或缺的一部分。随着法律意识的提高&#xff0c;选择一家专业、可靠的法律咨询公司显得尤为重要。四川宏博蓬达法律咨询有限公司&#xff0c;作为业内的佼佼者&#xff0c;以其卓越的服务质量和广泛的业务范围&#xff0c;…

Nacos 集群搭建

1 . 集群结构图 : 其中包括3个nacos结点&#xff0c;然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx ; 我们计划的集群结构 : 三个nacos结点的地址 : 节点ipportnacos1192.168.150.18845nacos2192.168.150.18846nacos3192.168.150.18847 2 . 搭建集群 搭…

Unity_PUN2多人联机API汇总

PUN2多人联机API汇总 代码仅为函数区别和属性展示&#xff0c;并不针对指定功能 按照需要调用即可 服务器相关API和回调 #region 服务器相关public void 连接服务器(){PhotonNetwork.ConnectUsingSettings();PhotonNetwork.GameVersion "1";}public void 离开服务…

2024最新轻量应用服务器简介_轻量应用服务器购买指南

腾讯云轻量应用服务器开箱即用、运维简单的轻量级云服务器&#xff0c;CPU内存带宽配置高并且价格特别便宜&#xff0c;大带宽&#xff0c;但是限制月流量&#xff0c;轻量2核2G3M带宽61元一年、2核2G4M优惠价99元一年&#xff0c;540元三年、2核4G5M带宽165元一年&#xff0c;…

JAVA初阶数据结构(链表)练习(这些可以作为java包中的方法)

这里的每一个题大家都要仔细完成&#xff0c;这些题目每个我都至少思考了两个小时左右&#xff08;沉重心&#xff0c;慢慢来&#xff09; 1.反向链表的实现&#xff08;对链表进行翻转&#xff09;&#xff08;力扣有&#xff09; &#xff08;1&#xff09;图示 &#xff0…

扭矩VS转角法的优缺点——SunTorque智能扭矩系统

智能扭矩系统-智能拧紧系统-扭矩自动控制系统-SunTorque 在机械工程中&#xff0c;螺栓拧紧是一个至关重要的步骤&#xff0c;它直接关系到设备的安全性和性能。在众多螺栓拧紧方法中&#xff0c;扭矩法和转角法是最常用的两种。本文将对这两种方法进行详细的对比&#xff0c;…

C语言(指针)单元练习三

1下列语句的输出结果是______。C int **pp,*p,a5,b8; pp&p;p&a;p&b;printf("%d,%d",*p,**pp); A. 5,8 B.8,5 C. 8,8 D. 5,5 2如下程序的输出结果是______。B #include <stdio.h> #include <ctype.h> #include <stri…

2024考研国家线公布,各科分数线有哪些变化?考研国家线哪些涨了,哪些跌了?可视化分析告诉你

结论在文章结尾 2024考研国家线 一、近五年国家线趋势图-学术硕士 文学 管理学 工学照顾专业 体育学 交叉学科 军事学 历史学 理学 享受少数名族照顾政策的考生 中医类照顾专业 教育类 艺术类 医学 工学 哲学 法学 农学 经济学 二、近五年国家线趋势图-专业硕士 中医 应用心理 …

web项目的搭建

使用Webstorm并创建Next.js文件 1、配置nodejs环境、安装webstorm【配置node.js可以使用nvm去管理nodejs的版本】 2、需要破解webstorm&#xff0c;可能会导致原本的idea失效&#xff0c;注册码过期 3、taobao的npm过期&#xff0c;导致npm is sass执行不成功&#xff0c;需…

jvaweb 3-13

Element 后端开发 maven maven的作用 下载并配置环境变量 创建Maven项目 Maven坐标 依赖 Maven的依赖传递特性 以图表形式展示依赖 排除依赖 依赖范围 生命周期

普通小白现在做抖音小店还能赚到钱吗?千万不要忽视这几点

大家好&#xff0c;我是电商花花。 赚钱做生意的秘密&#xff0c; 很简单&#xff0c;就是积少成多&#xff0c;以小见大&#xff0c;然后和时间成为朋友。 而做抖音小店也是这样的一个道理&#xff0c;不管是新手小白还是老电商玩家&#xff0c;都是从一点一滴做起来的&…