为什么Beautifulsoup的contents方法返回带括号和引号的文本,而text方法只返回纯文本

时间:2018-02-15 22:08:58

标签: python-3.x beautifulsoup

我正在使用Python3和Beautifulsoup从网页上抓取公司名称。当我使用"内容"拉取标签内容的方法,它返回带括号和单引号的文本(例如['公司A'])而#34;文本"方法只返回公司A.为什么函数表现如此?我意识到这可能是一个愚蠢的问题,但我是新的,并尝试过搜索。见下文:

 entity_name = bsObj2.find(class_='span-16 first')
 entity_name_item = entity_name.find('h1')
 entity_name_item = entity_name_item.contents
 print(entity_name_item)

返回:

['Company A']

鉴于:

 entity_name = bsObj2.find(class_='span-16 first')
 entity_name_item = entity_name.find('h1')
 entity_name_item = entity_name_item.text
 print(entity_name_item)

返回:

 Company A

2 个答案:

答案 0 :(得分:0)

contents为您提供了包含标记子项的列表,而text则为您提供了标记文本。

答案 1 :(得分:0)

contents将查找的所有结果作为Python list返回,而text则为您提供Python string所发现内容的文本值。例如,在以下HTML中:

<div>Header
<h1>Header2</h1>
</div>

使用Beautiful Soup解析并调用result = soup.find('div')会返回BeautifulSoup个对象。在该对象上调用contents将返回该标记及其所有子标记的列表,即result.contents == ['Header', 'Header2']type(result)返回<class 'list'>。但是text会以人类可读的格式将字符串作为字符串返回,因此您可以使用result.text == 'Header Header2type(result)来获取<class 'string'>