免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3860 | 回复: 2
打印 上一主题 下一主题

请教lxml.html中parse gb18030编码的文件 不出现body element [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-04-25 16:26 |只看该作者 |倒序浏览
本帖最后由 SNYH 于 2011-04-25 16:28 编辑

  1. import .....
  2. url = 'http://bbs.chinaunix.net/viewthread.php?tid=2309181&extra=page%3D1'
  3. f = urllib.urlopen(url)
  4. content = f.read().decode('gb18030').encode('utf-8')
  5. tree = lxml.html.parse(StringIO(content))
  6. print lxml.html.tostring(tree)
复制代码
也尝试过lxml.html.formstring等方式.
但每次都只能解析出一个只带title的格式
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml"><head><title>请教lxml.html中parse gb18030编码的文件 不出现body element</title></head></html>
复制代码
如果把url的内容先保存成一个文件,然后解析也可以正常解析.

试过纯英文的html可以正常解析


另外urllib 似乎很不好用?
经常出现  Name or service not known   抛出IO异常
(这个可能是校园网的网络不行导致不能解析dns)  


刚接触python  
以前用perl的HTML::TreeBuilder 直接就拿来用 根本就没不知道还会出现不能解析的问题..
lxml弄了快一天还没搞定...

请各位前辈指点一二

论坛徽章:
0
2 [报告]
发表于 2011-04-25 16:37 |只看该作者
如果不进行decode().encode() 可以读取到更多的element
但如果碰到中文地方就会出现
  1. UnicodeEncodeError: 'ascii' codec can't encode characters in position 4-6: ordinal not in range(128)
复制代码
错误

具体可将print lxml.html.tostring(tree)
该为
  for i in tree.iter():print i
查看

论坛徽章:
0
3 [报告]
发表于 2011-04-26 12:05 |只看该作者
改用html5lib 或者 BeautifulSoup做 parser
就没有问题了...

可能是 lxml自带的html parser不是很完善吧...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP