我想用python解析HTML

2024-05-28 22:57:54 发布

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

我有一个小班:

class HTMLTagStripper(HTMLParser):
    def __init__(self):
       self.reset()
       self.fed = []
    def handle_data(self, data):
       self.fed.append(data)
    def handle_starttag(self, tag, attrs):
       if tag == 'a':
           return attrs[0][1]
    def get_data(self):
       return ''.join(self.fed)

正在分析此HTML代码:

^{pr2}$

这是我得到的结果:long text click here
但我想得到:long text click somelink.com

有办法吗?在


Tags: textselfdatareturndeftagattrslong
3条回答

看看BeautifulSoup。。它会做到这一点,甚至更多。在

或者可以使用正则表达式/字符串操作来剥离所需的数据。从长远来看,使用像beauthoulsoup这样的东西会有回报的,尤其是如果你希望做更多这样的事情。在

这里有一种方法可以使用BeautifulSoup来提取HTML数据中的单一/仅链接(我不是这方面的专家,因此可能还有其他更好的方法-欢迎建议/更正)。在

from BeautifulSoup import BeautifulSoup
s = """<div id="footer">
       <p>long text.</p>
       <p>click <a href="somelink.com">here</a>
       </div>"""

soup = BeautifulSoup(s)
your_link = soup.find('a', href=True)['href']
print 'long text click', your_link

将打印:

long text click somelink.com

实际上,我正在检查这个新的html解析器库并想出了这个解决方案:

from htmldom import htmldom
dom = htmldom.HtmlDom().createDom( """<div id="footer">
<p>long text.</p>
<p>click <a href="somelink.com">here</a>
</div>""");
nodes = dom.find( "p" ).children( all_children = True ) # this makes all text nodes to be in the set.
for node in nodes:
    if node._is( "a" ):
        print( node.attr( "href" ).strip() )
    elif node._is( "text" ):
        print( node.getNode().text, end = '', sep = ' ' )

您可以从Sourceforge或从python包索引:HtmlDom下载库,该库使用python3.x,该库的文档不是很好,但可以理解。希望你喜欢答案:)

这对您无效:

x = re.compile(r'<.*?>')
stripped = x.sub('', html)

因为您还想从html标记中提取一些属性(如href)。在

正如莱文所指出的:你应该去追求美丽。在

相关问题 更多 >

    热门问题