Я хочу извлечь часть HTML, которая лежит между моими заданными условиями - PullRequest
0 голосов
/ 08 июня 2019

У меня длинный html-файл, и я хочу извлечь часть html, которая находится между моими заданными условиями.

<div style="TEXT-INDENT: 0pt; DISPLAY: block; MARGIN-LEFT: 0pt; MARGIN-RIGHT: 0pt" align="justify">
<font style="DISPLAY: inline; FONT-FAMILY: Times New Roman; FONT-SIZE: 12pt; FONT-WEIGHT: bold">
<font style="DISPLAY: inline; TEXT-DECORATION: underline">ITEM 1A. RISK FACTORS</font></font></div>

    ---
    ---
    ---
    ---
<div style="TEXT-INDENT: 0pt; DISPLAY: block; MARGIN-LEFT: 0pt; MARGIN-RIGHT: 0pt" align="justify">
<font style="DISPLAY: inline; FONT-FAMILY: Times New Roman; FONT-SIZE: 12pt; FONT-WEIGHT: bold">
<font style="DISPLAY: inline; TEXT-DECORATION: underline">ITEM 1B. UNRESOLVED STAFF COMMENTS</font></font></div>

Существует много html выше, между и под этими двумя фрагментами.Я хочу извлечь HTML, где он начинается с ПУНКТ 1А.ФАКТОРЫ РИСКА и заканчиваются на ПУНКТ 1B.РАЗРЕШЕННЫЕ КОММЕНТАРИИ ПЕРСОНАЛА

Это то, что я пробовал до сих пор, но он печатает только HTML, содержащий ПУНКТ 1А.ФАКТОРЫ РИСКА

page_soup = soup(page_html, "html.parser")

for item in page_soup.find_all('font'):
    if "ITEM 1A. RISK FACTORS" in item.text:
            print(item)

1 Ответ

2 голосов
/ 08 июня 2019

Вы можете иметь логическое значение вне вашего цикла for, чтобы отслеживать, хотите ли вы печатать строки или нет.Что-то вроде:

page_soup = soup(page_html, "html.parser")

should_print = False
for item in page_soup.find_all('font'):
    if "ITEM 1A. RISK FACTORS" in item.text:
            should_print = True
    if "ITEM 1B. UNRESOLVED STAFF COMMENTS" in item.text:
            break
    if should_print:
            print(item)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...