快速入门网络爬虫系列 Chapter09 | 您所在的位置:网站首页 › 网络爬虫数据处理 › 快速入门网络爬虫系列 Chapter09 |
一、JSON JSON是指JavaScript对象表示法(JavaScript Object Notation): 独立于语言和平台与XML类似,存储和交换文本信息与XML语言更快、更易解析JSON的主要表达形式: 单个JSON对象,书写格式为{string:value,string:value}11、获取JSON响应通过网络库requests,网络爬虫获取响应,并使用JSON格式展示数据 代码语言:javascript复制import requests import urllib url = 'http://httpbin.org/get' response = requests.get(url,timeout = 5) print(response.text)22、解析JSON2.1、解码JSON的功能Python的json库可以提供编码,解码JSON的功能 json库的主要函数有: json.loads():JSON字符串转换成Pythonjson.load():文件中JSON字符串转换为Pythonjson.dumps():Python对象序列化为JSON对象json.dump():Python对象序列化为JSON对象,并写入文件把网络爬虫获取的响应转换成Python对象: 代码语言:javascript复制import json json_data = json.loads(response.text) print(type(json_data)) print(json_data)3代码语言:javascript复制import requests from bs4 import BeautifulSoup as bs s=requests.session() s.headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0'} page=s.get('https://api.github.com/events') data = page.json() print(type(data)) print(type(data[0])) print(data[0])452.2、从dict中还原为JSON对象Json库还可以从dict中还原为JSON对象,在Python中为字符串类型 代码语言:javascript复制back_json = json.dumps(json_data) print(type(back_json)) print(back_json)6二、API应用编程接口(Application Programming Interface,API) API不同的应用提供方便友好的接口开发者用不同的语言结构编写程序,通过API获取数据,实现不同程序间的信息共享API在网络爬虫中的使用场景: 7API并不随处可见,但可以请求接收请求,并向客户端返回响应的信息 与网站不同的是,API必须: 拥有严谨的语言规则,标准的规范来产生数据使用XML或者JSON格式来展示数据,而不是HTML表示下面以新浪微博为例: 8由上图我们可以看到数据,但是这些数据不是我们想要看到的,这是因为我们并没有转码。 下面我们通过两种方式打开来验证下内容: 1、第一种直接点击get 9结果如下: 102、第二种复制Request URL的链接打开 11结果如下: 12经过对比,我们发现结果是一样的。 3、代码实现下面在代码实现下: 代码语言:javascript复制import requests from bs4 import BeautifulSoup as bs s=requests.session() s.headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0'} page=s.get('https://feed.sina.com.cn/api/roll/get?pageid=121&lid=1356&num=20&versionNumber=1.2.4&page=2&encode=utf-8&callback=feedCardJsonpCallback&_=1585719783848') print(page.content)13上述代码遍获取到了所需要解析的文件,下面就需要进行解析了: 代码语言:javascript复制import requests import json from bs4 import BeautifulSoup as bs s=requests.session() s.headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0'} page=s.get('https://feed.sina.com.cn/api/roll/get?pageid=121&lid=1356&num=20&versionNumber=1.2.4&page=2&encode=utf-8') print((json.loads(page.content.decode("utf-8"))))14这样就转换成dict类型的数据,供我们提取 154、测试取出网址: 代码语言:javascript复制import requests import json from bs4 import BeautifulSoup as bs s=requests.session() s.headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0'} page=s.get('https://feed.sina.com.cn/api/roll/get?pageid=121&lid=1356&num=20&versionNumber=1.2.4&page=2&encode=utf-8') news = json.loads(page.content.decode("utf-8")).get('result').get("data") for new in news: print(new.get("url"))16 |
CopyRight 2018-2019 实验室设备网 版权所有 |