python经常使用的网页解析技术包括_Python写爬虫与网页解析

Python写个简单爬虫,并作网页解析,还是非常高效的。

1. 获取HTML页面

urllib2是urllib得增强版,httplib更为底层,可以理解为urllib是对httplib的抽象。

httplib是一个相对底层的http请求模块,其上有专门的包装模块,如urllib内建模块,goto等第三方模块,但是封装的越高就越不灵活,比如urllib模块里请求错误时就不会返回结果页的内容,只有头信息,对于某些需要检测错误请求返回值的场景就不适用,所以就得用这个模块了。

httplib2,一个第三方的开源库,它比http.client更完整的实现了http协议,同时比urllib.request提供了更好的抽象。

示例,最基本的抓站,两句话就可以了:

import urllib2

content = urllib2.urlopen('http://XXXX').read()

这样可以得到整个 html

文档,关键的问题是我们可能需要从这个文档中获取我们需要的有用信息,而不是整个文档。这就需要解析充满了各种标签的 html。

2. 使用HTMLParser解析网页

HTMLParser是python用来解析html的模块。它可以分析出html里面的标签、数据等等,是一种处理html的简便途径。

HTMLParser采用的是一种事件驱动的模式,当TMLParser找到一个特定的标记时,它会去调用一个用户定义的函数,以此来通知程序处理。它

主要的用户回调函数的命名都是以handler_开头的,都是HTMLParser的成员函数。当我们使用时,就从HTMLParser派生出新的类,然

后重新定义这几个以handler_开头的函数即可。

handle_startendtag 处理开始标签和结束标签

handle_starttag

处理开始标签,比如

handle_endtag

处理结束标签,比如

handle_charref

处理特殊字符串,就是以开头的,一般是内码表示的字符

handle_entityref

处理一些特殊字符,以&开头的,比如  

handle_data

处理数据,就是data中间的那些数据

handle_comment

处理注释

handle_decl

处理

"-//W3C//DTD HTML 4.01

Transitional//EN"

handle_pi

处理形如<?instruction>的东西

下面给一个简单的示例:

#!/usr/bin/env python

#coding=utf-8

import HTMLParser

class MyParser(HTMLParser.HTMLParser):

def

__init__(self):

HTMLParser.HTMLParser.__init__(self)

def

handle_starttag(self, tag, attrs):

if tag == 'a':

for name, value in attrs:

if name == 'href':

print value

if __name__=='__main__':

content =

'

href="http://www.weibo.com"

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功能强大,值得深入学习一下。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值