elasticsearch入門系列">elasticsearch入門系列
636
2022-05-30
Chapter09 | JSON數據處理
一、JSON
1、獲取JSON響應
2、解析JSON
2.1、解碼JSON的功能
2.2、從dict中還原為JSON對象
二、API
1、第一種
2、第二種
3、代碼實現
4、測試
一、JSON
JSON是指JavaScript對象表示法(JavaScript Object Notation):
獨立于語言和平臺
與XML類似,存儲和交換文本信息
與XML語言更快、更易解析
JSON的主要表達形式:
單個JSON對象,書寫格式為{string:value,string:value}
1、獲取JSON響應
通過網絡庫requests,網絡爬蟲獲取響應,并使用JSON格式展示數據
import requests import urllib url = 'http://httpbin.org/get' response = requests.get(url,timeout = 5) print(response.text)
1
2
3
4
5
6
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)
1
2
3
4
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])
1
2
3
4
5
6
7
8
9
2.2、從dict中還原為JSON對象
Json庫還可以從dict中還原為JSON對象,在Python中為字符串類型
back_json = json.dumps(json_data) print(type(back_json)) print(back_json)
1
2
3
二、API
應用編程接口(Application Programming Interface,API)
API不同的應用提供方便友好的接口
開發者用不同的語言結構編寫程序,通過API獲取數據,實現不同程序間的信息共享
API在網絡爬蟲中的使用場景:
API并不隨處可見,但可以請求接收請求,并向客戶端返回響應的信息
與網站不同的是,API必須:
擁有嚴謹的語言規則,標準的規范來產生數據
使用XML或者JSON格式來展示數據,而不是HTML表示
下面以新浪微博為例:
由上圖我們可以看到數據,但是這些數據不是我們想要看到的,這是因為我們并沒有轉碼。
下面我們通過兩種方式打開來驗證下內容:
1、第一種
直接點擊get
結果如下:
2、第二種
復制Request URL的鏈接打開
結果如下:
經過對比,我們發現結果是一樣的。
3、代碼實現
下面在代碼實現下:
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)
1
2
3
4
5
6
上述代碼遍獲取到了所需要解析的文件,下面就需要進行解析了:
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"))))
1
2
3
4
5
6
7
這樣就轉換成dict類型的數據,供我們提取
4、測試
取出網址:
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"))
1
2
3
4
5
6
7
8
9
JSON 網絡
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。