python - 使用reg表达式分割beautifulsoup对象

时间:2018-06-04 16:21:16

标签: python beautifulsoup

我无法找到一个解决方案,以分割时间段和路​​线中包含的' div'我使用beautifulsoup刮了。下面是我从交互式shell获得的文本。我需要通过I-405 / I-65 / I-525'进行拆分。和#8; 8分钟。 46秒。'然后我需要摆脱' min'和'秒所以我可以结合起来获得8.46'。我猜我需要使用正则表达式拆分?有人可以举个例子吗?感谢。

以下是我从网页上删除的内容:

<div class="coloredodd" id="odContent">
    <b>via I-405/I-65/I-525</b>
    <br></br>
    58 min. 8 sec.
    <br></br>
</div>

以下是我从shell运行的内容:

>>> soup.find_all('div')[16].get_text()

'via I-405/I-65/I-5258 min. 46 sec.'

以下是我要对词典进行的操作:

LinkNames[1] = TempLinkNames[7]
LinkNames[2] = TempLinkNames[8]
LinkNames[3] = TempLinkNames[9]
LinkNames[4] = TempLinkNames[4]
LinkNames[5] = TempLinkNames[2]
LinkNames[6] = TempLinkNames[5]
LinkNames[7] = TempLinkNames[3]
LinkNames[8] = TempLinkNames[0]
LinkNames[9] = TempLinkNames[1]
print(LinkNames)

这是字典的第一项:

{'At BTI Road via Ocean Expy (I-525)': '32.48',

以下是我如何将键和值首先放入列表然后手动将其分配到字典中。

BWPLinkNames = {BWPCombineNames[6]: BWPSingLinkTime[6],
                BWPCombineNames[7]: BWPSingLinkTime[7],
                BWPCombineNames[8]: BWPSingLinkTime[8],
                BWPCombineNames[9]: BWPSingLinkTime[9],
                BWPCombineNames[4]: BWPSingLinkTime[4],
                BWPCombineNames[2]: BWPSingLinkTime[2],
                BWPCombineNames[5]: BWPSingLinkTime[5],
                BWPCombineNames[3]: BWPSingLinkTime[3],
                BWPCombineNames[0]: BWPSingLinkTime[0],
                BWPCombineNames[1]: BWPSingLinkTime[1]}

无法将字典项输出到电子表格。值是浮点字符串&#39; 23.25&#39;。但是在电子表格中,它显示错误并显示错误。它只显示为一位数字,并且该数字与实际的浮点字符串无关。使用xlsxwriter for excel,这是我输出它们的方式。

for key in BWLinkNames.keys():

    worksheet.write(row, col, key)
    for value in BWLinkNames[key]:
        worksheet.write(row, col + 1, value)
    row+= 1
workbook.close()

1 个答案:

答案 0 :(得分:1)

您可以使用$( document ).ready(function() { $("body").on("click", ".menuicon", function() { $(this).next().toggleClass("dropdown-show"); }); });

.menuicon {
  color: red;
  cursor: pointer;
}

.dropdown-content {
  display: none;
}

.dropdown-content.dropdown-show {
  display: block;
}

输出:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<li>
    <a href="">Toepassingsgebied managementsysteem</a>
    <i class="mdi mdi-plus-box menuicon dropdown">▼</i>
    <ul class="dropdown-content menuliststyle">
        <li>Algemene bedrijfsgegevens</li>
        <li>Organogram</li>
        <li>Toepassingsgebied managementsysteem</li>
    </ul>
</li>

<li>
    <a href="">Toepassingsgebied managementsysteem</a>
    <i class="mdi mdi-plus-box menuicon dropdown">▼</i>
    <ul class="dropdown-content menuliststyle">
        <li>Algemene bedrijfsgegevens</li>
        <li>Organogram</li>
        <li>Toepassingsgebied managementsysteem</li>
    </ul>
</li>

修改:您可以使用re.findall查找目的地,然后使用import re s = 'via I-405/I-65/I-5258 min. 46 sec.' [timestamp] = re.findall('\d{1}\smin\.\s\d+\ssec', s) final_result = '.'.join(re.findall('\d+', timestamp))

'8.46'

输出:

BeautifulSoup

修改:简单地使用str.replace

,而不是迭代from bs4 import BeautifulSoup as soup import re s = """ <div class="coloredodd" id="odContent"> <b>via I-405/I-65/I-525</b> <br></br> 58 min. 8 sec. <br></br> </div> """ destination = soup(s, 'html.parser').find('b').text timestamp = '.'.join(re.findall('\d+', soup(s, 'html.parser').find('div').text.replace(destination, '')))
'via I-405/I-65/I-525'
'58.8'