好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

我开始在Python中使用HTMLParser从网站中提取数据。

我得到了我想要的一切,除了两个HTML标签中的文本。

这是HTML标记的示例:


Swahili

还有其他以开头的标签。它们具有其他属性和值,因此我不想拥有它们的数据:


Thilo Schadeberg

该标记是表中的嵌入式标记。我不知道其他标签之间是否有任何区别。

我只需要某些名为'a'且属性为class =" Vocabulary"的标签中的信息,并且我想要标签中的数据,在示例中为" Swahili"。

所以我所做的是:

class AllLanguages(HTMLParser):

    '''

    classdocs

    '''

    #counter for the languages

    #countLanguages = 0

    def __init__(self):

        HTMLParser.__init__(self)

        self.inLink = False

        self.dataArray = []

        self.countLanguages = 0

        self.lasttag = None

        self.lastname = None

        self.lastvalue = None

        #self.text =""



    def handle_starttag(self, tag, attr):

        #print"Encountered a start tag:", tag      

        if tag == 'a':

            for name, value in attr:

                if name == 'class' and value == 'Vocabulary':

                    self.countLanguages += 1

                    self.inLink = True

                    self.lasttag = tag

                    #self.lastname = name

                    #self.lastvalue = value

                    print self.lasttag

                    #print self.lastname

                    #print self.lastvalue

                    #return tag

                    print self.countLanguages





    def handle_endtag(self, tag):

        if tag =="a":

            self.inlink = False

            #print"".join(self.data)


    def handle_data(self, data):

        if self.lasttag == 'a' and self.inLink and data.strip():

            #self.dataArray.append(data)

            #

            print data

程序将打印标签中包含的所有数据,但是我只希望标签中包含的数据具有正确的属性。

如何获取此特定数据?


好像您忘记默认在handle_starttag中设置self.inLink = False:


from HTMLParser import HTMLParser



class AllLanguages(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 == 'a':

            for name, value in attrs:

                if name == 'class' and value == 'Vocabulary':

                    self.countLanguages += 1

                    self.inLink = True

                    self.lasttag = tag


    def handle_endtag(self, tag):

        if tag =="a":

            self.inlink = False


    def handle_data(self, data):

        if self.lasttag == 'a' and self.inLink and data.strip():

            print data



parser = AllLanguages()

parser.feed("""

<html>

<head>Test</head>

<body>

Swahili

Thilo Schadeberg

English

Russian

</body>

</html>""")


打印:

Swahili

English

Russian

另外,看看:


刮y的

xml文件

美丽汤

希望有帮助。


 相关讨论

非常感谢。我希望它很小;)。我也尝试beautifulsoup,这也很完美。再次感谢你的帮助。

别客气。如果有帮助,请考虑接受答案,谢谢!

您是否建议使用特殊的解析器?我需要html文件的数据,并想将其写入xml文件中。您会使用哪一个?或解析器之一的优点是什么?

好吧,beautifulspoup和lxml是不错的html解析器。 lxml以其速度而闻名,beautifulsoup非常方便,但不支持xpath表达式。查看更多:blog.ianbicking.org/2008/03/30/python-html-parser-performanc??e,stackoverflow测试数据/questions/3577641/…,stackoverflow测试数据/questions/6494199/…。

好吧,我必须解析很多数据,因此beautifulsoup相当慢。但是我想我会尝试lxml。非常感谢

您可以尝试HTQL(http://htql.net)。查询:


"具有属性class =" Vocabulary"的名为'a'的标签,我希望标签内的数据为"


是:


:tx

python代码是这样的:


import htql

a=htql.query(page,":tx")

print(a)


查看更多关于使用python提取html文件中的特定数据的实现代码的详细内容...

  阅读:46次