2015-02-02 6 views
0

Я использую Jsoup, чтобы отказаться от некоторых данных. В моем документе, у меня есть что-то вроде:JSOUP Скребок JavaScript часть Java

<script type="text/javascript"> 
ta.store('mapsv2.geoName', 'Marseille'); 
ta.store('mapsv2.map_addressnotfound', 'Address not found');   ta.store('mapsv2.map_addressnotfound3', 'We couldn\'t find that location near {0}. Please try another search.');  </script> 
    <script type="text/javascript"> 
window.mapDivId = 'map0Div'; 
window.map0Div = { 
lat: 43.295246, 
lng: 5.364188, 
zoom: null, 
locId: 5039388, 
geoId: 187253, 

Мой код:

Document attractionDoc = Jsoup.connect(url).timeout(100000).get(); 
    System.out.println("attractionDoc "+attractionDoc.toString()); 

Но я не знаю, как поймать номер после Lat: и LNG:

Спасибо за помощь!

+0

Я считаю, что вы должны написать вверх regex для этого. например Получите текстовое содержимое тегов скрипта, проверьте, содержат ли содержимое слова «lat» и «lng», а затем анализируют их через регулярное выражение. Я напишу сам ответ, но, к сожалению, мне не очень удобно с регулярным выражением. –

ответ

1

JSoup не анализирует встроенный Javascript, поэтому нет простого способа получить объекты lat и lng от объекта window.map0Div.

Но, как указано @Ceiling Gecko, вы можете анализировать содержимое тега скрипта другими методами, например. обычные выражения.

Если у вас есть содержимое сценария в виде строки под названием content вы можете использовать что-то вроде:

Pattern p = Pattern.compile("window.map0Div\\s*=\\s*\\{.*lat:\\s*([0-9.]+),.*lng:\\s*([0-9.]+),"); 
Matcher m = p.matcher(content); 
if (m.find()){ 
    String lat = m.group(1); 
    String lng = m.group(2); 
    //do whatever you need to do with the info 
} 

Вот это скрипку с регулярным выражением: http://fiddle.re/1p0yd6

+0

Спасибо, что работает отлично! – Jose

Смежные вопросы