python 中,使用 beautifulSoup 获得的网页文本与在浏览器上看到的,格式不一样?

2016-10-14 16:46:13 +08:00
 vtoexsir
比如有一段 html 源码:
html='''<span id='sp1'>span1</span>
<span id='sp2'>span2</span>'''
注意如上 html 源码中,sp1 与 sp2 之间有个换行,并且 sp2 之前还有几个空格.
保存最 htm 文件,使用浏览器(ie firefox chrome)渲染后,得到的网页文本是:
span1 span2 #注意 span1 与 span2 之间有一个空格.

如果使用 beautifulSoup 获取网页文本,代码如下:
from bs4 import BeautifulSoup as bs
s=bs(html,'html5lib')
web_text=s.get_text()
print web_text
结果显示如下:
span1
span2
或者:print s.get_text(strip=True),则结果显示如下:
span1span2 #注意 span1 与 span2 之间没有空格

由此可见,使用 beautifulsoup 获取到网页文本与浏览器渲染后的网页文本,其格式是不一样的.
那么,要想使用 beautifulsoup 获取到和浏览器渲染后的网页文本的格式一样,该怎么操作呢?
希望方法具有普遍性,不仅仅是针对如上例子中的 htm 源码.
多谢!
3409 次点击
所在节点    Python
4 条回复
264768502
2016-10-14 21:23:19 +08:00
获取网页跟 bs 一点关系都没有
网页的渲染和 python 里的 print 不是一回事
leavic
2016-10-15 16:22:09 +08:00
请把浏览器的 js 禁用
vtoexsir
2016-10-17 11:32:15 +08:00
如果要获得网页源码渲染之后的网页文本,恐怕要使用类似 selenium 之类真的加载到浏览器,然后获取到.
这样相当耗资源,速度也慢.
我想使用 bs 来获得网页文本,而且要求格式与从网页上看到的一样.相对于使用 selenium,这样做可能快点吧.
Arthur2e5
2016-10-19 00:44:50 +08:00
https://stackoverflow.com/questions/16121001 ,直接插空格。
当然想模仿一下 br 处理的话还得再费点事。 strip 那玩意本来就是拿来吃空格的,别指望它……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/312819

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX