开发者社区 问答 正文

关于json.load()里报错的问题:json.decoder.JSONDec?报错

用python爬猫眼电影,代码和老师讲的一样的,但是出现了一些问题:

# -*- coding: utf-8 -*-

from urllib import request
import json


def get_data(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1'
    }
    req = request.Request(url, headers=headers)
    response = request.urlopen(req)
    if response.getcode() == 200:
        print(response.read())
        return response.read()


def parse_data(html):
    data = json.loads(html)['cmts']
    print(data)


if __name__ == '__main__':
    url = 'http://m.maoyan.com/mmdb/comments/movie/1203084.json?_v_=yes&offset=15&startTime=2018-09-01%2011%3A10%3A00'
    parse_data(get_data(url))

报错如下:
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

展开
收起
爱吃鱼的程序员 2020-06-23 14:04:12 889 分享 版权
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    get_data函数应该返回字符串。json.loads也是处理字符串的而不是bytes类型。
    returnresponse.read().decode('utf-8')

    -*-coding:utf-8-*-

    fromurllibimportrequest
    importjson

    defget_data(url):
    headers={
    'User-Agent':'Mozilla/5.0(iPhone;CPUiPhoneOS9_1likeMacOSX)AppleWebKit/601.1.46(KHTML,likeGecko)Version/9.0Mobile/13B143Safari/601.1'
    }
    req=request.Request(url,headers=headers)
    response=request.urlopen(req)
    ifresponse.getcode()==200:
    returnresponse.read()

    defparse_data(html):
    data=json.loads(html.decode())['cmts']
    print(data)

    ifname=='__main__':
    url='http://m.maoyan.com/mmdb/comments/movie/1203084.json?_v_=yes&offset=15&startTime=2018-09-01%2011%3A10%3A00'
    parse_data(get_data(url))
    我把你的代码修改了下,去掉了print(response.read())这行,html换成了html.decode()可以完成,我用的python3,因为python2的urllib模块中好像不能导入request

    2020-06-23 14:04:29
    赞同 展开评论