论坛首页 入门技术论坛

Python3.4网页解析之HTMLParse

浏览 5510 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2014-10-15  
使用python将网页抓取下来之后,下一步我们就应该解析网页,提取我们所需要的内容了,在python里提供了一个简单的解析模块HTMLParser类,使用起来也是比较简单的,解析语法没有用到XPath类似的简洁模式,但新手用起来还是比较容易的,看下面的例子:


现在一个模拟的html文件:
<pre name="code" class="html">
&lt;html&gt; &lt;title id='main' mouse='你好'&gt;我是标题&lt;/title&gt;&lt;body&gt;我是内容&lt;/body&gt;   &lt;/html&gt;
</pre>

需求是,提取出标题的属性值,以及内容:

代码如下:
<pre name="code" class="python">
import html.parser as h



class MyHTMLParser(h.HTMLParser):
    a_t=False
    def handle_starttag(self, tag, attrs):
        #print("开始一个标签:",tag)
        print()
        if str(tag).startswith("title"):
            print(tag)
            self.a_t=True
            for attr in attrs:
                print("   属性值:",attr)

    def handle_endtag(self, tag):
        if tag == "title":
            self.a_t=False
            #print("结束一个标签:",tag)

    def handle_data(self, data):
        if self.a_t is True:
            print("得到的数据: ",data)



p=MyHTMLParser()

p.feed("&lt;html&gt; &lt;title id='main' mouse='你好'&gt;我是标题&lt;/title&gt;&lt;body&gt;我是内容&lt;/body&gt;   &lt;/html&gt;")

p.close()

</pre>
运行结果如下:
<pre name="code" class="java">

title
   属性值: ('id', 'main')
   属性值: ('mouse', '你好')
得到的数据:  我是标题
</pre>


主要的技术就是继承了HTMLParser类,然后重写了里面的一些方法,来完成自己的业务,从上面的代码里,发现如果想获取某个标签的内容,还是比较麻烦的,当然这是python里面最简单的html解析方式,还有很多其他组件,scrapy等等,里面支持Xpath路径解析,使用起来非常简洁清爽。


解析代码学会之后,我们就可以将使用urllib包,抓取到的数据交给htmlparser解析,从而提取出我们所需要的内容。






论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics