使用scrapy刮擦json反应

时间:2017-07-04 11:46:19

标签: python json web-scraping scrapy

JSON RESPONSE FROM WEBSITE 我是python scrapy和json的新手。我试图从78751刮掉json的回应。但它显示错误。我使用的代码是

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

它显示的错误是  ValueError("无JSON对象可以解码")ERROR

1 个答案:

答案 0 :(得分:1)

你得到的答案是javascript函数,里面有一些json:

  

_content_2360_reviews_2_17_2(\ r \ N {"一些":" JSON"}]}); \ r \ n

要从中提取数据,您可以使用简单的正则表达式解决方案:

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

它转换为:选择以{}

结尾的);之间的所有内容

编辑:结果我得到了这个:

{'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'}