我正在尝试使用漂亮的汤来解析python中的以下 HTML 代码。我希望能够在标签内搜索文本,例如“Color”并返回文本下一个标签“Slate,mykonos”,并为下一个标签执行此操作,以便对于给定文本类别我可以返回它的相应信息。
但是,我发现很难找到合适的代码来执行此操作。
<h2>Details</h2>
<div class="section-inner">
<div class="_UCu">
<h3 class="_mEu">General</h3>
<div class="_JDu">
<span class="_IDu">Color</span>
<span class="_KDu">Slate, mykonos</span>
</div>
</div>
<div class="_UCu">
<h3 class="_mEu">Carrying Case</h3>
<div class="_JDu">
<span class="_IDu">Type</span>
<span class="_KDu">Protective cover</span>
</div>
<div class="_JDu">
<span class="_IDu">Recommended Use</span>
<span class="_KDu">For cell phone</span>
</div>
<div class="_JDu">
<span class="_IDu">Protection</span>
<span class="_KDu">Impact protection</span>
</div>
<div class="_JDu">
<span class="_IDu">Cover Type</span>
<span class="_KDu">Back cover</span>
</div>
<div class="_JDu">
<span class="_IDu">Features</span>
<span class="_KDu">Camera lens cutout, hard shell, rubberized, port cut-outs, raised edges</span>
</div>
</div>
我使用以下代码检索我的div标签
soup.find_all("div", "_JDu")
一旦我检索到标签,我就可以在其中导航,但是找不到能够让我在一个标签内找到文本并在标签后面返回文本的正确代码。
任何帮助都会非常感激,因为我是python的新手而且我已经走到了尽头。
答案 0 :(得分:1)
您可以定义一个函数来返回您输入的键的值:
def get_txt(soup, key):
key_tag = soup.find('span', text=key).parent
return key_tag.find_all('span')[1].text
color = get_txt(soup, 'Color')
print('Color: ' + color)
features = get_txt(soup, 'Features')
print('Features: ' + features)
输出:
Color: Slate, mykonos
Features: Camera lens cutout, hard shell, rubberized, port cut-outs, raised edges
我希望这就是你要找的东西。
<强>解释强>
soup.find('span', text=key)
会返回<span>
的{{1}}代码。
text=key
返回当前.parent
标记的父标记。
示例:
当<span>
时,key='Color'
将返回
soup.find('span', text=key).parent
现在我们已将其存储在<div class="_JDu">
<span class="_IDu">Color</span>
<span class="_KDu">Slate, mykonos</span>
</div>
中。唯一剩下的就是获得第二个key_tag
的文字,这就是第<span>
行的内容。
答案 1 :(得分:0)
试一试。它还可以为您提供相应的值。确保将html elements
变换在Triple Quotes之间的content=""" """
变量中,以查看其工作原理。
from bs4 import BeautifulSoup
soup = BeautifulSoup(content,"lxml")
for elem in soup.select("._JDu"):
item = elem.select_one("span")
if "Features" in item.text: #try to see if it misses the corresponding values
val = item.find_next("span").text
print(val)