我使用BeautifulSoup通过python进行网页抓取。
问题是“ getText()时删除了所有<br>标签”。
我知道getText()函数仅提取文本。
但是结果是,所有文本都变成了1行,看不到与网站相同的文本。
我想要的:“当我使用getText()时,我只希望
标签是不删除。只需要替换为 >换行符(\ 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
FYI(完整代码):https://github.com/we-yu/sb.webscraping/blob/other/QuestionSrc/nicopedy_saver.py
答案 0 :(得分:0)
如何更改本节中的代码
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