python-3.x - 使用 Beautiful Soup 删除元素的第一个实例
问题描述
我一直在尝试使用 BeautifulSoup 删除元素的第一个实例,我确信我遗漏了一些东西。我没有使用 find all,因为我需要定位第一个实例,它始终是 header(div) 并且具有类 HubHeader。该类在其他地方与 div 标签结合使用。不幸的是,我无法更改基本 html 的设置。
我也尝试在循环之外选择一个,但它仍然不起作用。
def delete_header(filename):
html_docs = open(filename,'r')
soup = BeautifulSoup( html_docs, "html.parser")
print (soup.select_one(".HubHeader")) #testing
for div in soup.select_one(".HubHeader"):
div.decompose()
print (soup.select_one(".HubHeader")) #testing
html_docs.close()
delete_header("my_file")
最近的错误是这样的:
AttributeError: 'NavigableString' object has no attribute 'decompose'
我正在使用select_one()
和decompose()
。
解决方案
简短的回答,替换,
for div in soup.select_one(".HubHeader"):
div.decompose()
一行:
soup.select_one(".HubHeader").decompose()
更长的答案,您的代码迭代 bs4.element.Tag 对象。函数 .select_one() 返回一个对象,而 .select() 返回一个列表,如果您使用 .select() 您的代码可以工作,但会删除所选类中所有出现的元素。
推荐阅读
- flutter - 如何使用 dart-flutter 每天重复本地通知?以及如何将“2:00 AM”时间格式解析为 TimeZone?
- java - 从 List 中获取常用元素
- excel - AdvancedFilter 宏上的应用程序定义或对象定义错误
- wordpress - Wordpress 中的类别菜单(+ Twig/Timber)
- cassandra - Cassandra - 较小的分区导致性能问题
- c# - 如何从字符串/列表实体框架中选择列
- reactjs - React 钩子表单将错误传递给子组件(TS)
- laravel - 当从 Vue.js 请求 API 时,Laravel 中的 NETWORK ERR
- javascript - 如何在intellij中提供“忽略的承诺”警告,但仅限于特定功能?
- google-colaboratory - 错误:目录“。” 不可安装。未找到“setup.py”和“pyproject.toml”