python - разделить объект Beautifulsoup с помощью выражений reg - PullRequest
0 голосов
/ 04 июня 2018

У меня проблемы с поиском решения для разделения периода времени и маршрута, содержащихся в 'div', который я очистил с помощью Beautifulsoup.Ниже приведен текст, который я получаю из интерактивной оболочки.Мне нужно разделить «через I-405 / I-65 / I-525» и «8 мин.46 сек.Затем мне нужно избавиться от '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>

Вот что я запускаю из оболочки:

>>> 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 для 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 голосов
/ 04 июня 2018

Вы можете использовать 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...