Python中利用BeautifulSoup4反查包含文本内容的标签

2023-10-10 00:18

本文主要是介绍Python中利用BeautifulSoup4反查包含文本内容的标签,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 1 问题引出
  • 2 问题分析
  • 3 解决方案

1 问题引出

编写爬取Amazon服装行业数据时,遇到一个问题:根据文本内容Next反查包含它的父标签。请看下面HTML片段

<li class="a-last">
<a href="/s?k=red+tshirt&amp;i=fashion-mens&amp;page=2&amp;qid=1588904638&amp;ref=sr_pg_1">Next
<span class="a-letter-space"></span>
<span class="a-letter-space"></span></a>
</li>

我需要根据Next反查包含它的标签a,以此获取href属性的值。最近编写很多爬虫项目,积累了一定的经验,于是,我认为上述很简单,编写如下代码:

# testBs.py
from bs4 import BeautifulSoup
import re 
str = """<li class="a-last"><a href="/s?k=red+tshirt&amp;i=fashion-mens&amp;page=2&amp;qid=1588904638&amp;ref=sr_pg_1">Next<span class="a-letter-space"></span><span class="a-letter-space"></span>→</a></li>""" soup = BeautifulSoup(str,'lxml')
a = soup.find('a',text=re.compile(r"Next"))
print(a)

运行后,如下:
在这里插入图片描述
也就是说,查不到标签a

2 问题分析

若将HTML片段改为标签a下不含子标签span的话,即

<li class="a-last">
<a href="/s?k=red+tshirt&amp;i=fashion-mens&amp;page=2&amp;qid=1588904638&amp;ref=sr_pg_1">Next</a>
</li>

则上述代码可以得到结果:
在这里插入图片描述
我分析,肯定是代码a = soup.find('a',text=re.compile(r"Next"))有问题。那么针对原HTML片段,为了不受查询标签a的限制,我将核心代码改为:

a = soup.find(text=re.compile(r"Next"))
print(a)

运行结果为:
在这里插入图片描述
这是一个好的象征,离成功近了一步。经过查阅BeautifulSoup4的资料,此时得到的对象是一个BeautifulSoup.NavigableString对象,我们可以利用代码查看变量a的信息:

from bs4 import BeautifulSoup
import re 
import pprint
str = """<li class="a-last"><a href="/s?k=red+tshirt&amp;i=fashion-mens&amp;page=2&amp;qid=1588904638&amp;ref=sr_pg_1">Next<span class="a-letter-space"></span><span class="a-letter-space"></span>→</a></li>""" soup = BeautifulSoup(str,'lxml')
a = soup.find(text=re.compile(r"Next"))
#print(a)
pprint.pprint(a.__dict__)

运行结果为:
在这里插入图片描述
那么此时我们的问题答案已经很明了了。

3 解决方案

最终,利用文本内容(且与其同一层还有其他标签)反查包含它的标签的属性值的代码如下:

from bs4 import BeautifulSoup
import re 
import pprint
str = """<li class="a-last"><a href="/s?k=red+tshirt&amp;i=fashion-mens&amp;page=2&amp;qid=1588904638&amp;ref=sr_pg_1">Next<span class="a-letter-space"></span><span class="a-letter-space"></span>→</a></li>""" soup = BeautifulSoup(str,'lxml')
a = soup.find(text=re.compile(r"Next"))print(a.parent.get('href'))

代码运行结果为:
在这里插入图片描述
完美!!!

这篇关于Python中利用BeautifulSoup4反查包含文本内容的标签的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/176583

相关文章

python语言中的常用容器(集合)示例详解

《python语言中的常用容器(集合)示例详解》Python集合是一种无序且不重复的数据容器,它可以存储任意类型的对象,包括数字、字符串、元组等,下面:本文主要介绍python语言中常用容器(集合... 目录1.核心内置容器1. 列表2. 元组3. 集合4. 冻结集合5. 字典2.collections模块

Python进行word模板内容替换的实现示例

《Python进行word模板内容替换的实现示例》本文介绍了使用Python自动化处理Word模板文档的常用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录技术背景与需求场景核心工具库介绍1.获取你的word模板内容2.正常文本内容的替换3.表格内容的

Python实现自动化删除Word文档超链接的实用技巧

《Python实现自动化删除Word文档超链接的实用技巧》在日常工作中,我们经常需要处理各种Word文档,本文将深入探讨如何利用Python,特别是借助一个功能强大的库,高效移除Word文档中的超链接... 目录为什么需要移除Word文档超链接准备工作:环境搭建与库安装核心实现:使用python移除超链接的

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧

《Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧》本文将通过实际代码示例,深入讲解Python函数的基本用法、返回值特性、全局变量修改以及异常处理技巧,感兴趣的朋友跟随小编一起看看... 目录一、python函数定义与调用1.1 基本函数定义1.2 函数调用二、函数返回值详解2.1 有返

Python Excel 通用筛选函数的实现

《PythonExcel通用筛选函数的实现》本文主要介绍了PythonExcel通用筛选函数的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录案例目的示例数据假定数据来源是字典优化:通用CSV数据处理函数使用说明使用示例注意事项案例目的第一

Python实现中文大写金额转阿拉伯数字

《Python实现中文大写金额转阿拉伯数字》在财务票据中,中文大写金额被广泛使用以防止篡改,但在数据处理时,我们需要将其转换为阿拉伯数字形式,下面我们就来看看如何使用Python实现这一转换吧... 目录一、核心思路拆解二、中文数字解析实现三、大单位分割策略四、元角分综合处理五、测试验证六、全部代码在财务票

使用python制作一款文件粉碎工具

《使用python制作一款文件粉碎工具》这篇文章主要为大家详细介绍了如何使用python制作一款文件粉碎工具,能够有效粉碎密码文件和机密Excel表格等,感兴趣的小伙伴可以了解一下... 文件粉碎工具:适用于粉碎密码文件和机密的escel表格等等,主要作用就是防止 别人用数据恢复大师把你刚删除的机密的文件恢

在.NET项目中嵌入Python代码的实践指南

《在.NET项目中嵌入Python代码的实践指南》在现代开发中,.NET与Python的协作需求日益增长,从机器学习模型集成到科学计算,从脚本自动化到数据分析,然而,传统的解决方案(如HTTPAPI或... 目录一、CSnakes vs python.NET:为何选择 CSnakes?二、环境准备:从 Py

python中getsizeof和asizeof的区别小结

《python中getsizeof和asizeof的区别小结》本文详细的介绍了getsizeof和asizeof的区别,这两个函数都用于获取对象的内存占用大小,它们来自不同的库,下面就来详细的介绍一下... 目录sys.getsizeof (python 内置)pympler.asizeof.asizeof