Ответ 1
Есть два шага к тому, что делает Instapaper:
- Найдите основной контент на странице (исключая верхние и нижние колонтитулы, меню и т.д.)
- Из этого блока содержимого извлеките и отформатируйте текст
Чтобы найти блок контента (обычно некоторый элемент блока html, например div, содержащий текстовое содержимое ключевой страницы) Instapaper использует алгоритм, подобный тому, который используется readability. Вы можете посмотреть источник readability.js, чтобы узнать, что происходит, но по своей сути он пытается найти область на странице с помощью наивысшее соотношение текста и ссылки, хотя оно имеет и другие простые показатели подсчета очков (например, от верхней части головы, такие как отношение текста к запятым, пара-элементы и т.д.), которые входят в эвристику.
Как только вы определили элемент root node, с соответствующим содержимым, вам нужно отформатировать его, если вы хотите, вы можете просто вытащить элемент node, содержащий текст из исходного документа, и вставить его в ваш, но на самом деле вы, вероятно, захотите удалить существующие стили и применить свои собственные, для стандартного внешнего вида. Если вы хотите выводить как хороший текст, вы можете использовать Jericho Renderer.
update1. Я должен также упомянуть что-то еще, что делает Instapaper, - который следует за ссылками "разбивки на страницы" ( "следующие" или "1", "2", "3" ) статьи, чтобы их заключение, так что часть, которая может охватывать многие страницы в оригинале, будет предоставлена вам в виде единого документа.
update2 Недавно я столкнулся с этим сравнение алгоритмов извлечения текста p >