Python之HTML的解析(网页抓取一)

http://blog.csdn.net/my2010sam/article/details/14526223

---------------------

对html的解析是网页抓取的基础,分析抓取的结果找到自己想要的内容或标签以达到抓取的目的。

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

  • handle_startendtag  处理开始标签和结束标签
  • handle_starttag     处理开始标签,比如<xx>   tag不区分大小写
  • handle_endtag       处理结束标签,比如</xx>
  • handle_charref      处理特殊字符串,就是以&#开头的,一般是内码表示的字符
  • handle_entityref    处理一些特殊字符,以&开头的,比如 &nbsp;
  • handle_data         处理数据,就是<xx>data</xx>中间的那些数据
  • handle_comment      处理注释
  • handle_decl         处理<!开头的,比如<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
  • handle_pi           处理形如<?instruction>的东西

def handle_starttag(self,tag,attr):
        #注意:tag不区分大小写,此时也可以解析 <A 标签

        # SGMLParser 会在创建attrs 时将属性名转化为小写。

        if tag==‘a‘:
            for href,link in attr:
                if href.lower()=="href":

                        pass

 

1. 基本解析,找到开始和结束标签

[python] view plaincopy

  1. <span style="font-size:18px;">#coding:utf-8
  2. from HTMLParser import HTMLParser
  3. ‘‘‘‘‘
  4. HTMLParser的成员函数:
  5. handle_startendtag  处理开始标签和结束标签
  6. handle_starttag     处理开始标签,比如<xx>
  7. handle_endtag       处理结束标签,比如</xx>
  8. handle_charref      处理特殊字符串,就是以&#开头的,一般是内码表示的字符
  9. handle_entityref    处理一些特殊字符,以&开头的,比如
  10. handle_data         处理数据,就是<xx>data</xx>中间的那些数据
  11. handle_comment      处理注释
  12. handle_decl         处理<!开头的,比如<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
  13. handle_pi           处理形如<?instruction>的东西
  14. ‘‘‘
  15. class myHtmlParser(HTMLParser):
  16. #处理<!开头的内容
  17. def handle_decl(self,decl):
  18. print ‘Encounter some declaration:‘+ decl
  19. def handle_starttag(self,tag,attrs):
  20. print ‘Encounter the beginning of a %s tag‘ % tag
  21. def handle_endtag(self,tag):
  22. print ‘Encounter the end of a %s tag‘ % tag
  23. #处理注释
  24. def handle_comment(self,comment):
  25. print ‘Encounter some comments:‘ + comment
  26. if __name__==‘__main__‘:
  27. a = ‘<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\
  28. <html><head><!--insert javaScript here!--><title>test</title><body><a href="http: //www.163.com">链接到163</a></body></html>‘
  29. m=myHtmlParser()
  30. m.feed(a)
  31. m.close()
  32. 输出结果:
  33. Encounter some declaration:DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"
  34. Encounter the beginning of a html tag
  35. Encounter the beginning of a head tag
  36. Encounter some comments:insert javaScript here!
  37. Encounter the beginning of a title tag
  38. Encounter the end of a title tag
  39. Encounter the beginning of a body tag
  40. Encounter the beginning of a a tag
  41. Encounter the end of a a tag
  42. Encounter the end of a body tag
  43. Encounter the end of a html tag</span>

2. 解析html的超链接和链接显示的内容  

[python] view plaincopy

  1. <span style="font-size:18px;">#coding:utf-8
  2. from HTMLParser import HTMLParser
  3. class myHtmlParser(HTMLParser):
  4. def __init__(self):
  5. HTMLParser.__init__(self)
  6. self.flag=None
  7. # 这里重新定义了处理开始标签的函数
  8. def handle_starttag(self,tag,attrs):
  9. # 判断标签<a>的属性
  10. if tag==‘a‘:
  11. self.flag=‘a‘
  12. for href,link in attrs:
  13. if href==‘href‘:
  14. print "href:",link
  15. def handle_data(self,data):
  16. if self.flag==‘a‘:
  17. print "data:",data.decode(‘utf-8‘)
  18. if __name__ == ‘__main__‘:
  19. a = ‘<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\
  20. <html><head><!--insert javaScript here!--><title>test</title><body><a href="http: //www.163.com">链接到163</a></body></html>‘
  21. m=myHtmlParser()
  22. m.feed(a)
  23. m.close()
  24. 输出结果:
  25. href: http: //www.163.com
  26. data: 链接到163</span>

或:

[python] view plaincopy

    1. <span style="font-size:18px;">#coding:utf-8
    2. from  HTMLParser import HTMLParser
    3. import urllib2
    4. class myparser(HTMLParser):
    5. # 继承父类初始化方法,并添加一个tag属性
    6. def __init__(self):
    7. HTMLParser.__init__(self)
    8. self.tag = None
    9. def handle_decl(self,decl):
    10. print u"声明:",decl
    11. def handle_starttag(self,tag,attrs):
    12. print u"开始标签;",tag
    13. # 判断是否是a开头的标签
    14. if tag==‘a‘ and len(attrs):
    15. #设置 self.tag 标记
    16. self.tag=‘a‘
    17. for href,link in attrs:
    18. if href==‘href‘:
    19. print href+":"+link
    20. def handle_endtag(self,tag):
    21. print u"结束标签:",tag
    22. def handle_data(self,data):
    23. #处理 a 标签开头的数据
    24. if self.tag==‘a‘:
    25. print u"数据内容:",data.decode("utf-8")
    26. def handle_comment(self,comm):
    27. print u"注释:",comm
    28. if __name__ == ‘__main__‘:
    29. a = ‘<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\
    30. <html><head><!--insert javaScript here!--><title>test</title><body><a href="http: //www.163.com">链接到163</a><a href="http: //www.baidu.com">百度</a></body></html>‘
    31. m = myparser()
    32. m.feed(a)
    33. 结果:
    34. 声明: DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"
    35. 开始标签; html
    36. 开始标签; head
    37. 注释: insert javaScript here!
    38. 开始标签; title
    39. 结束标签: title
    40. 开始标签; body
    41. 开始标签; a
    42. href:http: //www.163.com
    43. 数据内容: 链接到163
    44. 结束标签: a
    45. 开始标签; a
    46. href:http: //www.baidu.com
    47. 数据内容: 百度
    48. 结束标签: a
    49. 结束标签: body
    50. 结束标签: html</span>
时间: 2024-07-29 13:52:03

Python之HTML的解析(网页抓取一)的相关文章

Python开发爬虫之动态网页抓取篇:爬取博客评论数据

以爬取<Python 网络爬虫:从入门到实践>一书作者的个人博客评论为例.网址:http://www.santostang.com/2017/03/02/hello-world/ 1)"抓包":找到真实的数据地址 右键点击"检查",点击"network",选择"js".刷新一下页面,选中页面刷新时返回的数据list?callback....这个js文件.右边再选中Header.如图: 其中,Request URL即

用python做网页抓取与解析入门笔记[zz]

(from http://chentingpc.me/article/?id=961) 事情的起因是,我做survey的时候搜到了这两本书:Computational Social Network Analysis和Computational Social Network,感觉都蛮不错的,想下载下来看看,但是点开网页发现这个只能分章节下载,晕,我可没时间一章一章下载,想起了迅雷的下载全部链接,试试看,果真可以把他们一网打尽,但是,sadly,迅雷下载的时候,文件名没办法跟章节名对应起来,晕,我可

一个极其简洁的Python网页抓取程序

paip. 混合编程的实现resin4 (自带Quercus ) 配置 php 环境 #---混合编程的类型 1.代码inline 方式 2.使用库/api  解析方式. #----配置resin 支持php resin4默认自动支持php.. 也能手动配置了.web.xml加php的servlet解析..参考Quercus让你的PHP开心在Servlet容器奔跑 #----配置 php.ini路线 运行t.php,,看见 Configuration File (php.ini) Path =>

用Python进行网页抓取

引言 从网页中提取信息的需求日益剧增,其重要性也越来越明显.每隔几周,我自己就想要到网页上提取一些信息.比如上周我们考虑建立一个有关各种数据科学在线课程的欢迎程度和意见的索引.我们不仅需要找出新的课程,还要抓取对课程的评论,对它们进行总结后建立一些衡量指标.这是一个问题或产品,其功效更多地取决于网页抓取和信息提取(数据集)的技术,而非以往我们使用的数据汇总技术. 网页信息提取的方式 从网页中提取信息有一些方法.使用API可能被认为是从网站提取信息的最佳方法.几乎所有的大型网站,像Twitter.

python自然语言处理1——从网络抓取数据

python自然语言处理1--从网络抓取数据 写在前面 本节学习python2.7 BeautifulSoup库从网络抽取数据的技术,检验之简而言之就是爬虫技术.网络编程是一门复杂的技术,在需要基础的地方,文中给出的链接地址,都是很好的教程,可以参考,我在这里不在重复发明轮子.本节的主旨在于: 帮助快速掌握基本爬虫技术,形成一条主线,能为自己的实验构造基础数据.掌握爬虫技术后,可以从网络抓取符合特定需求的数据供分析,这里学习的爬虫技术适用于数据挖掘.自然语言处理等需要从外部挖掘数据的学科. 1.

Web Scraping(网页抓取)基本原理 - 白话篇

本文主要介绍 Web Scraping 的基本原理,基于Python语言,大白话,面向可爱的小白(^-^). 易混淆的名称: 很多时候,大家会把,在网上获取Data的代码,统称为"爬虫", 但实际上,所谓的"爬虫",并不是特别准确,因为"爬虫"也是分种的, 常见的"爬虫"有两种: 网路爬虫 (Web Crawler),又称 Spider:Spiderbot 网页抓取 (Web Scraper),又称 Web Harvestin

基于Casperjs的网页抓取技术【抓取豆瓣信息网络爬虫实战示例】

CasperJS is a navigation scripting & testing utility for the PhantomJS (WebKit) and SlimerJS (Gecko) headless browsers, written in Javascript. PhantomJS是基于WebKit内核的headless browser SlimerJS则是基于Gecko内核的headless browser Headless browser: 无界面显示的浏览器,可以用于

网页抓取:PHP实现网页爬虫方式小结

来源:http://www.ido321.com/1158.html 抓取某一个网页中的内容,需要对DOM树进行解析,找到指定节点后,再抓取我们需要的内容,过程有点繁琐.LZ总结了几种常用的.易于实现的网页抓取方式,如果熟悉JQuery选择器,这几种框架会相当简单. 一.Ganon 项目地址: http://code.google.com/p/ganon/ 文档: http://code.google.com/p/ganon/w/list 测试:抓取我的网站首页所有class属性值是focus的

Python+Selenium实现股票板块数据模拟抓取

selenium 是一个web的自动化测试工具,支持多平台:windows.linux.MAC ,支持多浏览器:ie.ff.safari.opera.chrome,支持多语言:例如C.JAVA.Python等,支持分布式测试用例的执行,可以把测试用例分布到不同的测试机器的执行,相当于分发机的功能. 虽然Selenium本来是应用于自动化测试领域,但是因为Selenium可以实现Web交互操作,所以可以利用Selenium模拟Web抓取一些常规方式不能抓取的数据,例如一些页面生成后才会动态加载的数