Получение первого урбанистического словарного результата для термина в питоне - PullRequest
1 голос
/ 13 февраля 2012

Я написал довольно простой код, чтобы получить первый результат для любого термина на 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

По какой-то причине синтаксический анализ, кажется, не работает и неизменно сталкивается с ошибкой каждый раз. Это особенно сбивает с толку, поскольку сайт, по-видимому, использует в основном тот же формат, что и другие сайты, с которых я успешно извлек определенные данные. Если бы кто-нибудь мог помочь мне выяснить, о чем я здесь пишу, это было бы очень признательно.

Ответы [ 2 ]

1 голос
/ 13 февраля 2012

Я никогда не использовал парсер minidom, но я думаю, что проблема в том, что вы звоните:

xmldoc.getElementsByTagName('meta content')

в то время как имя тега meta, content - это только первый атрибут (как хорошо видно при выделении вашего HTML-кода) .

Попробуйте заменить этот бит на:

xmldoc.getElementsByTagName('meta')
1 голос
/ 13 февраля 2012

Поскольку вы не предоставляете трассировку ошибок, которые возникают, сложно быть конкретным, но я предполагаю, что хотя сайт и претендует на XHTML, он на самом деле не является допустимым XML.Вам лучше использовать Beautiful Soup , так как он предназначен для анализа HTML и правильно обрабатывает сломанную разметку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...