Python解析html页面的库总结,Python爬虫及HTMLParser小结

target="_blank">WeiboSite'

my =

MyParser() my.feed(content)

3.

使用SGMLParser解析网页

SGMLParser也是Python自带的解析器,比HTMLParser更加易用。

下面给一个示例:

#!/usr/bin/env

python

import

urllib2 from sgmllib import SGMLParser

class

ListName(SGMLParser): def

__init__(self): SGMLParser.__init__(self) self.is_h4 = "" self.name = [] def

start_h4(self, attrs): self.is_h4 = 1 def

end_h4(self): self.is_h4 = "" def

handle_data(self, text): if self.is_h4 == 1: self.name.append(text)

listname =

ListName() listname.feed(content)

for item in

listname.name: print

item.decode('gbk').encode('utf8')

示例很简单,这里定义了一个叫做 ListName 的类,继承 SGMLParser 里面的方法。使用一个变量 is_h4 做标记判定

html 文件中的 h4 标签,如果遇到 h4 标签,则将标签内的内容加入到 List 变量 name 中。解释一下

start_h4() 和 end_h4() 函数,他们原型是 SGMLParser 中的

start_tagname(self,

attrs) end_tagname(self)

tagname

就是标签名称,比如当遇到

,就会调用 start_pre,遇到

,就会调用 end_pre。attrs 为标签的参数,以 [(attribute, value), (attribute,

value), ...] 的形式传回。

4.

使用pyQuery解析网页

pyQuery 是

jQuery 在 python 中的实现,能够以 jQuery 的语法来操作解析 HTML

文档,十分方便。使用前需要安装,easy_install pyquery 即可,或者 Ubuntu 下

sudo apt-get

install python-pyquery

下面是一个示例:

from pyquery

import PyQuery as pyq doc=pyq(url=r' http://list.taobao.com/browse/cat-0.htm') cts=doc('.market-cat') for i in cts: print

'====',pyq(i).find('h4').text()

,'====' for j in

pyq(i).find('.sub'): print pyq(j).text() , print

'\n'

5.

使用BeautifulSoup解析网页

有个头痛的问题是,大部分的网页都没有完全遵照标准来写,各种莫名其妙的错误令人想要找出那个写网页的人痛打一顿。为了解决这个问题,我们可以选择著名的

BeautifulSoup 来解析 html

文档,它具有很好的容错能力。BeautifulSoup功能强大,值得深入学习一下。

-----

目前htmlparser有两个已知的bug:

1.不能准确的分别开标签和"自闭标签",看下面代码:

from HTMLParser import HTMLParser

class MyHTMLParser(HTMLParser):

def handle_starttag(self,tag,attrs):

print 'begin tag',tag

def handle_startendtag(self,tag,attrs):

print 'begin end

tag',tag

str1='

'

str2='

'

parser=MyHTMLParser()

parser.feed(str1)  # 输出

"begin tag br"

parser.feed(str2)  # 输出

"begin end br"

2.不能处理中文属性,比如说,如果网页里有这么一段:

< input type="submit" value=跳转到 >

那么解析到这一行时就会出错。错误原因是正则表达式有误。

attrfind = re.compile(

r'/s*([a-zA-Z_][-.:a-zA-Z_0-9]*)(/s*=/s*'

r'(/'[^/']*/'|"[^"]*"|[-a-zA-Z0-9./,:;+*%?!&$/(/)_#=~@]*))?')

attrfind 没有匹配中文字符。

可以更改这个匹配以修正这个错误。sgmllib则不存在这种错误。

参考:

用python解析html http://blog.csdn.net/adrianfeng/article/details/5881850

Python中使用HTMLParser解析html实例

http://www.jb51.net/article/60867.htm

Python 用HTMLParser解析HTML文件

http://andylin02.iteye.com/blog/908170

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值