2015-06-22 11 views
5

Attualmente sto cercando di impostare un web crawler per estrarre i dati dai siti web immobiliari. È una tendenza con questi siti che determinate informazioni non sono nello stesso posto per ogni pagina, quindi devo capire come estrarre elementi di testo che contengono determinate frasi piuttosto che in base a dove si trovano. Ecco alcuni esempi di tali pagine:Configurazione del crawler import.io con xpath o regexp

http://www.zillow.com/homedetails/2630-Hazy-Creek-Dr-Houston-TX-77084/28388488_zpid/

http://www.zillow.com/homedetails/16514-Park-Firth-Dr-Houston-TX-77084/28357799_zpid/

Avviso come certe informazioni come ad esempio la MLS # appare in punti diversi. Quando estraggo xpath da una di queste voci, ottengo: // * [@ id = "yui_3_15_0_1_1435013689406_3296"], e dato che non ho molta familiarità con xpath, non so come modificarlo per cercare frase (ho certamente provato, ma non funziona mai). Regexp sembra uno strumento promettente, ma quando uso il comando^MLS, che dovrebbe cercare elementi che iniziano con "MLS", semplicemente non funziona. So che ci deve essere un modo semplice per farlo, ma questa è la mia prima volta che uso questo servizio quindi non ho ancora familiarità con esso. E i consigli sarebbero molto apprezzati.

risposta

6

Regex non consente di estrarre i dati, solo per pulire o modificare il testo già estratto.

È necessario creare un XPath per estrarre i dati desiderati. Ho fatto uno per te come ad esempio:

//*[@role="main"]//li[contains(text(), "MLS ")] 

Spiegazione: che cerca la sezione principale della pagina e quindi cercare un <li> che contiene il testo "MLS". Ciò estrarrà qualcosa come "MLS #: 66521347"

Ora puoi selezionare il tipo di colonna come "numero" per ottenere solo il numero (puoi farlo anche con espressioni regolari, questo è esattamente il tipo di cose che puoi fare con esso).

MODIFICA: anche se XPath è corretto, non restituisce i dati in import.io. C'è un altro modo per farlo: usare un XPath per portare tutto il testo in quella sezione e poi usare regex per selezionare l'MLS.

XPath per usare:

//*[@role="main"]/section[@class="zsg-content-section "][1] 

Regex da usare:

MLS #: (\d+) 
+0

Grazie tante, ma sembra che ci sia un problema con questo. Quando utilizzo questo percorso, import.io evidenzia il numero MLS sulla pagina quando la colonna è selezionata, ma non appare nella colonna stessa. In qualche modo riconosce la voce corretta senza effettivamente estrarla. – user2480757

+0

Ho appena modificato la mia risposta originale con un nuovo xpath + regex che effettivamente funziona su import.io – ignacioelola

+0

E che funziona come un fascino. Grazie mille. – user2480757