(2)Python笔记:内建模块HTMLParser实践
来源:互联网 发布:c语言库函数大全 chm 编辑:程序博客网 时间:2024/05/21 09:44
HTMLParser为Python的常用内建模块,使用时经常是继承HTMLParser并重写其方法。
其中常用方法如下:
handle_starttag(tag, attrs)处理开始标签,比如<input type="text" value="3">,tag即为input,attrs为储存对应属性,值的元组(tuple)列表(list):[('type':'text'),('value':'3')]handle_endtag(tag)处理结尾标签handle_data(data)处理标签内容handle_startendtag(tag, attrs)处理<img src="" />这类标签handle_comment(data)处理注释内容
#例子from html.parser import HTMLParserclass MyHTMLParser(HTMLParser): def __init__(self): HTMLParser.__init__(self) def handle_starttag(self, tag, attrs): """ recognize start tag, like <div> :param tag: :param attrs: :return: """ print("Encountered a start tag:", tag) print(attrs) def handle_endtag(self, tag): """ recognize end tag, like </div> :param tag: :return: """ print("Encountered an end tag :", tag) def handle_data(self, data): """ recognize data, html content string :param data: :return: """ print("Encountered some data :", data) def handle_startendtag(self, tag, attrs): """ recognize tag that without endtag, like <img /> :param tag: :param attrs: :return: """ print("Encountered startendtag :", tag) def handle_comment(self,data): """ :param data: :return: """ print("Encountered comment :", data)parser = MyHTMLParser()parser.feed('<html><head><title>Test</title></head>' '<body><h1>Parse me!</h1><img src = "" /><input type="text" value="3"></input>' '<!-- comment --></body></html>')parser.close()#输出
简单实际用例
从csdn博客视图列表中获取所有自己博文的名字+url
http://blog.csdn.net/yeyinglingfeng?viewmode=contents
主要思路就是利用各个函数的执行顺序
#查看网页源代码后可知所需数据在下面的html中,url在<a>标签中的href中,标题在内容中,因为HTMLParser在检索html时是按照出现的先后顺序触发各个方法的,所以在触发handle_starttag函数后,只要有内容,就会触发handle_data函数,所以可以利用这点来绑定url和title并存入list。PS:我这里多加的锁定可能有点多余。<h1> <span class="link_title"><a href="/yeyinglingfeng/article/details/78332515"> (1)Python笔记:抓取CSDN博文 </a> </span></h1>
#从csdn博客视图列表中获取所有自己博文的名字+url#http://blog.csdn.net/yeyinglingfeng?viewmode=contents#coding:utf-8from html.parser import HTMLParserimport urllib.request import reimport sysclass MyHTMLParser(HTMLParser): def __init__(self): HTMLParser.__init__(self) self.articleStr = [] self.check='N' self.num=0 def handle_starttag(self, tag, attrs): if tag =='a': if len(attrs)==1 and attrs[0][0]=='href' and '/yeyinglingfeng/article/details/' in attrs[0][1] and '#comments' not in attrs[0][1]: self.check='Y' article={} article['url']='http://blog.csdn.net'+attrs[0][1] self.articleStr.append(article) self.num+=1 def handle_endtag(self, tag): pass def handle_data(self, data): if self.check=='Y': self.articleStr[-1]['articleTitle']=data.replace('\r\n','').strip() self.check='N' def handle_startendtag(self, tag, attrs): pass def handle_comment(self,data): passdef getHtmlInfo(url): print('url:'+url) return str(urllib.request.urlopen(url).read(),'utf-8')def saveInfo(info): try: with open('d:\\1\\csdnList.txt','w',encoding='utf-8') as file_write: file_write.write(info) except: print('error:something faile') html=getHtmlInfo("http://blog.csdn.net/yeyinglingfeng?viewmode=contents")parser = MyHTMLParser()parser.feed(html)parser.close()allInfo=''for each in parser.articleStr: allInfo+=each['articleTitle']+' url:'+each['url']+'\n'#print(allInfo)saveInfo(allInfo)print(str(parser.num))
保存的txt文件
阅读全文
0 0
- (2)Python笔记:内建模块HTMLParser实践
- 内建模块-HTMLParser
- Python之学习笔记(常用内建模块)
- Python之学习笔记(内建模块html,xml)
- python学习笔记(31)--内建模块datetime
- python 内建模块
- Python学习之内建模块(5):HTMLParser
- Python常用内建模块(datetime)
- Python 的内建模块
- Python常用内建模块
- Python 常用内建模块
- Python 内建模块 itertools
- python常用内建模块
- python学习笔记(十二) - 常用内建模块
- python笔记7--常用的内建模块
- Python常用内建模块——学习笔记
- 【Python】学习笔记——-13、常用内建模块
- python学习笔记7.5-内建模块struct
- String、StringBuffer与StringBuilder之间区别
- 数据结构项目二:停车场管理
- IntelliJ IDEA不能访问web资源目录解决方案
- Java 集合系列06之 Vector详细介绍(源码解析)和使用示例
- 对后台返回的json数据按月份分组并求和展示
- (2)Python笔记:内建模块HTMLParser实践
- 关于 MySQL LEFT JOIN 需要了解的三点
- Ext.form.Panel表单面板各组件介绍
- @RestController注解和@Controller注解的区别
- 安卓简单调用相机
- oracle11g ORA-28595 Extproc 代理 DLL 路径无效
- Jvm内存模型
- Java
- web颜色探究