2013-08-16 13 views
6

Ho bisogno di aiuto per affrontare un problema. Ho bisogno di un programma che, dato un sito, trovi ed estrae l'immagine "principale", cioè quella che rappresenta il sito. (Per dirlo è il più grande o prima l'immagine è talvolta ma non sempre vera).Come trovare ed estrarre l'immagine "principale" nel sito web

Come devo affrontare questo? Ci sono delle librerie che potrebbero aiutarmi con questo? Grazie!

+1

[jsoup] (http://jsoup.org/) .... – MadProgrammer

risposta

9

OPZIONE 1

Si potrebbe checkout Goose. Fa qualcosa di simile a ciò che Pocket e Readability fanno, cioè tenta di estrarre l'articolo principale da una determinata pagina web usando un insieme di euristiche. Apparentemente può anche estrarre l'immagine principale da quell'articolo, ma è un po 'incostante, quindi il 60% delle volte funziona ogni volta.

Era un progetto Java ma riscritto su Scala.

Dal readme

oca cercherà di estrarre le seguenti informazioni:

  • testo principale di un articolo
  • Immagine principale dell'articolo
  • qualsiasi film Youtube/Vimeo incorporato nell'articolo
  • Meta Descrizione
  • Meta tag
  • Pubblica Data

Provalo qui: http://jimplush.com/blog/goose


OPZIONE 2

Si potrebbe utilizzare un wrapper Java (per esempio GhostDriver) per l'esecuzione di un browser senza testa, ad esempio PhantomJS. Quindi, recupera il sito Web e trova l'elemento img con le dimensioni più grandi. This GhostDriver test case mostra come interrogare il DOM per gli elementi e ottenere la sua dimensione renderd.


OPZIONE 3

utilizzare una libreria come jsoup che ti aiuta analizzare HTML. Quindi ottenere il valore dell'attributo src da tutti i tag img. Richiedi ogni URL che trovi per un'immagine e misura le loro dimensioni. È probabile che quello con le dimensioni più grandi sia l'immagine principale del sito.

+0

Grazie per la risposta. Il problema è che, dice, "Goose è pensato per lavorare con singoli articoli, non con le home page", che è il tipo di opposto di quello di cui ho bisogno. – nodwj

+0

@nodwj Ho aggiornato la mia risposta con due nuovi suggerimenti per possibili approcci. – mqchen

0

Hai bisogno dell'intelligenza artificiale per farlo, Computer Vision vale a dire. È troppo grande per contenere una risposta. This link might help

Se sei un matematico con esperienza di Probabilità e regola di Bayes, allora si può semplicemente prendere l'unità di elaborazione chiamato di immagini e Computer Vision.

Se siete alla ricerca di software disponibile che si desidera utilizzare check this out...

This stackoverflow thread might help...

C'è questo software chiamato moodstocks che potrebbe aiutare.

+0

C'è un'euristica per farlo più semplicemente? (anche con un certo costo di precisione?) – nodwj

+0

nessun compagno, accetta il fatto. Come diavolo pensi di poter rilevare immagini senza intelligenza? –

+0

Lasciatemi chiarire la mia domanda: ho bisogno di aiuto per creare quella cosiddetta intelligenza (AI), e il mio obiettivo è un algoritmo piuttosto semplice e breve anche se non accurato al 100%. – nodwj

0

È possibile utilizzare un servizio come embedly. Tra molte altre informazioni ti permettono di estrarre l'immagine principale di qualsiasi pagina. Funziona particolarmente bene per gli articoli. Puoi provarlo here.

2

Un'altra soluzione sarebbe quella di estrarre i meta tag per la condivisione dei social media in primo luogo, se sono presenti, si è fortunati altrimenti si può provare le altre soluzioni.

<meta property="og:image" content="http://www.example.com/image.jpg"/> 
<meta name="twitter:image" content="http://www.example.com/image.jpg"> 
<meta itemprop="image" content="http://www.example.com/image.jpg"> 

Se si yousing JSOUP il codice sarebbe stato così:

String imageUrlOpenGraph = document.select("meta[property=og:image]").stream() 
      .findFirst() 
      .map(doc -> doc.attr("content").trim()) 
      .orElse(null); 

    String imageUrlTwitter = document.select("meta[name=twitter:image]").stream() 
       .findFirst() 
       .map(doc -> doc.attr("content").trim()) 
       .orElse(null); 

    String imageUrlGooglePlus = document.select("meta[itemprop=image]").stream() 
       .findFirst() 
       .map(doc -> doc.attr("content").trim()) 
       .orElse(null); 
0

ImageResolver può fare per voi, senza la necessità di interazione lato server, ad eccezione di un piccolo script proxy.

Problemi correlati