python3解析html_Python3.x网页分析HTMLParser基础用法

HTMLParser是python用来解析html的模块。它可以分析出html里面的标签、数据等等,是一种处理html的简便途径。HTMLParser采用的是一种事件驱动的模式,当HTMLParser找到一个特定的标记时,它会去调用一个用户定义的函数,以此来通知程序处理。它主要的用户回调函数的命名都是以handler_开头的,都是HTMLParser的成员函数。当我们使用时,就从HTMLParser派生出新的类,然后重新定义这几个以handler_开头的函数即可。这几个函数包括:

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

handle_starttag     处理开始标签,比如

handle_endtag       处理结束标签,比如

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

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

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

handle_comment      处理注释

handle_decl         处理

handle_pi           处理形如<?instruction>的东西

下面是利用HTMLParser抓取豆瓣电影的程序

# -*- coding: utf-8 -*-

import urllib2

from HTMLParser import HTMLParser

class MovieParser(HTMLParser):

def __init__(self):

HTMLParser.__init__(self)

self.movies = []

def handle_starttag(self, tag, attrs):

def _attr(attrlist, attrname):

for attr in attrlist:

if attr[0] == attrname:

return attr[1]

return None

if tag == 'li' and _attr(attrs, 'data-title') and _attr(attrs, 'data-category') == 'nowplaying':

movie = {}

movie['title'] = _attr(attrs, 'data-title')

movie['score'] = _attr(attrs, 'data-score')

movie['director'] = _attr(attrs, 'data-director')

movie['actors'] = _attr(attrs, 'data-actors')

self.movies.append(movie)

print('%(title)s|%(score)s|%(director)s|%(actors)s' % movie)

def nowplaying_movies(url):

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36'}

req = urllib2.Request(url, headers=headers)

s = urllib2.urlopen(req)

parser = MovieParser()

parser.feed(s.read())

s.close()

return parser.movies

if __name__ == '__main__':

url = 'http://movie.douban.com/nowplaying/xiamen/'

movies = nowplaying_movies(url)

import json

print('%s' % json.dumps(movies, sort_keys=True, indent=4, separators=(',', ': ')))

上面抓取热门电影的核心程序

def handle_starttag(self, tag, attrs):

def _attr(attrlist, attrname):

for attr in attrlist:

if attr[0] == attrname:

return attr[1]

return None

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值