python如何去除文本中的换行

我在使用python3爬虫提取文本时,遇到了文本内容中含有换行的符号,确切来说是:没看到换行符,但是它实际换行了,想请教怎么去除中间的这个换行。

网页源码为:

<div class="details_1221_d02">
            UNIQLO(日文假名发音:ユニクロ),日本服装品牌,由日本迅销公司建立于1963年,当年是一家销售西服的小服装店,现已成为国际知名服装品牌。[1] 
优衣库现任董事长兼总经理柳井正在日本首次引进了大卖场式的服装销售方式,通过独特的商品策划、开发和销售体系来实现店铺运作的低成本化。
            </div>

其中[1]后面,优衣库前面的内容是网页源码中自动给换行了。

然后我的写的代码为:

from selenium import webdriver
from bs4 import BeautifulSoup

url = 'http://www.innotree.cn/company/25.html'
browser = webdriver.Firefox()
browser.get(url)
html = browser.page_source
soup = BeautifulSoup(html, 'html.parser')
companybrief = soup.find(class_="details_1221_d02").get_text().strip()
print(companybrief)

运行结果是和div标签内的文本内容相同的,只是[1]后面换行的问题无法解决,这样的话影响到了我文件的存储结构(不该换行的时候它换了),想请问各位大神该怎么办,我试过这些方法:

companybrief = soup.find(class_="details_1221_d02").replace("\r\n","").get_text().strip()

结果是整个companybrief的内容都没有了,"\n"也不成功,replace()放在get_text()后面情况相同,总之不成功。我猜测是因为网页的这个文本内容本身看不到换行符,所以不成功,但是我不知道该怎么解决,是不是应该转码后再替换,但我又不会转码。

另外,有的时候这个div标签的内容中含有br标签,而不是直接的换行,那又该怎么解决呢?比如说:

<div class="details_1221_d02">
            搜房网(Fang.com)是全球最大的房地产家居网络平台,2010年9月在美国纽约证券交易所成功上市(股票代码SFUN)。目前拥有106个分公司,业务覆盖中国330多个城市。搜房网页面浏览量和独立访客数在同行业网站中排名首位。搜房网一直引领新房、二手房、家居、房地产研究等领域的互联网创新。
<br>搜房网主要产品有:搜房帮、搜房夜店、搜房委托等。
            </div>

请各位大神指教,感谢!

阅读 30.8k
5 个回答
#coding:utf-8
from selenium import webdriver
from bs4 import BeautifulSoup

url = 'http://www.innotree.cn/company/25.html'
browser = webdriver.Firefox()
browser.get(url)
html = browser.page_source

soup = BeautifulSoup(html, 'html.parser')
companybrief = soup.find(class_="details_1221_d02").get_text().strip()
ss=  companybrief.encode('utf-8')

uu = ss.replace('\n','')

print uu

这样就可以了,你原始打出来的 companybrief为 Unicode 格式,转成 utf-8之后,就可以进行字符串操作。现在的执行结果为

UNIQLO(日文假名发音:ユニクロ),日本服装品牌,由日本迅销公司建立于1963年,当年是一家销售西服的小服装店,现已成为国际知名服装品牌。[1] 优衣库现任董事长兼总经理柳井正在日本首次引进了大卖场式的服装销售方式,通过独特的商品策划、开发和销售体系来实现店铺运作的低成本化。

bs4我记得应该是支持xpath的,建议用xpath提取,可以解决你第二个问题——自动处理br标签的问题。而且xpath语法将更简洁,更严谨,专为提取xml/html标记文档而生。

比如你的第二段html标签,经过xpath提取/div/text()提取之后,会变成['搜房网(Fang.com)是全球最大的房地产家居网络平台,2010年9月在美国纽约证券交易所成功上市(股票代码SFUN)。目前拥有106个分公司,业务覆盖中国330多个城市。搜房网页面浏览量和独立访客数在同行业网站中排名首位。搜房网一直引领新房、二手房、家居、房地产研究等领域的互联网创新。','搜房网主要产品有:搜房帮、搜房夜店、搜房委托等。']

至于第一个问题,换行符跟操作系统有关系,unix/linux的换行符应该是\n,windows下的是\n\r,所以你应该优先试试\n

不确定的话也可以试试正则: someText.replace(r'(\r\n|\n|\r)',"");

经提示与百度,发现了问题所在,br标签同时解决,replace()放在后面就好,如下:

cpybrief = details_1221.find(class_="details_1221_d02").get_text().strip().replace('\\n','')
print(cpybrief)

import textwrap

print textwrap.fill(sample_text, width=10000)

width 用于设置多少个字符后换行

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题