找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 3451|回复: 1

[已解决] python3 初学者:Lxml和BeautifulSoup解析网页出问题输出有问题...

1

主题

1

帖子

1

积分

贫民

积分
1
Protoss_Sine 发表于 2017-4-12 16:13:55 | 显示全部楼层 |阅读模式
各位大神好:
下面这几句代码输出网页解析的结果为什么结果很难看:
import lxml.html
broken_html = '<ul class=country><li>area<li>population</ul>'
tree = lxml.html.fromstring(broken_html)
cc = lxml.html.tostring(tree, pretty_print=True, method='html').decode()
print(cc)

下面是输出结果:
<ul class="country">
<li>area</li>
<li>population</li>
</ul>

尽管闭合了标签,但是完全看不出嵌套关系了。上面的decode()是为了将前面的输出bytes类型转换成str类型。

而使用BeautifulSoup同样出错
from bs4 import BeautifulSoup
soup = BeautifulSoup(broken_html, 'html.parser')
ccc = soup.prettify()
print(ccc)
结果,标签都补错了:
<ul class="country">
<li>
  area
  <li>
   population
  </li>
</li>
</ul>

第一次发帖,求各位大神给我解释下,多谢!
回复

使用道具 举报

50

主题

1057

帖子

1108

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1108

活跃会员热心会员最佳导师默默耕耘突出贡献优秀版主荣誉管理论坛元老

blueelwang 发表于 2017-4-14 10:29:09 | 显示全部楼层
因为本身你的 broken_html = '<ul class=country><li>area<li>population</ul>' 就是不规范的, 而这两个库的内部处理方式不同,导致了对于不规范html处理上的不同。
这种情况建议两者结合使用,得到既正确又美观的代码输出
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表