HTMLParser python将数据转换为字符串?

时间:2016-01-10 15:17:44

标签: python html-parser

您好我使用以下python解析器来读取html文件

https://docs.python.org/2/library/htmlparser.html

class MyHTMLParser(HTMLParser):
def __init__(self):
    HTMLParser.__init__(self)
    self.inLink = False
    self.dataArray = []
    self.countLanguages = 0
    self.lasttag = None
    self.lastname = None
    self.lastvalue = None

def handle_starttag(self, tag, attrs):
    self.inLink = False
    if tag == 'window':
        for name, value in attrs:
            if name == 'mode':
                #value = 0
                #print(value)
                self.countLanguages += 1
                self.inLink = True
                self.lasttag = tag

def handle_endtag(self, tag):
    if tag == "window":
        self.inlink = False

def handle_data(self, data):
    self.data = data
    #print(self.data)
    print data
    if data.strip():
        self.inlink = False
        #print data

  parser = MyHTMLParser()
  input_file = open('xmlfile.xml')
  feed_data = input_file.read().strip()
  feed_data = parser.feed(feed_data)
  print(feed_data.data)
  input_file.close()

但是,我似乎找不到将html解析器返回的数据转换为字符串的方法。

我基本上使用html解析器来修饰属性,然后我想将数据转换为字符串 - 任何想法如何做到这一点?

我已尝试添加" self.data"到" handle_data"功能,但我似乎无法打印任何数据回来。有没有办法只打印解析器中的所有内容?

2 个答案:

答案 0 :(得分:0)

这是另一种可能适合您对此特定问题的需求的方式:

#!/usr/bin/env python3 
# -*- coding: utf-8 -*- 

import urllib.request 
url = "http://www.google.com"


with urllib.request.urlopen(url) as response:
    html = response.read().decode('utf-8')

print (html)

答案 1 :(得分:0)

阅读完源代码后,我发现feed()函数没有返回任何内容。

def feed(self, data):
    r"""Feed data to the parser.

    Call this as often as you want, with as little or as much text
    as you want (may include '\n').
    """
    self.rawdata = self.rawdata + data
    self.goahead(0)

所以我们可以把它重写为:

# -*- coding=utf-8 -*-
from HTMLParser import HTMLParser

class MyHTMLParser(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)
        self.Myrawdata = ""

    def feed(self, data):
        self.rawdata = self.rawdata + data
        self.Myrawdata = self.Myrawdata + data
        self.goahead(0)

    # your code...

parser = MyHTMLParser()
parser.feed('<div><style type="text/css">#python { color: green }</style></div>')
print "Rawdata:", parser.Myrawdata

不使用self.rawdata的原因是feed()结束时它将为空。