Разбор HTML-документа с помощью Python - PullRequest
0 голосов
/ 07 февраля 2019

Я совершенно новичок в 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, даже если обе переменныепоявляются в отладчике точно так же.

Я не знаю, почему это происходит, но если кто-нибудь1 поможет мне разобрать это, было бы так здорово

1 Ответ

0 голосов
/ 07 февраля 2019

Судя по предоставленному вами коду, похоже, что вы пытаетесь открыть имеющийся у вас 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-код, который у вас есть, в канал.Не может быть лучшей практикой, но он должен читать и анализировать html

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

Надеюсь, это поможет

Редактировать ———- Вы пробовали вставить html в строку, как у вас, изатем вызывая str.strip() в строке, чтобы удалить все пробелы из начала и конца строки.

К вашему сведению, вы также можете использовать sentence.replace(“ “, “”), чтобы удалить все пробелы из строки

Надеюсь, что этопомогает

...