Domanda

Questa non è davvero una domanda di programmazione, più di una algoritmica.

Il problema: trovare il " content " sezione di una pagina HTML.

Per " content " Intendo il dom che contiene il contenuto della pagina visto dagli umani, senza il rumore, semplicemente il & Quot; contenuto effettivo della pagina & Quot ;. So che il problema non è ben definito, ma continuiamo ... Ad esempio nei siti di blog, questo è di solito facile, quando si naviga verso un post specifico di solito si hanno alcune barre degli strumenti nella parte superiore della pagina, forse alcuni elementi di navigazione su LHS e quindi si ha il div che contiene il contenuto. Cercare di capirlo dall'HTML può essere complicato. Fortunatamente, tuttavia, la maggior parte dei blog ha feed RSS e nel feed di questo post specifico troverai una & Lt; descrizione & Gt; sezione (o < content: codificato >) e questo è esattamente quello che vuoi. Quindi, per affinare la definizione di contenuto, questa è la cosa reale sulla pagina che contiene la parte interessante, rimuovendo tutti gli annunci, gli elementi di navigazione ecc. Quindi trovare contenuti dai blog è relativamente facile, supponendo che abbiano RSS. Lo stesso vale per altri siti di supporto RSS.

E i siti di notizie? In molti casi i siti di notizie hanno RSS, ma non sempre. Come si trovano i contenuti sui siti di notizie allora? Che dire di siti più generali? Molte pagine Web (ovviamente non tutte) hanno una sezione di contenuto e altre sezioni. Riesci a pensare a un buon algoritmo per trovare le sezioni & Quot; interessante & Quot; v / s il meno interessante? Forse le sezioni che cambiano da quelle che non cambiano?

Spero di essermi chiarito ... Grazie!

È stato utile?

Soluzione

Non l'ho fatto, ma questo sarebbe il mio approccio generale.

Come indicato, la mancanza di struttura nelle parti di contenuto visibili (ovvero non ha tag come header, navigation, ads) di HTML significa che è più difficile inserirsi nella chiave parte della pagina. Il mio approccio sarebbe quello di rimuovere prima gli elementi distinti che sicuramente hai deciso non sono interessanti. Un possibile elenco di esclusioni potrebbe essere:

  • meta elementi come !doctype, head (prendi title come un dato separato)
  • elementi dinamici come object, embed, applet, script
  • immagini (a seconda che si desideri conservarle o meno), img
  • elementi del modulo, ovvero form, input, textarea, label, legend, select, option

Un secondo passaggio potrebbe quindi iniziare ad escludere i nomi di id / classe div o ul che si verificano comunemente e tutti i tag al loro interno, come:

  • footer, meta, nav
  • topnav, sidebar, ad, adu
  • h1, h2, p (e altri nomi comunemente usati per gli annunci)

Questo spera rimuoverà una quantità significativa di decorazione dalla pagina. La prossima sfida è quella di provare a identificare il contenuto principale da ciò che resta, e suggerirei inizialmente di supporre che l'autore del sito stia usando correttamente l'HTML semantico, quindi usa principalmente i tag head td, div id="content" e il <= > tag di paragrafo.

Per identificare il contenuto, vorrei cercare qualsiasi tag di intestazione che è seguito da un tag di paragrafo. (Potrebbe trattarsi di id="maincontent" per i tuoi contenuti principali; il tag <=> viene spesso (e probabilmente erroneamente) utilizzato per visualizzare il nome o il logo del sito, ma si spera che sia stato eliminato escludendo le parti dell'intestazione della pagina.) Ogni paragrafo successivo deve essere aggiunto al contenuto corrente fino a quando non si raggiunge un'interruzione, che potrebbe essere la fine dell'elemento <=> o <=>, oppure potrebbe essere un elemento di intestazione dello stesso livello da cui è iniziato.

Dato che potrebbero esserci ancora diversi insiemi di contenuti che hai raccolto sulla pagina (forse il contenuto principale più il blurb sull'autore), devi testare e perfezionare un passaggio decisionale qui che sceglie il più probabile candidato. Questo sarà spesso semplicemente il più grande, sia in termini di lunghezza che di numero di elementi di paragrafo utilizzati.

Man mano che raccogli altri esempi di contenuti, puoi aggiungere misure di supporto al tuo algoritmo; questo potrebbe essere che noti che molte delle pagine usano <=> o <=>. Può anche essere utile conservare gli elementi secondari di contenuto che hai rilevato, in modo che se alcuni siti hanno un modo curioso di strutturare il contenuto, quindi una volta aggiunto un catcher nel tuo algoritmo, può essere eseguito nuovamente su questo contenuto del sito.

Altri suggerimenti

Un sito ben strutturato avrà le sue aree comuni riutilizzando lo stesso codice, ad es. navigazione, intestazione e così via

Quando hai una pagina di destinazione che desideri analizzare, prova a sfogliare alcune altre pagine sotto lo stesso dominio / sottodominio e trova elementi comuni a tutte le pagine. Questi sono i rumori di cui vuoi sbarazzarti.

Quindi puoi dare un'occhiata a ciò che rimane, per vedere se sono emersi dei rumori. Quando hai raccolto una quantità ragionevole di quei dati, prova a trovare qualche modello in essi. Affina la tua logica e ripeti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top