在Python中获取Urban Dictionary术语的首个结果
我写了一段简单的代码,用来获取在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' />
如你所见,网站上第一次出现“meta content”这个元素时,就是我搜索词的第一个定义。所以我写了这段代码来获取它:
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
但不知为什么,解析似乎一直不工作,每次都会遇到错误。这让我特别困惑,因为这个网站的格式基本上和我之前成功获取数据的其他网站是一样的。如果有人能帮我找出我哪里搞错了,我将非常感激。
2 个回答
1
我从来没有使用过minidom解析器,但我觉得问题在于你调用了:
xmldoc.getElementsByTagName('meta content')
当标签名是meta
时,content
只是第一个属性(这在你高亮显示的HTML代码中表现得很清楚)。
试着把那部分替换成:
xmldoc.getElementsByTagName('meta')
1
因为你没有提供错误的详细信息,所以很难给出具体的建议。不过我猜虽然这个网站说它是XHTML,但实际上可能并不是有效的XML格式。你可以考虑使用Beautiful Soup,因为它是专门用来解析HTML的,可以很好地处理那些格式不太正确的代码。