用python解析HTML文档

时间:2019-02-07 20:22:50

标签: python html parsing html-parsing

我是python的新手,我试图解析HTML文档以删除标签,而我只是想保留以前从我的计算机上下载过的报纸网站的标题和正文。

我使用的是我在文档中找到的HTML Parser类,但是我不知道如何很好地使用它,我不太了解这种语言:(

这是我的代码:

#importa la clase HTMLParser
from html.parser import HTMLParser

class HTMLCleaner(HTMLParser):
    container = ""

    def handle_data(self, data):
        if (data == '\n'):
            pass
        elif (data == " "):
            pass
        else:
            self.container += data

        return self.container

parser = HTMLCleaner()

#se va a abrir un fichero para parsearlo
archivo = open("C://Users//jotab//OneDrive//Documentos//Git//SRI//SRI_PR0//coleccionESuja2019//es_26142.html", "r", encoding="utf8")


while True:
    line = archivo.readline()
    if line == "":
        break
    else:
        parser.feed(line)

print(parser.container)

之所以这样做,是因为解析后得到了很多行“ \ n”和很多行“”。但是,当我尝试检查一行是否为空格时,即使两个变量在调试器上的显示完全相同,它也会返回false。

我不知道为什么会这样,但是如果some1可以帮助我解析它,那就太好了

1 个答案:

答案 0 :(得分:0)

根据您提供的代码,您似乎正在尝试打开一个HTML文件。

而不是像您所做的那样逐行解析html文件。只需将整个HTML文件输入解析器即可。

from html.parser import HTMLParser

class MyHTMLParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        print("Encountered a start tag:", tag)

    def handle_endtag(self, tag):
        print("Encountered an end tag :", tag)

    def handle_data(self, data):
        print("Encountered some data  :", data)

parser = MyHTMLParser()

with open(r'C:\Users\...site_1.html', "r") as f:
    page = f.read()
    tree = html.fromstring(page)
parser.feed(tree)

Pythons HTML解析器要求提要是一个字符串。 您可以做的就是将您拥有的整个HTML复制粘贴到Feed中。可能不是最佳做法,但应阅读并解析html

parser.feed("THE ENTIRE HTML AS STRING HERE")

我希望这对您有帮助

编辑———— 您是否尝试过将html像原来一样放入一个字符串中,然后在该字符串上调用str.strip(),以删除该字符串开头和结尾的所有空格。

仅供参考,您还可以使用sentence.replace(“ “, “”)删除字符串中的所有空格

希望这会有所帮助