Как получить URL-адреса из Dmoz ODP

Я хочу использовать базу данных URL-адресов, присутствующих в DMOZ ODP, для моего приложения. (массив строк URL или файл, содержащий то же самое). Есть ли какой-нибудь способ его получения (кроме копирования-вставки вручную)?

РЕДАКТИРОВАТЬ:

Есть ли скрипт / код для разбора файла rdf..

3 ответа

Взгляните на http://rdf.dmoz.org/, вам нужно найти способ разобрать RDF в вашей базе данных.

Я сделал это на днях, используя сценарии odp2db из программного обеспечения Стива. Они старые, но формат существенно не изменился, поэтому они работают нормально.

Я обнаружил, что мне не нужно делать iconv а также xmlclean.pl шаги, предложенные в файле readme, просто распаковали дампы и запустили structure2db.pl а также content2db.pl скрипты. Вам нужно будет создать таблицы базы данных вручную (для этого смотрите SQL в верхней части скрипта) и изменить детали соединения в скриптах перед началом работы.

С дампом середины января 2009 года я использовал 756 962 категорий и 4 436 796 веб-сайтов. Потребовалось некоторое время, чтобы пройти их все, но не слишком долго, хотя я обошелся без описания сайта, поскольку они мне не нужны. Также, возможно, стоит добавить индексы базы данных после создания таблиц, чтобы ускорить доступ позже. Необработанные файлы структуры и содержимого были сжаты 75 МБ и 300 МБ соответственно. 848 МБ и 2 ГБ соответственно.

Я на самом деле сделал это в Java. Я просто использовал SAX API для чтения файлов RDF. Это было довольно просто. В моем случае я хотел вытащить каждый URL, который был в теме с "Weblogs" в названии темы.

В основном, что было реализовать org.xml.sax.helpers.DefaultHandler

Затем для настройки кода вы делаете:

       InputSource is = new InputSource(new FileInputStream("filename.rdf"));
       XMLReader r = XMLReaderFactory.createXMLReader();
       r.setContentHandler(new MyHandlerClass());
       r.parse(is);

и это в значительной степени это. В моем классе обработчика я должен был реализовать:

  • startElement(String uri, String localName, String qName, Attributes attributes) затем у меня был оператор if, чтобы увидеть, был ли это тег "ExternalPage", и в этом случае я перешел в другое состояние, чтобы найти "topic","Title" и "Description". У меня был другой

  • characters(char[] ch, int start, int length) где я читаю в теме, заголовке и тексте описания в зависимости от того, какой из них был последний раз отправлен в startElement

  • endElement(String uri, String localName, String qName) где я проверил, какой элемент заканчивается, и если это ExternalPage, это означает конец текущего элемента.

Всего было 80-90 строк кода для базового разбора. Так легко написать. Он мог прожевать мультигигабайтные файлы в... Не помню, может быть, минуту или две? Если вы просто хотите запросить некоторые конкретные данные, может быть проще написать код для этого в вашем обработчике, а не пытаться загрузить его в БД.

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

Вы всегда можете заплатить одному из редакторов, и они вам помогут:)

Другие вопросы по тегам