免费注册 查看新帖 |

Chinaunix

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

求助一个python 正则表达式的 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-13 16:52 |只看该作者 |倒序浏览
我要提取 一个html 文件中 大致 格式是
  1. <UL><FONT SIZE=5>新学期在即,为了贯彻执行学校教材发放管理的工作要求,保证学校正常教学秩序。我教材中心已按照学校教务处下学期工作、计划和各院老师的要求,给全校学生准备了春季开学所需用的教材,请同学们在</FONT><FONT SIZE=5 FACE="Times New Roman">2</FONT><FONT SIZE=5>月</FONT><FONT SIZE=5 FACE="Times New Roman">12</FONT><FONT SIZE=5>日(周日),集体到教材中心直接领取或购买教材,价格优惠。希望各院辅导员通知各班长或学委,协助配合。如不清楚请尽快与我们联系。</FONT><BR>
  2. <FONT SIZE=5>办公地点:学五楼地下一层,教材中心办公室</FONT><BR>
复制代码
中的中文

我写的 python代码是  
其中我的正则还没有写好,先测试下能否提取网页内容,对于如上的格式 应该如何提取 ,我最初的的想法是 得到 <font ></font> 标签的元祖,然后我会用 strip_tags 函数去掉html 标签,然后得到正文
  1. # encoding:utf-8
  2. from BeautifulSoup import BeautifulSoup          # For processing HTML
  3. import urllib2
  4. import os
  5. import sys
  6. import re

  7. def strip_tags(html):
  8.     """
  9.     Python中过滤HTML标签的函数
  10.     >>> str_text=strip_tags("<font color=red>hello</font>")
  11.     >>> print str_text
  12.     hello
  13.     """
  14.     from HTMLParser import HTMLParser
  15.     html = html.strip()
  16.     html = html.strip("\n")
  17.     result = []
  18.     parser = HTMLParser()
  19.     parser.handle_data = result.append
  20.     parser.feed(html)
  21.     parser.close()
  22.     return ''.join(result)




  23. # re_match_str = '(<FONT|<TITLE)[a-zA-Z]*>[A-Za-z0-9]*</(FONT|TITLE)>'
  24. re_match_str = '<FONT\s*\S*>[a-zA-Z]*'
  25. fp = open('1.htm','r')
  26. #fp = urllib2.urlopen('http://www.bupt.edu.cn/')
  27. html = fp.read()
  28. #htmp_utf = unicode(html, "gbk").encode("utf8")
  29. soup = BeautifulSoup(html)
复制代码
但是结果出现 '<FONT SIZE=5>\xe5\x8a\x9e\xe5\x85\xac\xe5\x9c\xb0\xe7\x82\xb9\xef\xbc\x9a\xe5\xad\xa6\xe4\xba\x94\xe6\xa5\xbc\xe5\x9c\xb0\xe4\xb8\x8b\xe4\xb8\x80\xe5\xb1\x82\xef\xbc\x8c\xe6\x95\x99\xe6\x9d\x90\xe4\xb8\xad\xe5\xbf\x83\xe5\x8a\x9e\xe5\x85\xac\xe5\xae\xa4</FONT><BR>', '<FONT SIZE=5>\xe6\x9c\x88</FONT>', '<FONT SIZE=5>\xe6\x97\xa5\xef\xbc\x8c</FONT>', '<FONT SIZE=5>\xef\xbc\x9a</FONT>', '<FONT SIZE=5>\xe2\x80\x94\xe2\x80\x94</FONT>', '<FONT SIZE=5>\xef\xbc\x9a</FONT>', '<FONT SIZE=5>\xe6\x9c\x88</FONT>', '<FONT SIZE=5>\xe6\x97\xa5\xe6\xad\xa3\xe5\xb8\xb8\xe6\x97\xb6\xe9\x97\xb4\xe5\x8a\x9e\xe5\x85\xac</FONT><BR>', '<FONT SIZE=5>\xe7\x94\xb5</FONT>', '<FONT SIZE=5>\xe8\xaf\x9d\xef\xbc\x9a</FONT>', '<FONT SIZE=5>\xef\xbc\x8c</FONT>', '<FONT SIZE=5>\xe8\x81\x94</FONT>', '<FONT SIZE=5>\xe7\xb3\xbb</FONT>', '<FONT SIZE=5>\xe4\xba\xba\xef\xbc\x9a\xe6\x9d\x8e\xe8\x80\x81\xe5\xb8\x88</FONT><BR>'
应该如何解决

论坛徽章:
0
2 [报告]
发表于 2012-02-13 17:55 |只看该作者
提取font标签内容不是挺简单的吗
  1. #!/usr/bin/env python
  2. #coding=utf-8

  3. from BeautifulSoup import BeautifulSoup
  4. def main():
  5.     html='''
  6.         <UL><FONT SIZE=5>新学期在即,为了贯彻执行学校教材发放管理的工作要求,保证学校正常教学秩序。我教材中心已按照学校教务处下学期工作、计划和各院老师的要求,给全校学生准备了春季开学所需用的教材,请同学们在</FONT><FONT SIZE=5 FACE="Times New Roman">2</FONT><FONT SIZE=5>月</FONT><FONT SIZE=5 FACE="Times New Roman">12</FONT><FONT SIZE=5>日(周日),集体到教材中心直接领取或购买教材,价格优惠。希望各院辅导员通知各班长或学委,协助配合。如不清楚请尽快与我们联系。</FONT><BR>
  7.     <FONT SIZE=5>办公地点:学五楼地下一层,教材中心办公室</FONT><BR>
  8.     '''.decode('utf-8')
  9.     soup = BeautifulSoup(html)
  10.     allfonttext=soup.findAll('font')
  11.     if len(allfonttext)<=0:
  12.         print 'not found text'
  13.         return 1
  14.     plist=[x.renderContents() for x in allfonttext]
  15.     print ''.join(plist)

  16. if __name__ == '__main__':
  17.     main()

复制代码

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
3 [报告]
发表于 2012-02-13 19:32 |只看该作者
正则不是万能的,为什么不用标准库HTMLParser ?

论坛徽章:
0
4 [报告]
发表于 2012-02-14 08:00 |只看该作者
用unicode编码试试?

论坛徽章:
0
5 [报告]
发表于 2012-02-14 09:52 |只看该作者
回复 4# siage

恩 最后的乱码的情况 是unicode 编码解决了


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP