Python中如何从HTML字符串中获取链接和标题?

3
我正在使用Python编写xbmc插件。我已经得到了一个字符串列表,格式如下:
<a href="/www.link.to/something">链接名称</a>

通过使用Beautiful Stone Soup(代码的相关部分):
 soup = BeautifulStoneSoup(link, convertEntities=BeautifulStoneSoup.XML_ENTITIES)
    programs = soup('ul')
    i = 0
    for prog in programs:
        i = i+1
        if i==(5+getLetterValue(name)):
            j = 0
            while j < len(prog('li')):
                li = prog('li')[j]
                link = li('a')[0]
getLeterValue是一个函数,它返回一个索引,该索引指示特定的“ul”标记放置在哪里(根据所需字母)。
现在我想拆分链接和文本。我尝试使用re.compile:
match=re.compile('<a href="(.+?)">(.+?)</a>').findall(link.string)
但我得到的只有match=[]
我做错了什么?
注意: 我知道我应该regexp html代码,但我不确定这个“规则”是否适用于小字符串。此外,由于某种原因,这几乎是xbmc插件编写的标准,我认为这其中一定有原因。

如果 link.string<a href="/www.link.to/something">链接名称</a> 这样,那么正则表达式的模式就正确匹配它们了。但是不要使用标识符 'match' 调用对象,我认为你没有覆盖 re 的方法 match,但这很危险。 - eyquem
你应该使用 for i,prog in enumerate(programs): - eyquem
2个回答

2

很棒的工具。不过,我仍然需要在我的问题中使用字符串“链接名称”。 - Yotam
这也在同一文档中。已经编辑了答案,并粘贴了文档内容。 - Ross Patterson
在你回答我的前15分钟,我已经找到了相关内容,谢谢。不过我还有一个问题。我认为这与网页上的希伯来语有关。我得到的答案格式是[u'\u50e0...'],我无法弄清如何将其转换为Unicode字符串。 - Yotam
不行,它没起作用。我试着玩了一下,但我无法将其转换为希伯来语。我会问一个新问题。 - Yotam

0
最简单的方法是使用lxml:
from lxml.html import fromstring

elem = fromstring(link.string)
print elem.attrib["href"]
print elem.text

lxml比BeautifulSoup慢,而BeautifulSoup本身比纯正则表达式慢。有一次我测量了使用唯一正则表达式的代码比lxml慢100倍。 - eyquem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接