python使用reg表达式拆分beautifulsoup对象

2024-04-25 00:28:37 发布

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

我很难找到一个解决方案来分割时间段和包含在我用beautifulsoup刮取的'div'中的路由。下面是我从交互式shell获得的文本。我需要拆分'via I-405/I-65/I-525'和'8 min.46 sec'。然后我需要去掉'min'和'sec',这样我就可以合并得到'8.46'。我猜我需要用split和正则表达式?有人能给我举个这样的例子吗?谢谢。你知道吗

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

<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]}

无法将字典项输出到电子表格。值是浮点字符串“23.25”。但在电子表格上,它显示错误。它只显示为一位数字,数字与实际的浮点字符串无关。使用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()

Tags: keybrdivfor字典secshellmin
1条回答
网友
1楼 · 发布于 2024-04-25 00:28:37

您可以使用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'

编辑:不是迭代BWLinkNames[key],而是简单地利用BWLinkNames[key]

for i, key in enumerate(BWLinkNames):
  worksheet.write(i, col, key)
  worksheet.write(i, col + 1, BWLinkNames[key])

workbook.close()

相关问题 更多 >