Использование BS4 - как получить только текст, а не теги? - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь почистить страницу, посвященную медицине и рыночным активам для некоторых компаний, по номеру https://www.formularylookup.com/

Приведенный ниже код дает мне желаемые данные, такие как Количество планов, какие аптеки покрывают лекарство, а статус в%. Вот пример моего вывода, где желаемым выводом будет просто «1330 планов»:

Количество планов:

<td class="plan-count" role="gridcell">1330 plans</td>

Я пытался использовать .text после каждого tag.find , но это не работает.

Вот мой код, касающийся этой указанной c части. Выше много чего происходит, но оно включает информацию о входе в систему, которой я не могу поделиться.

total = []

soup = BeautifulSoup(html, "lxml")

for tag in soup.find_all("tbody", {"role":"rowgroup"}):
    #name = tag.find("td", {"class":"payer-name"}) #gives me whole tag
    name = tag.find("tr", {"role":"row"}).find("td").get("payer-name") #gives me None output
    plan = tag.find("td", {"class":"plan-count"})  #gives me whole tag
    stat = tag.find("td", {"class":"icon-status"}) #gives me whole tag

    data = {"Payer": name, "Number of plans": plan, "Status": stat}

    total.append(data)

df = pd.DataFrame(total)
print(df)

Вот фрагмент кода, использующий функцию проверки.

<tbody role="rowgroup">
    <tr data-uid="a5795205-1518-4a74-b039-abcd1b35b409" role="row">
        <td class="payer-name" role="gridcell">CVS Caremark RX</td>
        <td class="plan-count" role="gridcell">1330 plans</td>
        <td role="gridcell" class="icon-status icon-status-not-covered">98% Not Covered</td>
     </tr>

РЕДАКТИРОВАТЬ: после погружения глубже в SO я вижу, что решение может использовать функцию содержимого BS4. Будет отчитываться, если это работает. - Это не сработало: «AttributeError: объект« NoneType »не имеет атрибута« содержимое »»

1 Ответ

0 голосов
/ 29 января 2020

Я понял это. Очевидно, есть другие теги, начинающиеся с tbody rowgroup, которые классифицируются как None, и поэтому невозможно получить .text из них, пока мой код не достигнет частей, которые я хочу.

Мне просто нужно изменить эту строку:

for tag in soup.find_all("tbody", {"role":"rowgroup"}):
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...