2015-07-29 22 views
1

Мой паук возвращает код javascript как строку. Из этого кода мне нужно получить массив, который я могу идентифицировать по его ключам.Как я могу определить массив js по его ключам?

Это означает, что у меня уже есть ключи, но как я могу получить полный массив? Кроме того, я не знаю имя массива.

Возможно ли регулярное выражение? Или есть хороший способ достичь этого? Спасибо!

EDIT:

Ну часть javacode выглядит так (извините, но это слишком много, и несущественны, чтобы скопировать все в здесь):

{var P=parseInt($(".secondary-results-count").html());if(P-1<1){$(".secondary-results-show").hide()}else{$(".secondary-results-count").html(P-1)}}},hasOffers:function(M){if(M.result.offer&&M.result.offer.offers){return(M.result.offer.offers.length>0)?true:false}return false},queryCompanyInfo:function(O,M,N){new QueryCompanyInfo({companyInfoId:O,bookingId:M},function(Q){if(Q.status=="Ok"){var P=arrayStore.inst("offersId");var R=P.get(M);R.company=Q.result.companyInfo;P.put(M,R);if(N){N(Q,P.get(M))}}}).query()},createOfferHtml:function(O){arrayStore.inst("offersId").put(O.bookingId,{price:O,company:null});var aq={"-2":"Best Value","-3":"Executive","-4":"Minibus","-1":"Other","0":"NotSet","1":"Compact","2":"Sedan","3":"PeopleCarrier","4":"SUV","5":"VanOrMinibus","6":"Coach","7":"StretchLimo","8":"StationWagon","9":"Convertible","102":"SportsCar","104":"Offroad","105":"PickupTruck","106":"Motorcycle","107":"Rickshaw","108":"WaterTaxi"};var Z=12; ... 

И я знаю, ключи «- 1 "," -2 "," -3 ".

+1

Пожалуйста, улучшить свой д uestion, добавив строку и сообщив, какую часть (-ы) интересующей вас строки и что вы уже пробовали, чтобы туда добраться. Ваш вопрос - imho для широкого, и на него можно ответить: «Да, регулярное выражение в порядке». –

+0

Посмотрите на это [так что вопрос/ответ] (http://stackoverflow.com/questions/25071994/scraping-from-javascript-using-scrapy) –

+0

Проблема в том, что это всего лишь фрагмент кода, и это строка. Может быть, вы могли бы помочь с регулярным выражением? Потому что я не мог понять, как – steph

ответ

0

хорошо в первую очередь я хотел бы предложить вам ее не имеет отношение к Scrapy вопросу,

С другой стороны, вы можете получить эти данные с помощью регулярных выражений

я попытался var\s+aq=(.*?); регулярного выражения и его работа прекрасно для вашей проблемы

+0

спасибо, единственная проблема в том, что массив можно было бы назвать по-разному – steph

0

Вы можете использовать js2xml для этого, и идентифицировать объект используя XPath, как это:

>>> import js2xml 
>>> jstree = js2xml.parse(jsstring) 
>>> objs = jstree.xpath('//object[property[@name = "-1"]]') 
>>> # or this alternative 
>>> # objs = jstree.xpath('//object[property/@name="-1"]') 
>>> print js2xml.jsonlike.make_dict(objs[0]) 
... {'-1': 'Other', 
... '-2': 'Best Value', 
... '-3': 'Executive', 
... '-4': 'Minibus', 
... '0': 'NotSet', 
... '1': 'Compact', 
... '102': 'SportsCar', 
... '104': 'Offroad', 
... '105': 'PickupTruck', 
... '106': 'Motorcycle', 
... '107': 'Rickshaw', 
... '108': 'WaterTaxi', 
... '2': 'Sedan', 
... '3': 'PeopleCarrier', 
... '4': 'SUV', 
... '5': 'VanOrMinibus', 
... '6': 'Coach', 
... '7': 'StretchLimo', 
... '8': 'StationWagon', 
... '9': 'Convertible'} 
Смежные вопросы