Python中包含另一个特定的类如何分割?

2024-06-16 13:50:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样的代码:

<div class = first>
   <div class = second>
   <div class = fourth>
<div class = first>
   <div class = second>
   <div class = third> 
<div class = first>
   <div class = second>
   <div class = fourth>

div third中的信息不同于div fourth,但是我需要div second中的信息,它与div third位于同一div first中。所以第三个div我只需要确定正确的div second。在

更准确地说: 我需要一些东西可以做到以下几点:如果第一分部包含第三分部,然后存储第二部分(或先指定div)变量中此元素的值(从中捕获一些文本)。在

我试过用find\u all和parent或child操作,但是我没能解决这个问题。 任何帮助都将不胜感激。在

更新(示例): 一个航班搜索网站的例子:

^{pr2}$

当div class=可退款时,我需要div class=price的内容。 希望这能让它更清楚。在


Tags: 代码文本div信息child元素allfind
1条回答
网友
1楼 · 发布于 2024-06-16 13:50:56

我想当你说包含时,你的意思是price div是可退款的父级,所以请查找可退款div,看看父级是否是类名为price的div,您就有了所需的:

html=“”“ 在

<div class ="booking class">
   <div class="price">
        <div class="refundable"></div>
   </div>

<div class = "booking class">
   <div class="price">
         <div class="non refundable"></div>
   </div>
</div>"""

from bs4 import BeautifulSoup

soup = BeautifulSoup(html, "lxml")


for div in soup.find_all( lambda tag: tag.name == "div" and tag.get('class') == ['refundable']):
    par = div.parent
     if par and par.name == "div" and par["class"] == ["price"]:
        print(par)

如果他们是兄弟姐妹:

^{pr2}$

在使用之前,价格总是在找到以前的兄弟姐妹之前:

for div in soup.find_all(lambda tag: tag.name == "div" and tag.get('class') == ['refundable']):
    sib = div.find_previous_sibling("div", "price")
    if sib:
       print(div.parent)

或检查后面和/或后面:

for div in soup.find_all(lambda tag: tag.name == "div" and tag.get('class') == ['refundable']):
    sib = div.find_previous_sibling("div", "price") or div.find_next_sibling("div", "price")
    if sib:
       print(div.parent)    

如果div可以位于父对象内部的任何位置:

for div in soup.find_all(lambda tag: tag.name == "div" and tag.get('class') == ['refundable']):
    sib = div.parent.find("div", "price")
    if sib:
        print(div.parent)

相关问题 更多 >