[英]Python: Multiple white spaces remain after replacement?
从各种网站上抓取文本后,我想对这段文本进行规范化以进行分析。 我想做的一个步骤是用一个空格替换多个空格。
我知道这个话题在 Stack Overflow 上经常被提及。 但是,使用常见的方式,例如:
string = ' '.join(string.split())
要么
string = re.sub(' +', ' ', string)
似乎不会为每个网页产生预期的结果。 请在下面找到我使用的代码的摘录和 SEC 备案的示例,我无法做到没有多个空格。
import re
from selenium import webdriver
link = r"https://www.sec.gov/Archives/edgar/data/1800/000104746919001316/a2237648zdef14a.htm"
driver = webdriver.Chrome('./chromedriver')
driver.get(link)
x = driver.page_source
#Function to clean
def cleanhtml(raw_html):
cleanr = re.compile('<.*?>')
cleantext = re.sub(cleanr, '', raw_html)
return cleantext
#Cleaning
x = str(x).replace('<', ' <')
x = cleanhtml(x)
x = x.replace('<br>', ' ').replace(' ', ' ').replace('&', '&').replace('/\s\s+/g',' ').replace('•', ' ').replace("<", " ").replace("_", " ").replace("●", " ")
x = ' '.join(x.split())
#Results with persist to have multiple white spaces :-(
print(x)
注意:我刚刚编辑了我的问题,因为我之前的例子不合适! 感谢您到目前为止的回答!
由于更改的问题描述而更新:您应该使用 html 解析器来处理标签和 html 实体。 检索文本后,删除不需要的字符,例如 ndash、项目符号、多个空白字符:
import re
import bs4
from selenium import webdriver
link = r"https://www.sec.gov/Archives/edgar/data/1800/000104746919001316/a2237648zdef14a.htm"
driver = webdriver.Chrome('./chromedriver')
driver.get(link)
x = driver.page_source
soup = bs4.BeautifulSoup(x, 'html.parser')
text = soup.text
# you might also filter non-printable characters as explained here:
# https://stackoverflow.com/questions/92438/stripping-non-printable-characters-from-a-string-in-python
text = re.sub(r'[•●_—\u200B]+', ' ', text)
text = re.sub(r'\s+', ' ', text)
print(text)
我会尝试做这样的事情:
clean = ' '.join([word.strip() for word in not_clean.strip().split()])
这样,您不仅可以在空格处拆分,还可以清理每个拆分的单词和整个输入。
编辑:由于 OP 编辑了他们的问题,此答案不再解决问题。
import re
sample = '''<font color="#952369" size="1"><b>
<!-- COMMAND= GRID_ADD,"background-color:#952369;" -->
XXXXXXXXXXXXXXXXXXXXXXXXXXXXX </b></font>'''
def replace(match):
return ''
sample = re.sub('\s+', replace, sample)
print(sample)
# Output:
# <fontcolor="#952369"size="1"><b><!--COMMAND=GRID_ADD,"background-color:#952369;"-->XXXXXXXXXXXXXXXXXXXXXXXXXXXXX </b></font>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.