无法获取 python 中的 <div> 标签值

Unable to fetch <div> tag values in python

所需值存在于 div 标记中:

<div class="search-page-text">
<span class="upc grey-text sml">Cost for 2: </span>
Rs. 350 
</div>

我正在使用以下代码获取值 "Rs. 350":

soup.select('div.search-page-text'):

但在输出中我得到 "None"。你能帮我解决这个问题吗?

可以使用 strippe_strings:

访问具有子元素和字符串内容的元素
from bs4 import BeautifulSoup

h = """<div class="search-page-text">
<span class="upc grey-text sml">Cost for 2: </span>
Rs. 350
</div>"""
soup = BeautifulSoup(h)

for s in soup.select("div.search-page-text")[0].stripped_strings:
    print(s)

输出:

Cost for 2:
Rs. 350

问题在于,这包括 spandiv 的强内容。但是,如果您知道 div first 包含带有文本的 span,您可以获得有趣的字符串

list(soup.select("div.search-page-text")[0].stripped_strings)[1]

如果您知道您只需要作为 <div> 标记的直接文本而不是 <span> 子元素的字符串,您可以这样做。

from bs4 import BeautifulSoup

txt = '''<div class="search-page-text">
<span class="upc grey-text sml">Cost for 2: </span>
Rs. 350 
</div>'''

soup = BeautifulSoup(txt)

for div in soup.find_all("div", { "class" : "search-page-text" }):
    print ''.join(div.find_all(text=True, recursive=False)).strip()
    #print div.find_all(text=True, recursive=False)[1].strip()

div.find_all 返回的其中一行只是一个换行符。这可以通过多种方式处理。我选择 joinstrip 它而不是依赖结果列表中某个索引处的文本(参见注释行)。

Python 3

对于python 3,打印行应该是

print (''.join(div.find_all(text=True, recursive=False)).strip())