2012-02-09 6 views
6

In che modo Evernote's Web Clipper plugin o Announcify plugin viene visualizzato solo l'articolo pertinente/post/parte del contenuto della pagina? Ecco uno screenshot dal plugin di Evernote:Ottieni solo una parte rilevante del sito web

enter image description here

Non importa quale sito si visita, che è completamente diverso da altri Wises di layout, questi sono sempre in grado di ottenere l'articolo/post/parte il contenuto della pagina.

Ogni sito web ha diversi layout, alcuni hanno barra laterale, alcuni non lo fanno, diversi tag, per parte principale/article/contenuti, un certo uso <article> o <section> di HTML5 altri usano <h1> > <p>, un certo uso <h2> > <p> e gli altri non usare affatto. Quindi ci sono diverse combinazioni di tag e layout di siti web.

Qualcuno può suggerire una soluzione per ottenere principale articolo/post/contenuto tramite Javascript o PHP?

+0

Questo è intelligente ... – Jivings

+0

Forse cerca il più grande 'div' o altro elemento nella pagina? – Jivings

+0

@Jivings: il div più grande conterrà l'intero sito, vogliamo essere in grado di trovare l'elemento che contiene la parte principale/articolo :) – Dev555

risposta

7

si può fare un semplice analisi DOM e cercare le <div> s e <p> s che contengono più testo (testo! Non il codice HTML!). Tuttavia, indipendentemente dal metodo intelligente che sceglierai per determinare dove si trova il contenuto, dovresti iniziare dal DOM parsing, quindi diamo un'occhiata al DOM che analizza le librerie PHP.

In ogni caso, si può partire da questo:

http://w-shadow.com/blog/2008/01/25/extracting-the-main-content-from-a-webpage/

sembra abbastanza buono, e dà spiegazioni tecniche, se si vuole scrivere qualcosa di tuo.

+0

Questa è una soluzione orribile. Ma probabilmente il migliore – Jivings

+1

@Jivings Perché orribile? –

+0

Perché l'analisi del DOM mi fa rabbrividire. Ma il tuo link sembra interessante. – Jivings

0

La maggior parte dei motori di blog fornisce a tale div un ID di "contenuto".

  • in javascript si sarebbe solo fare $ ('# contenuti')
  • In PHP si farebbe DOMDocument :: getElementById ('content').