为什么一些漂亮的 Soup 元素使用字典语法访问,而其他元素则使用对象语法访问?

问题描述 投票:0回答:1

上下文:我在 Beautiful Soup 中有以下小查询,然后从中构建一个充满元组的列表理解。效果很好:

tags = soup.find_all('span', {'class': 'tags-links'})
title_text_list = [(tag['title'], tag.text) for tag in tags]

问题:为什么我们像字典一样访问标题,而不是带有对象表示法的文本?为什么不使用对象表示法,或者像字典一样两者都做呢?

python html web-scraping beautifulsoup syntax
1个回答
0
投票

语法上的差异是由于 Beautiful Soup 的设计方式与 HTML 元素及其属性交互所致。

1。标题、类、id 等属性: 这些属性可以使用类似字典的语法 (tag['attribute']) 进行访问,因为它们是 HTML 标记的属性。在 HTML 中,属性始终是键值对,因此 Beautiful Soup 将这些属性视为字典中的键值对,允许使用方括号访问它们的值。示例:

<span title="some title" class="some-class">Text here</span>

在此示例中,title 和 class 是 span 标签的属性,它们始终是键值对,因此可以使用类似字典的语法作为键值对进行存储和访问。

2。标签的文本内容: 这是使用

.text
访问的,因为它不是属性或键值对,而是包含在开始和结束标签内的文本内容。 Beautiful Soup 提供了
.text
属性来直接访问此内容。

<span>Text here</span>
在这个例子中,“Text here”是span标签的文本内容,没有key。

总之,属性的访问就像字典键值对一样,因为 HTML 属性总是键值对,而文本内容作为 Beautiful Soup Tag 对象的属性访问,因为它在 HTML 本身中没有键而是存在于标签之间。这一设计选择旨在通过遵循 HTML 本身的结构,直观地从 HTML 元素访问可能需要的不同类型的信息。

© www.soinside.com 2019 - 2024. All rights reserved.