Как Вы получаете текст от HTML 'datacell' использование BeautifulSoup

Если вы не можете использовать lag и lead для других ответов здесь, вы можете добиться того же эффекта, создав row_number с ServiceTag как partition и отсортировав его по [ 117] вы можете join данные для себя через ServiceTag и row_number, чтобы получить ваши периоды между каждой строкой. Вы заметите, что это работает для нескольких значений ServiceTag:

declare @t table(ServiceTag varchar(20), StatusType varchar(20), SystemUnitTRID int, ModifiedDateTime datetime);
insert into @t values
 ('IDXXX12','STATUS_1',145818840,'2019/01/18 08:35:27')
,('IDXXX12','STATUS_1',145820934,'2019/01/18 08:50:41')
,('IDXXX12','STATUS_1',145822116,'2019/01/18 08:59:18')
,('IDXXX12','STATUS_1',145825658,'2019/01/18 09:23:23')
,('IDXXX12','STATUS_1',145826849,'2019/01/18 09:30:55')
,('IDXXX13','STATUS_1',245818840,'2019/01/17 18:35:00')
,('IDXXX13','STATUS_1',245820934,'2019/01/17 18:50:00')
,('IDXXX13','STATUS_1',245822116,'2019/01/17 18:59:00')
,('IDXXX13','STATUS_1',245825658,'2019/01/17 19:23:00')
,('IDXXX13','STATUS_1',245826849,'2019/01/17 21:30:00')
,('IDXXX14','STATUS_2',345818840,'2019/01/16 18:35:00')
,('IDXXX14','STATUS_2',345820934,'2019/01/16 18:50:00')
,('IDXXX14','STATUS_2',345822116,'2019/01/16 18:59:00')
,('IDXXX14','STATUS_2',345825658,'2019/01/16 19:23:00')
,('IDXXX14','STATUS_2',345826849,'2019/01/16 19:30:00')
;

with d as
(
    select ServiceTag
            ,StatusType
            ,SystemUnitTRID
            ,ModifiedDateTime
            ,row_number() over (partition by ServiceTag order by ModifiedDateTime) as rn
    from @t
    where StatusType = 'STATUS_1'
)
select d.ServiceTag
    ,d.SystemUnitTRID as id_sut
    ,d2.SystemUnitTRID as id_sut1
    ,d.ModifiedDateTime as sut
    ,d2.ModifiedDateTime as sut1
    ,datediff(minute,d.ModifiedDateTime,d2.ModifiedDateTime) as MinuteBoundaries    -- Returns the number of minute boundaries crossed
    ,datediff(second,d.ModifiedDateTime,d2.ModifiedDateTime)/60 as WholeMinutes -- Returns the number of whole minutes
    ,right('00' + cast(datediff(second,d.ModifiedDateTime,d2.ModifiedDateTime)/60/60 as varchar(10)),2)
        + ':'
        + right('00' + cast(datediff(second,d.ModifiedDateTime,d2.ModifiedDateTime)/60%60 as varchar(10)),2) as FormattedTime
from d
    join d as d2
        on d.ServiceTag = d2.ServiceTag
            and d.rn = d2.rn-1
order by d.ServiceTag
        ,d.ModifiedDateTime;

Вывод

+------------+-----------+-----------+-------------------------+-------------------------+------------------+--------------+---------------+
| ServiceTag |  id_sut   |  id_sut1  |           sut           |          sut1           | MinuteBoundaries | WholeMinutes | FormattedTime |
+------------+-----------+-----------+-------------------------+-------------------------+------------------+--------------+---------------+
| IDXXX12    | 145818840 | 145820934 | 2019-01-18 08:35:27.000 | 2019-01-18 08:50:41.000 |               15 |           15 | 00:15         |
| IDXXX12    | 145820934 | 145822116 | 2019-01-18 08:50:41.000 | 2019-01-18 08:59:18.000 |                9 |            8 | 00:08         |
| IDXXX12    | 145822116 | 145825658 | 2019-01-18 08:59:18.000 | 2019-01-18 09:23:23.000 |               24 |           24 | 00:24         |
| IDXXX12    | 145825658 | 145826849 | 2019-01-18 09:23:23.000 | 2019-01-18 09:30:55.000 |                7 |            7 | 00:07         |
| IDXXX13    | 245818840 | 245820934 | 2019-01-17 18:35:00.000 | 2019-01-17 18:50:00.000 |               15 |           15 | 00:15         |
| IDXXX13    | 245820934 | 245822116 | 2019-01-17 18:50:00.000 | 2019-01-17 18:59:00.000 |                9 |            9 | 00:09         |
| IDXXX13    | 245822116 | 245825658 | 2019-01-17 18:59:00.000 | 2019-01-17 19:23:00.000 |               24 |           24 | 00:24         |
| IDXXX13    | 245825658 | 245826849 | 2019-01-17 19:23:00.000 | 2019-01-17 21:30:00.000 |              127 |          127 | 02:07         |
+------------+-----------+-----------+-------------------------+-------------------------+------------------+--------------+---------------+
6
задан PyNEwbie 3 July 2013 в 17:03
поделиться

3 ответа

headerRows[0][10].contents[0].find('b').string
3
ответ дан 16 December 2019 в 21:48
поделиться

Документация BeautifulSoup должна касаться всего, в чем Вы нуждаетесь - в этом случае похоже, что Вы хотите использовать findNext:

headerRows[0][10].findNext('b').string

Более универсальное решение, которое не полагается <b> тег состоял бы в том, чтобы использовать текстовый аргумент findAll, который позволяет Вам искать только NavigableString объекты:

>>> s = BeautifulSoup(u'<p>Test 1 <span>More</span> Test 2</p>')
>>> u''.join([s.string for s in s.findAll(text=True)])
u'Test 1 More Test 2'
5
ответ дан 16 December 2019 в 21:48
поделиться

У меня есть базовый класс, что я расширяю все Красивые классы Супа с помощью набора методов, которые помогают мне достигнуть текст в группе элементов, из которых я не обязательно хочу полагаться на структуру. Один из тех методов следующий:

  def clean(self, val):
    if type(val) is not StringType: val = str(val)
    val = re.sub(r'<.*?>', '', s) #remove tags
    val = re.sub("\s+" , " ", val) #collapse internal whitespace
    return val.strip() #remove leading & trailing whitespace
0
ответ дан 16 December 2019 в 21:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: