2011-08-28 40 views
3

我正在为python编写xbmc的插件。我有一个字符串列表,格式为:
<a href="/www.link.to/something">name of link</a>如何从python的这个(部分)html字符串获取链接和标题

通过使用漂亮的石头汤(代码的相关部分):

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是返回其indidcates其中索引的功能这个特定的'ul'标签被放置(根据所需的字母)。

现在我想在链接和文本中拆分链接。我尝试使用re.compile:
match=re.compile('<a href="(.+?)">(.+?)</a>').findall(link.string)
但我得到的是match=[]

我做了什么错?

注: 我知道我应该正则表达式的HTML代码,但我不知道这``规则'是有效的小字符串。另外,出于某种原因,这几乎是xbmc插件编写的标准,我认为这是有原因的。

+0

如果** link.string **类似于** name of link **,那么正则表达式的模式正确匹配它们。但不要调用标识符为'match'的对象,我不认为你重写了**重新**的方法**匹配**,但这是危险的 – eyquem

+0

你应该使用''为我,编枚举(程序):'' – eyquem

回答

2

为什么不让BeautifulSoup给你HREF attributeelement contents

+0

伟大的工具。然而,我仍然需要字符串,在我的问题中,“链接的名称”。 – Yotam

+0

这也在*相同的文档*。用* docs *粘贴来编辑答案。 –

+0

在您回答我之前约15分钟,我发现有关内容,谢谢。但我仍然有问题。我认为这与网页上的希伯来文有关。我得到的答案是[u'\ u50e0 ...']的格式,我不知道如何将其转换为unicode字符串。 – Yotam

0

最简单的方法是使用LXML:

from lxml.html import fromstring 

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

** lxml **比BeautifulSoup慢,它本身比纯正则表达式慢。有一次,我测量** lxml **比使用独特正则表达式的代码慢100倍。 – eyquem

+0

@eyquem嗯,不知道 –

相关问题