По Beautifulsoup.Я хочу заменить <br> переводом строки: во время getText () - PullRequest
0 голосов
/ 02 марта 2019

Я использую BeautifulSoup для очистки веб-страниц с помощью Python.

Проблема в том, что "все теги <br> удалены, когда getText ()".

Я знаю, что функция getText () извлекает только тексты.

Но в результате весь текст превратился в 1 строку, не может быть таким же, как веб-сайт.

Что я хочу : "Когда я использую getText(), Я хочу, чтобы только тег <br> был НЕ удалять . Просто только заменить на перевод строки (\ n) "

Если у вас есть идея, пожалуйста,помогите мне.

Образец текста ↓

# - This is text of before getText() -------
<dd class="resbody">
<a class="auto" href="/a/Linux">Linux</a>勉強するならCは当然として<br/><a class="auto" href="/a/Python">Python</a>も押さえておかないと<br/>大変になるかなあと感じている。

</dd>

# - This is text of after getText() -------
Linux勉強するならCは当然としてPythonも押さえておかないと大変になるかなあと感じている

# - This is "What I want" after getText() -----
Linux勉強するならCは当然として
Pythonも押さえておかないと
大変になるかなあと感じている。

Мой код ↓

soup = BeautifulSoup(r.content, "html.parser")

resheads = soup.find_all("dt", class_="reshead")
resbodys = soup.find_all("dd", class_="resbody")

formattedHead = []
formattedBody = []
resCount = 0

# 整形済みレスヘッダ部取得
for rhead in resheads:
    h = rhead
    h = h.getText()  # テキスト部分抽出
    h = h.replace('\n', '')  # 不要な改行を削除
    h = h.replace(' ', '')  # 不要な空白を削除
    h = h.replace(')', ') ')  # 整形
    h = h.replace('ID:', ' ID:')  # 整形
    formattedHead.append(h)

# 整形済みレス本体部取得
for rbody in resbodys:
    b = rbody
    b = b.getText() # <-- <br> is removed at here.
    b = b.strip()  # 前後から空白削除
    b = b.strip('\n')  # 前後から改行削除
    formattedBody.append(b)
    # カウントするのはheadでもbodyでもどちらでもいいのだが、この数が本ページにおけるレス数になる(通常は30だが最終ページでは少ない可能性あり)
    resCount += 1

К вашему сведению (Весь код): https://github.com/we-yu/sb.webscraping/blob/other/QuestionSrc/nicopedy_saver.py

1 Ответ

0 голосов
/ 03 марта 2019

Как насчет изменения кода в этом разделе

for rbody in resbodys:
    b = rbody
    b = b.getText() # <-- <br> is removed at here.
    b = b.strip()  # 前後から空白削除
    b = b.strip('\n')  # 前後から改行削除
    formattedBody.append(b)
    # カウントするのはheadでもbodyでもどちらでもいいのだが、この数が本ページにおけるレス数になる(通常は30だが最終ページでは少ない可能性あり)
    resCount += 1

на

# 整形済みレス本体部取得
for rbody in resbodys:
    # converting bs4 object to str
    b = str(rbody).replace("<br/>", "\n")  #changed here
    b = BeautifulSoup(b, "html.parser").getText() 
    formattedBody.append(b)
    # カウントするのはheadでもbodyでもどちらでもいいのだが、この数が本ページにおけるレス数になる(通常は30だが最終ページでは少ない可能性あり)
    resCount += 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...