Дополнительный вопрос: неравномерность html приводит к дисбалансу в списке python - PullRequest
0 голосов
/ 27 марта 2020

Это ответ на этот вопрос: Зачистка плохо закодирована html

Я заметил, что из сотен страниц, которые были просмотрены, большинство не имеют информации между указанными c <br\> тегов. Но время от времени теги <br\> в этой позиции содержат некоторую информацию. Таким образом, приведенная ниже выдержка содержит <br/>92524<br/> в последнем элементе списка, в то время как остальные просто <br\><br\>

mylist = [['<div id="headingData">006951446<br/>Algonquin Gas Transmission, LLC<br/>Critical notice<br/>12/30/2019<br/>09:00:00 AM<br/>12/31/2019<br/>09:00:00 AM<br/>92112<br/>Initiate<br/>Capacity Constraint<br/>12/29/2019<br/>03:02:38 PM<br/> <br/><br/>No response required<br/> <br/> <br/>AGT Pipeline Conditions for 12/30/2019<br/></div>'],
['<div id="headingData">006951446<br/>Algonquin Gas Transmission, LLC<br/>Critical notice<br/>12/29/2019<br/>09:00:00 AM<br/>12/30/2019<br/>09:00:00 AM<br/>92086<br/>Initiate<br/>Capacity Constraint<br/>12/28/2019<br/>02:55:39 PM<br/> <br/><br/>No response required<br/> <br/> <br/>AGT Pipeline Conditions for 12/29/2019<br/></div>'],
['<div id="headingData">006951446<br/>Algonquin Gas Transmission, LLC<br/>Critical notice<br/>12/28/2019<br/>09:00:00 AM<br/>12/29/2019<br/>09:00:00 AM<br/>92074<br/>Initiate<br/>Capacity Constraint<br/>12/27/2019<br/>03:14:16 PM<br/>92524<br/><br/>No response required<br/> <br/> <br/>AGT Pipeline Conditions for 12/28/2019<br/></div>']]

Код, предоставленный ahmed american (спасибо!), Отлично сработал данные, которые я первоначально предоставил, которые не включали проблему выше.

for item in mylist:
    soup = BeautifulSoup(*item, 'html.parser')
    print(*[a.get_text(strip=True, separator="|").split("|") for a in soup])

Но когда вы запускаете его в обновленном списке выше, вы получаете списки, которые имеют дисбаланс. Когда в этой позиции есть информация, она фиксируется и создается элемент списка. Если информация отсутствует, эта позиция не превращается в элемент списка. Это приводит к неравномерным спискам.

Вы можете увидеть дисбаланс, если прокрутите вправо и посмотрите на элемент 'No response required',.

['006951446', 'Algonquin Gas Transmission, LLC', 'Critical notice', '12/30/2019', '09:00:00 AM', '12/31/2019', '09:00:00 AM', '92112', 'Initiate', 'Capacity Constraint', '12/29/2019', '03:02:38 PM', 'No response required', 'AGT Pipeline Conditions for 12/30/2019']
['006951446', 'Algonquin Gas Transmission, LLC', 'Critical notice', '12/29/2019', '09:00:00 AM', '12/30/2019', '09:00:00 AM', '92086', 'Initiate', 'Capacity Constraint', '12/28/2019', '02:55:39 PM', 'No response required', 'AGT Pipeline Conditions for 12/29/2019']
['006951446', 'Algonquin Gas Transmission, LLC', 'Critical notice', '12/28/2019', '09:00:00 AM', '12/29/2019', '09:00:00 AM', '92074', 'Initiate', 'Capacity Constraint', '12/27/2019', '03:14:16 PM', '92524', 'No response required', 'AGT Pipeline Conditions for 12/28/2019']

Как настроить код так, чтобы любой <br\> теги, между которыми ничего нет, просто получают маркер "NA", и все полученные списки остаются выровненными?

1 Ответ

0 голосов
/ 28 марта 2020

Я думаю, что нашел обходной путь. Я проверил лен каждого элемента в списке. Если это только 14, тогда я вставляю в 12-ю позицию индекса строку «NA».

if len(item) == 14:
    item.insert(12, "NA")

Это правильно возвращает:

['006951446', 'Algonquin Gas Transmission, LLC', 'Critical notice', '12/30/2019', '09:00:00 AM', '12/31/2019', '09:00:00 AM', '92112', 'Initiate', 'Capacity Constraint', '12/29/2019', '03:02:38 PM', 'NA', 'No response required', 'AGT Pipeline Conditions for 12/30/2019']
['006951446', 'Algonquin Gas Transmission, LLC', 'Critical notice', '12/29/2019', '09:00:00 AM', '12/30/2019', '09:00:00 AM', '92086', 'Initiate', 'Capacity Constraint', '12/28/2019', '02:55:39 PM','NA', 'No response required', 'AGT Pipeline Conditions for 12/29/2019']
['006951446', 'Algonquin Gas Transmission, LLC', 'Critical notice', '12/28/2019', '09:00:00 AM', '12/29/2019', '09:00:00 AM', '92074', 'Initiate', 'Capacity Constraint', '12/27/2019', '03:14:16 PM', '92524', 'No response required', 'AGT Pipeline Conditions for 12/28/2019']

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...