2016-04-05 3 views
-1

В моем коде после нескольких запросов я получил содержимое переменной, как это:как извлечь информацию из сценария тега

<!DOCTYPE html> 
<html dir=ltr> 
    <head> 
    <script> 
     mapslite = { 
     START_TIME: new Date() 
     }; 
     mapslite.getBasePageResponse = function(cacheResponse) { 
     delete mapslite.getBasePageResponse; 
     cacheResponse([[[3988.776886432477,103.7950744,1.3090672],[0,0,0],[1024,768],13.10000038146973],"/maps-lite/js/2/maps_lite_20160404_RC01",107,null,null,["en",""],["/maps/lite/ApplicationService.GetEntityDetails","/maps/lite/ApplicationService.UpdateStarring","/maps/lite/ApplicationService.Search",null,"/maps/lite/suggest","/maps/lite/directions","/maps/lite/MapsLiteService.GetHotelAvailability",null,"https://www.google.com/maps/api/js/..... 
,[null,null,1.3090672,103.7950744],null,"11401",null,"PjoDV_jjE8yPuATo_LmYDA","Asia/Singapore",[["\u003cb\u003eBuses\u003c/b\u003e from this station",[[3,"bus.png",null,"Bus",[["https://maps.gstatic.com/mapfiles/transit/iw2/b/bus.png",0,[15,15],null,0]]]],[[null,null,null,null,"0x31da18325b415901:0xeb661015c651c24a",[[5,["48",1,"#ffffff"]]]],[null,null,null,null,"0x31da19f34e04d59b:0x5758ef6990938b",[[5,["61",1,"#ffffff"]]]],[null,null,null,null,"0x31da1a5b8b75c379:0x6a13e189555f9fab",[[5,["95",1,"#ffffff"]]]],[null,null,null,null,"0x31da1a16ea23bf95:0xd7c90f15535c2b9f",[[5,["106",1,"#ffffff"]]]],[null,null,null,null,"0x31da10a7613d616f:0xf1f61ffeac2ea8a4",[[5,["970",1,"#ffffff"]]]],[null,null,null,null,"0x31da1a0bd6262d0b:0xfbd5d2bfd7a1252",[[5,["NR8",1,"#ffffff"]]]]],null,0,"5"]]],["http://www.google.com/search?q= 
.... 
[0,0,"",0,1,null,null,null,0,0,1,1,0,"map,common",null,0,0,1,null,null,1,"1","2,1","","",0],null,null,"PjoDV_jjE8yPuATo_LmYDA",null,null,null,null,"//consent.google.com","2.maps_lite_20160404_RC01"]); 
     }; 
     executeOgJs = function() { 

     delete executeOgJs; 
     }; 
    </script> 

важная информация, которую я хочу, чтобы извлечь это все числа в строке «эта станция»: «48, . 61,95,106,970, NR8" (это рядом с», 1, "# FFFFFF")

Я попытался с кодом Python:

tree = html.fromstring(buspage, base_url=detail['result']['url']) 
     bus_elm = tree.xpath("/html/body/div[1]/div/div[4]/div[4]/div/div/div[2]/div/div[2]/div[1]/div[2]/div/div/div[2]/div/table/tr/td") 

но есть некоторые ошибки и трудности, есть ли способ сделать. это удобно в PHP?

+0

выскабливание некоторые одни сценарий, почему? –

+0

потому что для этого нет api, хотя это общедоступная информация. Итак, вот единственный способ, и это не незаконно. Однако я хочу вернуться к аспекту кодирования, как PHP разрешает эту задачу? – user1314404

ответ

0

Я считаю, что лучше всего использовать регулярное выражение, если вы уверены, что у вас всегда есть определенная структура.

Выражение, соответствующее «массиву» [«5N4», 323, «#asdasd»], равно (\[\"[a-zA-Z0-9]*?\"\,\d*?\,\".*?\"\]).

Вы можете использовать explode() в PHP или split() в Python, чтобы получить номер, который вы хотите (в данном случае 5N4), как это:

function get_numbers_from($input) { 
    $matches = preg_match_all('(\[\"[]a-zA-Z0-9]*?\"\,\d*?\,\".*?\"\])', $input); 
    foreach($matches[1] as $key => $match) { 
     array_push($numbers, explode(',', $match)[0]); 
    } 

    return $numbers; 
} 
+0

Фактически этот формат появляется и в некоторых других местах. Если вы ищете «с этой станции», то последним вложением будет место для извлечения, вы можете увидеть из исходного кода здесь: view-source: https: //www.google.com/maps/place/Blk+12/ @ 1.3090672,103.7928857,17z/data =! 3m1! 4b1! 4m2! 3m1! 1s0x0: 0xd6a22994a5bdbbc3 – user1314404

+0

Вы можете сделать preg_match, чтобы захватить все, начиная с «с этой станции» до, а затем попробуйте это регулярное выражение. – Alex

+0

есть 4 места с «с этой станции» Я ищу только последний. И регулярное выражение строки должно обрабатывать: [\ "91 \", 1, \ "# ffffff \"] получить номер 91. Можете ли вы поместить этот preg_match в ответ? – user1314404

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