使用 python 解析 HTML 文档
Parsing an HTML Document with python
我是 python 的新手,我正在尝试解析 HTML 文档以删除标签,我只想保留报纸上的标题和 body我之前在电脑上下载过的网站。
我正在使用我在文档中找到的 class HTML 解析器,但我不知道如何很好地使用它,我不太了解这种语言:(
这是我的代码:
#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”和很多行“”。但是当我尝试检查一行是否为空格时,它 returns false 即使两个变量出现在调试器上完全相同。
我不知道为什么会这样,但如果有人能帮我解析一下,那就太好了
根据您提供的代码,您似乎正在尝试打开您拥有的 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)
Python HTML 解析器要求提要是一个字符串。
您可以做的是将您拥有的整个 HTML 复制粘贴到 Feed 中。可能不是最佳实践,但它应该读取和解析 html
parser.feed("THE ENTIRE HTML AS STRING HERE")
希望对您有所帮助
编辑————-
您是否尝试过将 html 放入字符串中,然后在字符串上调用 str.strip()
以删除字符串前导和尾随的所有空格。
仅供参考,您还可以使用 sentence.replace(“ “, “”)
从字符串
中删除所有空格
希望对您有所帮助
我是 python 的新手,我正在尝试解析 HTML 文档以删除标签,我只想保留报纸上的标题和 body我之前在电脑上下载过的网站。
我正在使用我在文档中找到的 class HTML 解析器,但我不知道如何很好地使用它,我不太了解这种语言:(
这是我的代码:
#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”和很多行“”。但是当我尝试检查一行是否为空格时,它 returns false 即使两个变量出现在调试器上完全相同。
我不知道为什么会这样,但如果有人能帮我解析一下,那就太好了
根据您提供的代码,您似乎正在尝试打开您拥有的 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)
Python HTML 解析器要求提要是一个字符串。 您可以做的是将您拥有的整个 HTML 复制粘贴到 Feed 中。可能不是最佳实践,但它应该读取和解析 html
parser.feed("THE ENTIRE HTML AS STRING HERE")
希望对您有所帮助
编辑————-
您是否尝试过将 html 放入字符串中,然后在字符串上调用 str.strip()
以删除字符串前导和尾随的所有空格。
仅供参考,您还可以使用 sentence.replace(“ “, “”)
从字符串
希望对您有所帮助