无法获取 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
问题在于,这包括 span
和 div
的强内容。但是,如果您知道 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
返回的其中一行只是一个换行符。这可以通过多种方式处理。我选择 join
和 strip
它而不是依赖结果列表中某个索引处的文本(参见注释行)。
Python 3
对于python 3,打印行应该是
print (''.join(div.find_all(text=True, recursive=False)).strip())
所需值存在于 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
问题在于,这包括 span
和 div
的强内容。但是,如果您知道 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
返回的其中一行只是一个换行符。这可以通过多种方式处理。我选择 join
和 strip
它而不是依赖结果列表中某个索引处的文本(参见注释行)。
Python 3
对于python 3,打印行应该是
print (''.join(div.find_all(text=True, recursive=False)).strip())