После получения URL-адресов для различных блогов, страниц Tumblr и WordPress я столкнулся с некоторыми проблемами при обработке HTML-страниц. Дело в том, что я хочу различать содержание, заголовок и дату каждого поста в блоге. Возможно, я смогу получить дату с помощью регулярных выражений, но сейчас так много пользовательских сценариев, которые используют HTML-классы и структуру.

У кого-нибудь есть решение, которое может помочь?

3
goh 17 Июн 2010 в 06:41

3 ответа

Лучший ответ

Не используйте регулярные выражения. Используйте парсер. lxml действительно быстрый.

На самом деле, если ваши сайты публикуют каналы Atom или RSS, проанализируйте их; они имеют четко определенную структуру, которая позволяет легко получать данные, которые вы пытаетесь получить.

ОБНОВИТЬ:

Часто вы можете найти <link> для канала в HTML-коде поста блога. Найдите что-то похожее на следующее (точное значение type может отличаться в зависимости от Atom, RSS и т. Д.):

<link rel="alternate" type="application/atom+xml" title="My Weblog feed" href="/feed/" />

В <head> документа. Если вы найдете канал, используйте Универсальный анализатор каналов, как рекомендует @Alex Martelli.

Да, и вы можете посмотреть это видео PyCon.

2
Hank Gay 17 Июн 2010 в 03:21

Я думаю, что вы должны изменить свой подход. Вместо анализа html-страницы, почему бы не проанализировать RSS-канал? В WordPress это встроено и уже содержит необходимую информацию, такую как названия, автор, даты и т. Д.

Вы по-прежнему можете использовать регулярные выражения для анализа RSS-каналов или использовать существующие модули Python, такие как Универсальный анализатор каналов.

1
Benjamin Intal 17 Июн 2010 в 02:59

Если это вообще возможно, используйте вместо этого блоги RSS или Atom - они имеют хорошо структурированный XML, а не плохо структурированный HTML и Универсальный синтаксический анализатор каналов очень полезен для получения содержимого каналов в Python.

Если в каком-либо блоге отсутствует канал (или канал действительно недостаточен), и у вас есть для анализа его HTML (вздох!), Лучшим подходом является BeautifulSoup (используйте последний 3.0.*, не a 3.1 - почему, смотрите здесь) - не самый быстрый, но самый устойчивый перед очень плохо сформированный HTML (и я подозреваю, что тот же тип блога, в котором отсутствует канал, может иметь гнилой HTML). lxml, библиотека @Hank рекомендует, включает в себя копию BeautifulSoup, я верю, но, если это все, что вы собираетесь получить, зачем беспокоиться об установке целого, когда вам нужна только часть? - )

3
Alex Martelli 17 Июн 2010 в 02:58