爬虫json格式化问题
问题导入
在进行python爬取网页上的数据时,遇到类型转化问题导致数据获取失败,具体如下:
代码部分:
url2 = "https://api.inews.qq.com/newsqa/v1/query/inner/publish/modules/list?modules=nowConfirmStatis,provinceCompare"
html2 = requests.get(url2)
data2 = json.loads(html2.json()["data"])
data2
报错内容:
TypeError: the JSON object must be str, bytes or bytearray, not dict
通过搜寻相关文档,对json有了初步的了解之后,成功解决了问题。
json相关内容
json表示数据的两种方式
- Object(对象):键/值对(名称/值)的集合,使用花括号{ }定义。在每个键/值对中,以键开头,后跟一个冒号:,最后是值。多个键/值对之间使用逗号,分隔,如{“name”:“Yoz”,“age”:“18”};
- Array(数组):值的有序集合,使用方括号[ ]定义,数组中每个值之间使用逗号,进行分隔。
在python中对json的使用主要有以下两个函数:
- json.dumps():将 Python 对象转换为 JSON 数据
- json.loads():将 JSON 数据解析为 Python 对象
解决方法
从报错内容上来看,很清晰说明了,由于使用的loads函数中的对象是字典类型,而json.loads()中数据类型必须为json数据,所以考虑将字典类型转换为str类型,使用dumps()可解决
url2 = "https://api.inews.qq.com/newsqa/v1/query/inner/publish/modules/list?modules=nowConfirmStatis,provinceCompare"
html2 = requests.get(url2)
strdata = json.dumps(html2.json()["data"])
data2 = json.loads(strdata)
data2