【问题标题】:Retrieving first urban dictionary result for a term in python在python中检索一个术语的第一个城市字典结果
【发布时间】:2012-02-13 09:31:04
【问题描述】:

我编写了一个非常简单的代码来获取urbandictionary.com 上任何术语的第一个结果。我首先写了一个简单的东西来看看他们的代码是如何格式化的。

def parseudtest(searchurl):    
    url = 'http://www.urbandictionary.com/define.php?term=%s' %searchurl
    url_info = urllib.urlopen(url)
    for lines in url_info:
        print lines

为了测试,我搜索了'cats',并将其用作变量searchurl。我收到的输出当然是一个巨大的页面,但这是我关心的部分:

<meta content='He set us up the bomb. Also took all our base.' name='Description' />

<meta content='He set us up the bomb. Also took all our base.' property='og:description' />

<meta content='cats' property='og:title' />

<meta content="http://static3.urbandictionary.com/rel-1e0b481/images/og_image.png" property="og:image" />

<meta content='Urban Dictionary' property='og:site_name' />

如您所见,“元内容”元素第一次出现在网站上时,它是搜索词的第一个定义。所以我写了这段代码来检索它:

def parseud(searchurl):    
    url = 'http://www.urbandictionary.com/define.php?term=%s' %searchurl
    url_info = urllib.urlopen(url)
    if (url_info):
        xmldoc = minidom.parse(url_info)
    if (xmldoc):
        definition = xmldoc.getElementsByTagName('meta content')[0].firstChild.data
        print definition

由于某种原因,解析似乎无法正常工作,并且每次都会遇到错误。这尤其令人困惑,因为该站点似乎使用与我已成功从中检索特定数据的其他站点基本相同的格式。如果有人能帮我弄清楚我在这里搞砸了什么,将不胜感激。

【问题讨论】:

    标签: python xml-parsing


    【解决方案1】:

    由于您不提供所发生错误的回溯,因此很难具体说明,但我认为尽管该站点声称是 XHTML,但它实际上并不是有效的 XML。您最好使用Beautiful Soup,因为它是为解析 HTML 而设计的,并且可以正确处理损坏的标记。

    【讨论】:

      【解决方案2】:

      我从未使用过 minidom 解析器,但我认为问题在于您调用:

      xmldoc.getElementsByTagName('meta content')
      

      虽然标签名称是meta,但content 只是第一个属性(您的html代码突出显示很好)

      尝试用以下内容替换该位:

      xmldoc.getElementsByTagName('meta')
      

      【讨论】:

      • 您的回答绝对正确,但即使我使用了正确的标签名称,它也不会起作用。问题是页面是无效的 XML,所以我下载并实现了 Beautiful Soup,现在就可以了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-24
      • 1970-01-01
      相关资源
      最近更新 更多