2017-10-11 3 views
-2

Je suis en train d'extraire les données à partir d'une page Web en utilisant scrapy ... et toutes les données sont dans un javascriptscrapy Aucun objet JSON pourrait être décodé

<script type="text/javascript"> 
// Globals 
var ANUNTURI = [ { "ID": "2750801", "Data": "Azi 11:16", "Zile_piata": "146", "Zona": "Andronache", "Nr_Camere": "2", "suprafu": "65", "Pret": "62.000 EUR", 
    "Citit": "0", "Tip_teren": "-", "Etaj": "3/3", "supraft": "-", 
     "frontStradal": "-", "Etichete": "", "ArePoze": "7", "Tip_spatiu": "-" },   
and so on... ] 

;\r\n var ID_CAUTARE = 0;\r\n var CATEG = 3;\r\n  
var TRANZ = 2;\r\n  
var SORTARE = "";\r\n  
var ID_AGENT = "3012";\r\n  
var ID_LOCALITATE = \'13822\';\r\n  
var ID_JUDET = \'10\';\r\n  
var CRITERIU_FILTRU = \'\';\r\n  // judet_schimbat = "";\r\n\r\n $(\'form[name="anunturi"] input[name="sort"]\').val(SORTARE);\r\n\r\n', u"\r\n\r\n $(function(){\r\n\r\n   
var setTagValue = ' 0 ';\r\n   
var comboTitle = [];\r\n\r\n  $('#combo_etichete').mpCombo({\r\n   cls: 'mpCombo etichete',\r\n   header_default_text: 'Indiferent',\r\n   interval_from_text: ' Peste ', \r\n    
interval_to_text: ' Pana la ', \r\n   interval_between_text: ' si ', \r\n   combo_width: '162px', \r\n   menu_width: '160px',\r\n   onSelect: function() { // trigger click daca e inchisa cautarea avansata\r\n    if($('#cautare_avansata').is(':hidden')) {\r\n     $('a#filtreaza').trigger('click');\r\n    }\r\n   }\r\n\r\n  });\r\n  \r\n  $('#combo_etichete').mpCombo({'setval': setTagValue});\r\n  comboTitle.push($('#combo_etichete').mpCombo('gettitle')); \r\n\r\n  if (comboTitle.length > 0) {\r\n   $('#combo_etichete dt a').text(comboTitle.join(', '));  \r\n  }\r\n\r\n });\r\n\r\n\r\n", u'\r\nvar gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");\r\ndocument.write(unescape("%3Cscript src=\'" + gaJsHost + "google-analytics.com/ga.js\' type=\'text/javascript\'%3E%3C/script%3E"));\r\n'] 
</script> 

quand j'utilise

json.loads(response.xpath("//script[2]/text").extract()) 

il me donne cette erreur

No Json object could be decoded

J'ai besoin que d'obtenir le premier var Anunturi et tout à l'intérieur et les mettre dans mysql.

MISE À JOUR

J'ai aussi essayé ceci:

var = re.compile(r"var ANUNTURI= ({.*?});", re.MULTILINE | re.DOTALL) 
json.loads(response.xpath("//script[2][contains(., 'var ANUNTURI')]/text()").re(var)) 

et l'erreur que je reçois est la suivante:

TypeError: expected string or buffer

puis j'ai essayé ceci:

json.loads("".join(response.xpath("//script[2][contains(., 'var ANUNTURI')]/text()").re(var))) 

et je reçois:

NO JSON object could be decoded

+0

donc il n'y a aucun moyen d'extraire ces données? – Omega

+0

Expressions régulières? –

+0

Avez-vous même extrait ce JSON de ce code JS? – Umair

Répondre

1

Ceci est un moyen possible d'extraire les données, mais avec le code présenté en cours, il est difficile de dire si la variable JSON ou Javacript intègre. Javascript de manière subtile pourrait être un sur-ensemble de l'objet JSON.

data = """/ Globals 
var ANUNTURI = [ { "ID": "2750801", "Data": "Azi 11:16", "Zile_piata": "146", "Zona": "Andronache", "Nr_Camere": "2", "suprafu": "65", "Pret": "62.000 EUR", 
    "Citit": "0", "Tip_teren": "-", "Etaj": "3/3", "supraft": "-", 
     "frontStradal": "-", "Etichete": "", "ArePoze": "7", "Tip_spatiu": "-" },] 

;\r\n var ID_CAUTARE = 0;\r\n var CATEG = 3;\r\n  
var TRANZ = 2;\r\n  
var SORTARE = "";\r\n  
var ID_AGENT = "3012";\r\n  
var ID_LOCALITATE = \'13822\';\r\n  
var ID_JUDET = \'10\';\r\n  
var CRITERIU_FILTRU = \'\';\r\n  // judet_schimbat = "";\r\n\r\n $(\'form[name="anunturi"] input[name="sort"]\').val(SORTARE);\r\n\r\n', u"\r\n\r\n $(function(){\r\n\r\n   
var setTagValue = ' 0 ';\r\n   
var comboTitle = [];\r\n\r\n  $('#combo_etichete').mpCombo({\r\n   cls: 'mpCombo etichete',\r\n   header_default_text: 'Indiferent',\r\n   interval_from_text: ' Peste ', \r\n    
interval_to_text: ' Pana la ', \r\n   interval_between_text: ' si ', \r\n   combo_width: '162px', \r\n   menu_width: '160px',\r\n   onSelect: function() { // trigger click daca e inchisa cautarea avansata\r\n    if($('#cautare_avansata').is(':hidden')) {\r\n     $('a#filtreaza').trigger('click');\r\n    }\r\n   }\r\n\r\n  });\r\n  \r\n  $('#combo_etichete').mpCombo({'setval': setTagValue});\r\n  comboTitle.push($('#combo_etichete').mpCombo('gettitle')); \r\n\r\n  if (comboTitle.length > 0) {\r\n   $('#combo_etichete dt a').text(comboTitle.join(', '));  \r\n  }\r\n\r\n });\r\n\r\n\r\n", u'\r\nvar gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");\r\ndocument.write(unescape("%3Cscript src=\'" + gaJsHost + "google-analytics.com/ga.js\' type=\'text/javascript\'%3E%3C/script%3E"));\r\n' 
""" 
from json import loads 
from pprint import PrettyPrinter 
lines = data.split("\r\n") 
anunturi_json = lines[0].split("=")[1] 
print anunturi_json 
val = loads(anunturi_json) 
pp = PrettyPrinter(indent=4) 
pp.pprint(val) 
+0

merci ça a marché ... la seule chose que j'ai dû faire en plus ... j'ai dû extraire le **; ** de la fin de json – Omega

+0

pouvez-vous aussi me dire comment extraire seulement le "ID" de ce "var Anunturi"? – Omega

+2

@Omega 'val.get ('ID')' –