Как извлечь информацию из ODP точно?

Я создаю поисковую систему в python.

Я слышал, что Google выбирает описание страниц из ODP ( Open Directory Project ), если Google не может определить описание с использованием метаданных со страницы … Я хотел сделать что-то подобное.

ODP – это онлайн-каталог из Mozilla, в котором есть описания страниц в сети, поэтому я хотел получить описания для своих результатов поиска из ODP. Как получить точное описание конкретного URL-адреса из ODP и вернуть тип python «None», если я не смог его найти (что означает, что ODP не знает, какую страницу я ищу)?

PS. есть URL-адрес, называемый http://dmoz.org/search?q=Your+Search+Params, но я не знаю, как извлечь информацию оттуда.

  • Какое лучшее приложение для поиска Django?
  • One Solution collect form web for “Как извлечь информацию из ODP точно?”

    Чтобы использовать данные ODP, вы загрузите дамп данных RDF . RDF – формат XML; вы должны индексировать этот дамп для сопоставления URL-адресов описаниям; Для этого я бы использовал базу данных SQL.

    Обратите внимание, что URL-адреса могут присутствовать в нескольких местах в дампе. Например, переполнение стека отображается дважды. Google использует текст из этой записи в качестве описания сайта, вместо этого использует Bing.

    Дамп данных, конечно, довольно большой. Используйте разумные инструменты, такие как метод ElementTree iterparse() для синтаксического анализа набора данных при добавлении записей в вашу базу данных. Вам действительно нужно искать элементы <ExternalPage> , используя подписи <d:Title> и <d:Description> .

    Использование lxml (более быстрая и полная реализация ElementTree), которая будет выглядеть так:

     from lxml import etree as ET import gzip import sqlite3 conn = sqlite3.connect('/path/to/database') # create table with conn: cursor = conn.cursor() cursor.execute(''' CREATE TABLE IF NOT EXISTS odp_urls (url text primary key, title text, description text)''') count = 0 nsmap = {'d': 'http://purl.org/dc/elements/1.0/'} with gzip.open('content.rdf.u8.gz', 'rb') as content, conn: cursor = conn.cursor() for event, element in ET.iterparse(content, tag='{http://dmoz.org/rdf/}ExternalPage'): url = element.attrib['about'] title = element.xpath('d:Title/text()', namespaces=nsmap) description = element.xpath('d:Description/text()', namespaces=nsmap) title, description = title and title[0] or '', description and description[0] or '' # no longer need this, remove from memory again, as well as any preceding siblings elem.clear() while elem.getprevious() is not None: del elem.getparent()[0] cursor.execute('INSERT OR REPLACE INTO odp_urls VALUES (?, ?, ?)', (url, title, description)) count += 1 if count % 1000 == 0: print 'Processed {} items'.format(count) 
    Python - лучший язык программирования в мире.