【问题标题】:How do I get the link and title from this (part of) html string in python如何从python中的这个(部分)html字符串获取链接和标题
【发布时间】:2011-08-28 19:54:04
【问题描述】:

我正在用 python 为 xbmc 编写一个插件。我有一个字符串列表,格式为:
<a href="/www.link.to/something">name of link</a>

通过使用美丽的石汤(代码的相关部分):

 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('&lt;a href="(.+?)"&gt;(.+?)&lt;/a&gt;').findall(link.string)
但我得到的只是match=[]

我做错了什么?

注意: 我知道我应该正则表达式 html 代码,但我不确定这个“规则”对小字符串是否有效。此外,出于某种原因,这几乎是 xbmc 插件编写的标准,我认为这是有原因的。

【问题讨论】:

  • 如果 link.string 类似于 链接名称 ,正则表达式的模式与它们匹配是正确的。但是不要调用标识符为'match'的对象,我不认为你重写了re的方法match,但这很危险
  • 你应该使用for i,prog in enumerate(programs):

标签: python html-parsing xbmc


【解决方案1】:

为什么不让 BeautifulSoup 为您提供 href attributeelement contents

【讨论】:

  • 很棒的工具。但是,我的问题中仍然需要字符串 name of link
  • 这也在 same docs 中。用 docs 中的粘贴编辑了答案。
  • 我在您回复我之前大约 15 分钟发现了一些内容,谢谢。不过我还是有问题。我认为这与网页的希伯来语有关。我得到的答案是 [u'\u50e0...'] 格式,我不知道如何将其转换为 unicode 字符串。
  • 不,它不起作用。我玩弄了它,但我无法将其转换为希伯来语。我会问一个新问题
【解决方案2】:

最简单的方法是使用lxml:

from lxml.html import fromstring

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

【讨论】:

  • lxml 比 BeautifulSoup 慢,它本身比纯正则表达式慢。有一次我测量到 lxml 比使用唯一正则表达式的代码慢 100 倍。
  • @eyquem 嗯,不知道
猜你喜欢
  • 2011-07-28
  • 1970-01-01
  • 2012-11-08
  • 2012-07-23
  • 1970-01-01
  • 1970-01-01
  • 2012-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多