Domanda

Sto usando PHP per raschiare un sito web e raccogliere alcuni dati. E 'tutto fatto senza usare espressioni regolari. Sto usando php di esplodere () metodo per trovare particolari tag HTML invece.

E 'possibile che se la struttura delle modifiche al sito web (CSS, HTML), quindi i dati sbagliati possono essere raccolte dal raschietto. Quindi la domanda è - come faccio a sapere se la struttura HTML è cambiato? Come identificare questo prima di memorizzare tutti i dati al mio database per evitare di dati errati di essere memorizzati.

È stato utile?

Soluzione

Credo che non si dispone di alcuna soluzione pulite se si sta raschiando una pagina in cui i cambiamenti di contenuto.

Ho sviluppato raschietti diversi pitone e so come può essere frustrante quando il sito fa solo un sottile cambiamento sul suo layout.

Si potrebbe provare una soluzione alla mechanize (non so la controparte PHP) e se si è fortunati si può isolare il contenuto è necessario estrarre (link?).

Un altro approccio possibile sarebbe quello di codificare alcuni vincoli e controllarli prima di negozio per db.

Ad esempio, se si sta raschiando URL, si dovranno verificare che ciò che ha analizzato raschietto è formalmente un URL valido; stesso per ID intero o quello che volete per raschiare che possono essere riconosciuti come validi.

Se si sta raschiando testo normale, sarà più difficile controllare.

Altri suggerimenti

Se vuoi sapere variazioni rispetto alla struttura, penso che il modo migliore è quello di conservare la struttura DOM della prima pagina e poi confrontarlo con uno nuovo.

Ci sono molti modo si può fare: - SAXParser DOMParser etc

Ho un piccolo blog che darà alcune indicazioni per quello che voglio dire http: // let-loro- c.blogspot.com/2009/04/xml-as-objects-in-oops.html

oppure è possibile utilizzare http://en.wikipedia.org/wiki/Simple_API_for_XML o parser DOM Utility.

Parlando fuori del mio culo qui, ma il suo possibile si potrebbe desiderare di guardare alcuni metodi Document Object Model PHP.

http://php.net/manual/en/book.dom.php

Se la mia molto, molto limitata comprensione del DOM è corretta, un cambiamento nella struttura del sito HTML avrebbe cambiato il Document Object Model, ma una semplice modifica dei contenuti all'interno di una struttura fissa non avrebbe fatto. Quindi, se si potesse catturare lo stato DOM, e poi confrontarlo ad ogni raschiare, non si potrebbe in teoria determinare che un tale cambiamento è stato fatto?

(A proposito, il modo in cui ho fatto questo, quando stavo cercando di ottenere una notifica via email quando i risultati barra degli esami sono state inviate in una pagina particolare era solo confrontare file_get_contents () valori Sorprendentemente, ha lavorato senza problemi:. Nessun falsi positivi, e mi ha inviato via email non appena il sito ha pubblicato il contenuto.)

dipende dal sito, ma si poteva contare il numero di elementi della pagina nella pagina raschiato come tag div, di classe e di stile quindi confrontando questi totali contro quelli dei graffi più tardi rilevare se la struttura della pagina è stata modificata.

Un processo simile potrebbe essere utilizzato per il file CSS in cui i nomi di ciascun ciascuna classe o id potrebbero essere estratti utilizzando semplici espressioni regolari, memorizzati e ai necessari controlli. Se questa lista ha nuove aggiunte poi la struttura della pagina è quasi certamente cambiata da qualche parte sul sito di essere raschiato.

In primo luogo, in alcuni casi può essere utile confrontare hash del originale per il nuovo HTML. MD5 e SHA1 sono due hash popolari. Questo può o non può essere valido in tutte le circostanze, ma è qualcosa che si dovrebbe essere a conoscenza. Questo vi dirà se qualcosa è cambiato - il contenuto, tag, o niente.

Per capire se la struttura è cambiata si avrebbe bisogno di catturare un istogramma degli eventi tag e quindi confrontare quelli. Se avete a cuore i tag di essere fuori per poi si dovrà catturare un albero dei tag e fare un confronto per vedere se i tag si verificano nello stesso ordine. Questo sta per essere molto specifico a ciò che si vuole raggiungere.

PHP Simple HTML DOM Parser è uno strumento che vi aiuterà a analizzare il codice HTML.

Explode() non è un parser HTML, ma si vogliono conoscere i cambiamenti nella struttura HTML. Che sta per essere difficile. Prova ad utilizzare un parser HTML. Niente altro sarà in grado di farlo correttamente.

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