从HTML页面中动态提取数据

2024-05-16 18:33:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个脚本,用这个自定义类从HTML文档(在本例中是Nagios状态页)中提取一些字符串/数据:

## tagLister.py

from sgmllib import SGMLParser
class TAGLister(SGMLParser):

    def reset(self):
        SGMLParser.reset(self)
        self.urls = []

    def start_td(self, attrs):
        CLS = [ v for k, v in attrs if k == 'class' ]
        if CLS:
            self.urls.extend(CLS)

只要找到<;td>;标记,start_td就会调用SGMLParser并查找CLASS属性。在

^{pr2}$

上面列出了在<td>标记中为CLASS属性找到的所有值。 有没有什么方法可以动态地分配td位(在start_td)和{}(作为k的值),以便使用optparse动态分配,如下所示:

tagLister.py -t td -k class

而不是静态编码?我打算从命令行[重新]将这个类用于任何标记(例如<a><div>等)和相关属性(例如hrefid等)。任何帮助都将不胜感激。在


Tags: py标记selfif属性defurlsstart
1条回答
网友
1楼 · 发布于 2024-05-16 18:33:06

一种选择是切换到lxml.html并使用XPath-结果将是一个列表。。。(而且由于XPath表达式只是一个字符串-它比玩弄类继承要容易得多)

>>> tag = 'a'
>>> attr = 'href'
>>> xpq = '//{}/@{}'.format(tag, attr)
>>> a = '<a href="test-or-something">hello</a><a>No href here</a><a href="something-else">blah</a>'
>>> import lxml.html
>>> lxml.html.fromstring(a).xpath(xpq)
['test-or-something', 'something-else']

如果你必须使用stdlib-那么你可以用HTMLParser做类似的事情

^{pr2}$

相关问题 更多 >