我开始在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文件中的特定数据的实现代码的详细内容...