5

Mi chiedo se ci sono eventuali librerie esistenti o accessibili da Objective-C che mi consentirebbe di raschiare pagine formattate come this one. In particolare, tutte le date e tutto il testo accanto a ciascuna data. In caso contrario, quale sarebbe il modo migliore per farlo? Espressioni regolari? Ho sentito che NSString potrebbe già avere metodi integrati per questo. È vero?Scraping e analisi di una pagina di Wikipedia

Mi sono guardato intorno per vedere se esisteva un'alternativa allo scraping, ad esempio un file XML o un'API. Ho trovato un'API, ma gli unici client che vedo disponibili sono in altre lingue e sembrano essere in grado di pubblicare contenuti in pagine, non di recuperarli.

EDIT: Così ho trovato più informazioni per quanto riguarda l'API a questi link:

E sono stato in grado di venire con this request che restituisce un po 'di HTML testo codificato (Beh, il formato è XML, ma include il testo della pagina come »a href= ecc. Continuerò a cercare tra i documenti per vedere se riesco a fare e questo esce un po 'meglio, se non è così, ci sono raccomandazioni per analizzare questo?

EDIT 2: Va bene così, grazie al this doc page, il modo più semplice e più pulito in cui sono stato in grado di recuperare i dati sta usando questo constructed link che restituisce i dati grezzi (Nel wiki markup) della relativa sezione. Tuttavia, suppongo che avrei quindi bisogno di analizzarlo, anche se questo è davvero il caso, dovrebbe essere molto più semplice dell'intero articolo.

Qualcuno ha qualche consiglio sull'analisi del markup wiki come il seguente in Objective-C?

==Events== 
* [[710]] – [[Saracen]] invasion of [[Sardinia]]. 
*[[1275]] – Traditional founding of the city of [[Amsterdam]]. 
*[[1682]] – [[Philadelphia]], [[Pennsylvania]] is founded. 

Quello che voglio finire con l'avere è, immagino una collezione NSDictionary o simile che memorizzerà la data con il frammento di accompagnamento delle informazioni. Grazie!

risposta

1

Sto andando a suggerire espressioni regolari per l'estrazione di dati mirati in un flusso di dati HTML misto.

Ci sono già delle librerie RegEx sul telefono, ma sono un po 'nascoste - puoi esporle con alcune semplici chiamate usando RegexKitLite (assicurati di scorrere verso il basso e ottenere la versione light). Finisce per essere una classe con poche estensioni su NSString che ti permette di fare regex, quindi definire un'espressione regolare con due corrispondenze catturate: una per il numero e una per il contenuto, insieme a un numero di corrispondenze non acquisite per i tag di chiusura e intermedi. Anche se è una versione "lite" del Regex standard, supporta praticamente qualsiasi abilità di cui avresti bisogno.

L'approccio API è promettente, ma una volta ottenuto il markup raw, probabilmente si dovrà adottare un approccio regex simile per analizzare i dati al di fuori di questo. Potrebbe comunque avere senso se riduce la complessità regex e il tempo di trasferimento dei dati, tuttavia, non è possibile combinare entrambi gli approcci.

+0

Grazie per quello, lo apprezzo. Penso che il modo in cui andrò (l'unico modo in cui posso vederlo) è ottenere il bit dei dati grezzi e poi in qualche modo analizzarlo. Ho incluso un esempio dei dati sopra, anche se molto probabilmente creerò una nuova domanda per questo. –

+0

I nuovi dati sono molto più semplici da analizzare: lo gestisco cercando l'intervallo di stringhe che inizia dopo gli eventi, quindi eseguendo una corrispondenza con numeri puri tra parentesi, insieme a qualsiasi cosa dopo l'ndash fino alla fine della riga. allora dovresti solo togliere tutti i caratteri "[" e "]" e saresti tutto pronto. Più semplice da elaborare rispetto all'HTML, che è super pesante. –

+0

Grazie, ti dispiacerebbe rispondere alla mia successiva domanda riguardante l'analisi? http://stackoverflow.com/questions/1634012/how-to-parse-some-wiki-markup Grazie! –

0

questo non è assolutamente il modo di farlo, in qualsiasi lingua.

se qualsiasi sito online esporrà i propri dati in un modo carino, sarà wikipedia.

cerca di ottenere un articolo come XML, come RDF, o forse anche come JSON.

+0

Questo è quello che sto chiedendo, se c'è un modo per recuperare i dati in un formato piacevole, ma non sembra, da quello che ho visto. –

3

Dato che le pagine su Wikipedia sono archiviate come testo normale e inserite dagli utenti come testo in chiaro, non si otterrà un set di dati strutturato da esso.

4

Aggiungere un &format=fmt alla fine della query, come descritto a API:Data_formats. La tua richiesta diventa: JSON query, per esempio. È possibile specificare XML, JSON o molti altri formati.

È possibile analizzare facilmente le sezioni generali e quindi visualizzare solo l'output formattato HTML in una visualizzazione Web.

+0

Grazie! Sì, l'avevo visto, ma il file restituito è molto più grande del file raw che ero in grado di recuperare. Il rovescio della medaglia è che è in markup wiki invece di HTML, ma non avevo intenzione di rendere comunque il contenuto restituito in una visualizzazione web. Preferirei avere i dati reali in modo da poter manipolare facilmente la sua presentazione. Apprezzo la risposta però. –

3

Ho raschiato molti dati dal WP in vari modi. il formato dipende da molte cose, incluso il tipo di sottodominio in cui si trovano le informazioni e quando è stato inserito. Il testo principale è in formato libero e non esiste un modo semplice per scriverlo. Le infobox sono in un formato WP speciale che è cambiato nel corso degli anni. Non è stato progettato per essere raschiato.

C'è un database di back-up WP che è un po 'più strutturato.

Di gran lunga il tuo migliore strategia è quella di contattare i wikipediani nel dominio che si desidera raschiare - saranno conoscono il formato del database e potrebbero essere in grado di aiutare - saranno certamente vuole di aiutare come vorranno vedere WP in forma semantica (come DBPedia - http://dbpedia.org/About).

2

Conta Python? ;) È accessibile da Objective-C. E ci sono ottimi moduli per la raschiatura: Beautiful Soap e/o mechanize, puoi anche considerare lxml.

0

Ho un applicazione per iPhone che fa un graffio schermo utilizzando il seguente:

Utilizzando YQL voi può ottenere qualsiasi informazione di cui hai bisogno dal web usando le query XPATH contro il DOM.

Personalmente penso che sia molto meglio dell'utilizzo di Regex. Poi di nuovo conosco solo espressioni regolari molto semplici.

Problemi correlati