您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用python提取html文件中的特定数据的实现代码

5b51 2022/1/14 8:17:36 python 字数 6107 阅读 355 来源 www.jb51.cc/python

例如具有如下结构的html文件复制代码代码如下:<divclass=\'entry-content\'><p>感兴趣内容1</p><p>感兴趣内容2</p>……<p>感兴趣内容n</p></div><divclass=\'co

概述

python为我们提供了SGMLParser类,SGMLParser 将 HTML 分析成 8 类数据[1],然后对每一类调用单独的方法:使用时只需继承SGMLParser 类,并编写页面信息的处理函数

可用的处理函数如下


    def end_div(self):#遇到</div>
 self.flag = False

    def start_p(self,attrs):
        if self.flag == False:
            return
        self.getdata = True

    def handle_data(self,text):#处理文本
        if self.getdata:
            self.IDlist.append(text)

上面的思路存在一个bug
遇到</div>后 设置标记flag = False
如果遇到div嵌套怎么办?

在遇到第一个</div>之后标记flag = False,导致无法的到‘感兴趣内容'。
怎么办呢?如何判断遇到的</div>是和<div class='entry-content'>匹配的哪个呢?
很简单,</div>和<div>是对应的,我们可以记录他所处的层数。进入子层div verbatim加1,退出子层div  verbatim减1.这样就可以判断是否是同一层了。

修改后 如下

    def end_div(self):#遇到</div>
        if self.verbatim == 0:
            self.flag = False
        if self.flag == True:#退出子层div了,层数减1
            self.verbatim -=1

    def start_p(self,attrs):
        if self.flag == False:
            return
        self.getdata = True

    def end_p(self):#遇到</p>
        if self.getdata:
            self.getdata = False

    def handle_data(self,text):#处理文本
        if self.getdata:
            self.IDlist.append(text)

    def printID(self):
        for i in self.IDlist:
            print i

最后  建立了我们自己的类GetIdList后如何使用呢?
简单建立实例 t = GetIdList()
the_page为字符串,内容为html
t.Feed(the_page)#对html解析

t.printID()打印出结果

全部测试代码


##import urllib2
##import datetime
##vrg = (datetime.date(2012,2,19) - datetime.date.today()).days
##strUrl = 'http://www.nod32id.org/nod32id/%d.html'%(200+vrg)
##req = urllib2.Request(strUrl)#通过网络获取网页
##response = urllib2.urlopen(req)
##the_page = response.read()

the_page ='''<html>
<head>
<title>test</title>
</head>
<body>
<h1>title</h1>
<div class='entry-content'>
<div class= 'ooxx'>我是来捣乱的</div>
<p>感兴趣内容1</p>
<p>感兴趣内容2</p>
……
<p>感兴趣内容n</p>
<div class= 'ooxx'>我是来捣乱的2<div class= 'ooxx'>我是来捣乱的3</div></div>
</div>
<div class='content'>
<p>内容1</p>
<p>内容2</p>
……
<p>内容n</p>
</div>
</body>
</html>
'''
lister = GetIdList()
lister.Feed(the_page)
lister.printID()

执行后 输出

总结

以上是编程之家为你收集整理的使用python提取html文件中的特定数据的实现代码全部内容,希望文章能够帮你解决使用python提取html文件中的特定数据的实现代码所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶