一、JSON
JSON是指JavaScript对象表示法(JavaScript Object Notation):
独立于语言和平台
与XML类似,存储和交换文本信息
与XML语言更快、更易解析
JSON的主要表达形式:
1、获取JSON响应
通过网络库requests
,网络爬虫获取响应,并使用JSON格式展示数据
import requestsimport urllib
url = 'http://httpbin.org/get'response = requests.get(url,timeout = 5)print(response.text)123456
2、解析JSON
2.1、解码JSON的功能
Python的json库可以提供编码,解码JSON的功能
json库的主要函数有:
json.loads():JSON字符串转换成Python
json.load():文件中JSON字符串转换为Python
json.dumps():Python对象序列化为JSON对象
json.dump():Python对象序列化为JSON对象,并写入文件
把网络爬虫获取的响应转换成Python对象:
import json
json_data = json.loads(response.text)print(type(json_data))print(json_data)1234
import requestsfrom 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])123456789
二、API
应用编程接口(Application Programming Interface,API)
API在网络爬虫中的使用场景:
API并不随处可见,但可以请求接收请求,并向客户端返回响应的信息
与网站不同的是,API必须:
下面以新浪微博为例:
由上图我们可以看到数据,但是这些数据不是我们想要看到的,这是因为我们并没有转码。
下面我们通过两种方式打开来验证下内容:
1、第一种
直接点击get
结果如下:
2、第二种
复制Request URL
的链接打开
结果如下:
经过对比,我们发现结果是一样的。
3、代码实现
下面在代码实现下:
import requestsfrom 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)123456
上述代码遍获取到了所需要解析的文件,下面就需要进行解析了:
import requestsimport jsonfrom 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"))))1234567
这样就转换成dict
类型的数据,供我们提取
4、测试
取出网址:
import requestsimport jsonfrom 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"))123456789
转载自:CSDN 作者:不温卜火
原文链接:https://blog.csdn.net/qq_16146103/article/details/105240501