使用 bs4 get_text() 删除 `\n`
removing `\n` using bs4 get_text()
from bs4 import BeautifulSoup
# current output as below
"""
'DOMINGUEZ, JONATHAN D. VS. RAMOS,\n
SILVIA M'
"""
# desired one is
# DOMINGUEZ, JONATHAN D. VS. RAMOS, SILVIA M
x = """<td width="350px" valign="top"
style="padding:.5rem;">
DOMINGUEZ, JONATHAN D. VS. RAMOS,
SILVIA M
</td>"""
soup = BeautifulSoup(x, 'lxml')
print(soup.select_one('td').get_text(strip=True, separator='\n'))
我检查了 docs,我相信 get_text()
可以做到这一点,但我不确定怎么做!
将separator='\n'
更改为separator=' '
您可能需要一个正则表达式,这也可以去掉多余的空格:
from bs4 import BeautifulSoup
import re
x = """<td width="350px" valign="top"
style="padding:.5rem;">
DOMINGUEZ, JONATHAN D. VS. RAMOS,
SILVIA M
</td>"""
soup = BeautifulSoup(x, 'lxml')
text = re.sub(r'\s+', ' ', soup.select_one('td').get_text(strip=True))
print(text)
给予:
DOMINGUEZ, JONATHAN D. VS. RAMOS, SILVIA M
只是为了提供一些上下文 - 在这种情况下 get_text(strip=True)
本身不会起作用,因为 <td>
中的文本不是由标签“分隔”的,更准确地说不是由 <br>
, 因此它将被识别为一个包含换行符的“多行”字符串。
由于这种情况,参数 strip=True
仅从整个字符串中去除左右字符。
基于以下 HTML,它可以按照您的方式使用空格作为分隔符:
x = """<td width="350px" valign="top"
style="padding:.5rem;">
DOMINGUEZ, JONATHAN D. VS. RAMOS,<br>
SILVIA M
</td>"""
soup = BeautifulSoup(x)
soup.td.get_text(' ',strip=True)
但是如果字符串中没有包含任何标记作为可能的分隔符,我建议使用 @Martin Evans 使用 [=16= 回答] 也能很好地处理多个空格。
re.sub(r'\s+', ' ', soup.select_one('td').get_text(strip=True))
from bs4 import BeautifulSoup
# current output as below
"""
'DOMINGUEZ, JONATHAN D. VS. RAMOS,\n
SILVIA M'
"""
# desired one is
# DOMINGUEZ, JONATHAN D. VS. RAMOS, SILVIA M
x = """<td width="350px" valign="top"
style="padding:.5rem;">
DOMINGUEZ, JONATHAN D. VS. RAMOS,
SILVIA M
</td>"""
soup = BeautifulSoup(x, 'lxml')
print(soup.select_one('td').get_text(strip=True, separator='\n'))
我检查了 docs,我相信 get_text()
可以做到这一点,但我不确定怎么做!
将separator='\n'
更改为separator=' '
您可能需要一个正则表达式,这也可以去掉多余的空格:
from bs4 import BeautifulSoup
import re
x = """<td width="350px" valign="top"
style="padding:.5rem;">
DOMINGUEZ, JONATHAN D. VS. RAMOS,
SILVIA M
</td>"""
soup = BeautifulSoup(x, 'lxml')
text = re.sub(r'\s+', ' ', soup.select_one('td').get_text(strip=True))
print(text)
给予:
DOMINGUEZ, JONATHAN D. VS. RAMOS, SILVIA M
只是为了提供一些上下文 - 在这种情况下 get_text(strip=True)
本身不会起作用,因为 <td>
中的文本不是由标签“分隔”的,更准确地说不是由 <br>
, 因此它将被识别为一个包含换行符的“多行”字符串。
由于这种情况,参数 strip=True
仅从整个字符串中去除左右字符。
基于以下 HTML,它可以按照您的方式使用空格作为分隔符:
x = """<td width="350px" valign="top"
style="padding:.5rem;">
DOMINGUEZ, JONATHAN D. VS. RAMOS,<br>
SILVIA M
</td>"""
soup = BeautifulSoup(x)
soup.td.get_text(' ',strip=True)
但是如果字符串中没有包含任何标记作为可能的分隔符,我建议使用 @Martin Evans 使用 [=16= 回答] 也能很好地处理多个空格。
re.sub(r'\s+', ' ', soup.select_one('td').get_text(strip=True))