2017-07-04 3 views
0

JSON RESPONSE FROM WEBSITE Ich bin neu in Python scrapy und json. Ich versuche, JPS Antwort von 78751 zu kratzen. Aber es zeigt Fehler. Der Code, den ich verwenden, istScraping json Antwort scrapy mit

import scrapy 
import json 
class BlackSpider(scrapy.Spider): 
    name = 'black' 
    start_urls = ['https://appworld.blackberry.com/cas/content/2360/reviews/2.17.2?page=1&pagesize=100&sortby=newest&callback=_content_2360_reviews_2_17_2&_=1499161778751'] 





    def parse(self, response): 
     data = re.findall('(\{.+\})\);', response.body_as_unicode()) 
     a=json.loads(data[0]) 

     item = MyItem() 
     item["Reviews"] = a["reviews"][4]["review"]   

     return item 

Der Fehler es zeigt, ist Valueerror („No JSON-Objekt decodiert werden kann“) ERROR

+0

Es sieht so aus, als würde Ihre Seite HTML-Inhalt und nicht JSON zurückgeben. Überprüfung über curl hat mir eine HTML-Datei, die besagt, dass die Website gewartet wird. – Colwin

+0

Es funktioniert hier lassen Sie mich den Screenshot der – emon

Antwort

1

Die Antwort, die Sie erhalten ist Javascript-Funktion mit einigen json drin:

_content_2360_reviews_2_17_2 (\ r \ n { "some": "json"}]}); \ r \ n

Zum extrahieren Die Daten aus dieser können Sie einfache regex Lösung verwenden:

import re 
import json 
data = re.findall('(\{.+\})\);', response.body_as_unicode()) 
json.loads(data[0]) 

Es trasnslates zu: Wählen Sie alles zwischen {}, die mit );

bearbeiten endet: Ergebnisse, die ich mit dieser bekommen:

{'platform': None, 
'reviews': [{'createdDate': '2017-07-04', 
    'model': 'London', 
    'nickname': 'aravind14-92362', 
    'rating': 6, 
    'review': 'Very bad ', 
    'title': 'My WhatsApp no update '}], 
'totalReviews': 569909, 
'version': '2.17.2'} 
+0

Seite hinzufügen zu Hinzufügen: Das Format wird als „[JSONP] (https://en.wikipedia.org/wiki/JSONP)“. Es wurde oft verwendet (bevor CORS Mainstream wurde), um die gleiche Herkunftspolitik zu umgehen. – Thomas

+0

Ich bin neu, wo die URL von JSON Antwort mit Regex hinzufügen. – emon

+0

@emon Es tut mir leid, könnten Sie Ihre Frage umformulieren? – Granitosaurus