爬蟲系列之【數據解析之JSON】《三》

目錄

前置知識

一、 json.loads():JSON 轉 Python 數據

二、json.dump():python數據 轉 json 并寫入文件

?三、json.loads() :json 轉 python數據

四、json.load() :json 轉 python數據(在文件操作中更方便)

五、實戰案例

完整代碼演示


前置知識

1,不涉及文件操作
json 字符串 => 轉換成 => python 數據類型 :json.loads()
python 數據類型 => 轉換成 => json 字符串 :json.dumps()2,涉及文件操作
包含 json 的類文件對象 => 轉換成 => python 數據類型 :json.load()
python 數據類型 => 轉換成 => 包含 json 的類文件對象 :json.dump()# 總結:不加 s 涉及到文件操作

json用于數據交換

JS(前端) -> json -> python(后端)
python(后端) -> json -> JS(前端)


一、 json.loads():JSON 轉 Python 數據

import json
# 1,python數據類型 轉 json字符串
# python 字典數據
dic = {'a':1,'b':2}
print(type(dic))  #打印類型:字典類型
# 2,python數據 轉成 json數據
json1 = json.dumps(dic)
# 3,打印結果
print(type(json1))   #結果是str,就是json字符串
# 4,增加鍵值
dic[('2',1)] = '元組'   #錯誤,不能這樣添加
dic["c"]='元組'         # 正確
# 5,json數據key不能是元組,skipkeys=True可以過濾異常數據,ensure_ascii=False可以解決編碼問題
json2 = json.dumps(dic,skipkeys=True,ensure_ascii=False)print(json2)
print(type(json2))


二、json.dump():python數據 轉 json 并寫入文件

import json
# 1,python字典數據
dic = {'a':1,'b':2}
with open('text.json','w',encoding='utf-8') as f:# 參數1:要轉成json格式并保存的數據# 參數2:文件指針json.dump(dic,f,skipkeys=True,ensure_ascii=False)


?三、json.loads() :json 轉 python數據

import json
# text.json中是剛才存儲的 json 數據
with open('text.json','r',encoding='utf-8') as f:data = f.read()print(data)print(type(data))  #json字符串# 轉換dic = json.loads(data) # python字典print(type(dic))


四、json.load() :json 轉 python數據(在文件操作中更方便)

import json
# text.json中是剛才存儲的 json 數據
with open('text.json','r',encoding='utf-8') as f:# 轉換dic = json.load(f) #python字典print(f"字典數據:{dic}\n類型:{type(dic)}")


五、實戰案例

需求:爬取騰訊招聘信息的《標題》《城市》《日期》

鏈接:搜索 | 騰訊招聘

分析步驟:

1,找到目標url

目標URL:https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1740842427771&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=1&keyword=&pageIndex=1&pageSize=10&language=zh-cn&area=cn

2,分析響應數據

可以進一步驗證:

將數據全選復制進入?在線代碼格式化?驗證是否為 json 格式

3,分析一下數據內容

我們需要的數據層級關系,轉換成字典后:
Data > Posts > 列表n > RecruitPostName(標題) LocationName(城市) LastUpdateTime(日期)

特別注意:Posts是一個列表?


完整代碼演示


import json
import requests# 1,目標url
url = 'https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1740842427771&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=1&keyword=&pageIndex=1&pageSize=10&language=zh-cn&area=cn'
# 2,身份偽裝
header={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36"
}
# 3,發起請求獲取響應
response = requests.get(url=url,headers=header)
# 4,打印響應內容
# print(response.text)
print(type(response.text))  #json字符串類型# 5,將json字符串轉換成python數據
result = json.loads(response.text)
print(type(result))  # 字典類型# 6,提取需要的信息:標題+城市+日期
title = result['Data']['Posts']
for tit in title:# print(tit)print(f"{tit['RecruitPostName']} ,{tit['LocationName']} ,{tit['LastUpdateTime']}")# 字符串替換:result = str.replace(r'\n','')


拓展

實現多頁爬取分析步驟

1.分別獲取到第一頁、第二頁、第三頁的 url 對比

# 第一頁
https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1740904582702&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=1&keyword=&pageIndex=1&pageSize=10&language=zh-cn&area=cn
# 第二頁
https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1740904630357&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=1&keyword=&pageIndex=2&pageSize=10&language=zh-cn&area=cn
# 第三頁
https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1740904538329&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=1&keyword=&pageIndex=3&pageSize=10&language=zh-cn&area=cn

# 特別提醒:測試可以直接將上面的url放入導航欄查看響應數據,還有可以刪掉一些參數查看對響應數據有沒有影響
對比之后發現只有兩個地方不同
1, pageIndex 頁數
2, timestamp 時間戳

測試后發現,時間戳固定對爬取數據沒有任何影響,因此多頁爬取只需要變化 pageIndex 的值即可

# 偽代碼:
for i in range(1,11):url = f"https://careers.tencent.com/tencentcareer/api/post/Query?timestamp=1740904630357&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=1&keyword=&pageIndex={i}&pageSize=10&language=zh-cn&area=cn"# 這樣就可以得到十頁的url了,剩下的爬取工作是一樣的print(url)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/896769.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/896769.shtml
英文地址,請注明出處:http://en.pswp.cn/news/896769.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python核心技術,Django學習基礎入門教程(附環境安裝包)

文章目錄 前言1. 環境準備1.1Python安裝1.2選擇Python開發環境1.3 創建虛擬環境1.4 安裝 Django 2. 創建 Django 項目3. Django項目結構介紹4. 啟動開發服務器5. 創建 Django 應用6. 應用結構介紹7. 編寫視圖函數8. 配置 URL 映射9. 運行項目并訪問視圖10. 數據庫配置與模型創建…

功能豐富的自動化任務軟件zTasker_2.1.0_綠色版_屏蔽強制更新閃退

🚀 zTasker 一鍵式效率倍增器使用指南 🙏 致謝 首先感謝開發者提供如此高效的工具! 軟件本身功能強大,但部分機制需特別注意! 📖 軟件概述 zTasker 是一款通過自動化腳本/任務流實現效率飛躍的生產力工…

MFC中CMutex類和CSingleLock類,配合使用疑惑

在使用CMutex過程中,看到別人使用了CSingleLock類,想著明明CMutex已經可以實現線程同步了,為什么還有使用CSingleLock類呢? 在MFC中,雖然CMutex類本身可以實現線程同步,但通常會與CSingleLock類一起使用&am…

【最大半連通子圖——tarjan求最大連通分量,拓撲排序,樹形DP】

題目 分析 最大連通分量肯定是滿足半連通分量的要求,因此tarjan。 同時為了簡化圖,我們進行縮點,圖一定變為拓撲圖。 我們很容易看出,只要是一條不分叉的鏈,是滿足條件的。 于是我們按照拓撲序不斷樹形DP 建邊注意…

LabVIEW正弦信號處理:FFT與最小二乘擬合的參數提取

問題一:LabVIEW能否對采集的正弦力信號進行快速傅里葉變換(FFT),并得到幅值和相位結果? 答案: 可以。LabVIEW通過內置信號處理工具包提供完整的FFT分析功能,具體實現如下: FFT分析流…

Nginx+PHP+MYSQL-Ubuntu在線安裝

在 Ubuntu 上配置 Nginx、PHP 和 MySQL 的步驟如下: 1. 更新系統包 首先,確保系統包是最新的: sudo apt update sudo apt upgrade2. 安裝 Nginx 安裝 Nginx: sudo apt install nginx啟動并啟用 Nginx 服務: sudo…

第002文-kali虛擬機安全與網絡配置

1、kali系統介紹 kali是一個基于Linux kernel的操作系統,由BackTrack(簡稱BT)發展而來。BackTrack是2006年推出的一個用于滲透測試及黑客攻防的專用平臺,基于Knoppix(linux的一個發行版)開發。BackTrack版本周期:2006年的起始版本BackTrack …

怎么下載安裝yarn

安裝 npm install --global yarn 是否安裝成功 yarn -v Yarn 淘寶源安裝,分別復制粘貼以下代碼行到黑窗口運行即可 yarn config set registry https://registry.npm.taobao.org -g yarn config set sass_binary_site http://cdn.npm.taobao.org/dist/…

Odoo免費開源CRM技術實戰:從商機線索關聯轉化為售后工單的應用

文 / 開源智造 Odoo金牌服務 Odoo:功能強大且免費開源的CRM Odoo 引入了一種高效的客戶支持管理方式,即將 CRM 線索轉換為服務臺工單。此功能確保銷售和支持團隊能夠無縫協作,從而提升客戶滿意度并縮短問題解決時間。通過整合 CRM 模塊與服…

ArcGIS Pro實戰技巧:靈活運用線條精準分割與裁切面要素

在地理信息系統(GIS)的應用中,我們經常需要對地圖上的面要素進行精確的分割或裁切。 ArcGIS Pro作為一款強大的GIS軟件,提供了多種工具來滿足這一需求。 本文將詳細介紹如何在ArcGIS Pro中使用線要素對面要素進行分割和裁切&…

基于python的網絡爬蟲爬取天氣數據及可視化分析(Matplotlib、sk-learn等,包括ppt,視頻)

基于Python爬取天氣數據信息與可視化分析(文末完整源碼) 基于python的網絡爬蟲爬取天氣數據及可視化分析 可以看看演示視頻。 摘要 基于Python爬取天氣數據信息與可視化分析 本論文旨在利用Python編程語言實現天氣數據信息的爬取和可視化分析。天氣…

Angular Loss論文理解

Angular Loss論文理解 一、相較于Triplet loss二、Angular loss的意義三、Angular loss的優點四、Angular Loss五、實施細節六、訓練細節七、未來構想 一、相較于Triplet loss Triplet loss在訓練時,收斂較難 每個三元組需要三次抽樣,然而將某個數據集…

加入二極管的NE555 PWM 電路

只用電阻、電容構成的一般定時電路的占空比無法低于50%,如下圖: 電容的充電路徑上串聯了R1 和R2,而放電路徑上只有R2,所以放電的時間不可能比充電長。加入二極管就能解決這個問題,用二極管把充電和放電路徑分離開&…

本地部署大語言模型-DeepSeek

DeepSeek 是國內頂尖 AI 團隊「深度求索」開發的多模態大模型,具備數學推理、代碼生成等深度能力,堪稱"AI界的六邊形戰士"。 Hostease AMD 9950X/96G/3.84T NVMe/1G/5IP/RTX4090 GPU服務器提供多種計費模式。 DeepSeek-R1-32B配置 配置項 規…

[AI機器人] Web-AI-Robot機器人前瞻版--比奇堡海之霸凱倫

文章目錄 簡述開源Web-AI-Robot 項目-比奇堡-海之霸-凱倫 技術架構效果預覽 簡述 本項目配合前端項目bikini_bottom_karen_ui運行,來源于柒杉工作室(截止2025.2,目前我自己)。 打造一個只需要在瀏覽器上運行的AI智能機器人&#…

250302-綠聯NAS通過Docker配置SearXNG及適配Open-WebUI的yaml配置

A. 配置Docker中的代理 綠聯NAS簡單解決docker無法獲取鏡像-不用軟路由 - 嗶哩嗶哩 B. 下載官網對應的鏡像 群暉NAS用docker搭建SearXNG元搜索引擎_嗶哩嗶哩_bilibili C. 修改默認省略的參數,只配置Base_URL,刪除其它默認的空缺項 searxng-docker/REA…

java容器 LIst、set、Map

Java容器中的List、Set、Map是核心數據結構,各自適用于不同的場景 一、List(有序、可重復) List接口代表有序集合,允許元素重復和通過索引訪問,主要實現類包括: ArrayList 底層結構:動態數組…

3471. 找出最大的幾近缺失整數

3471. 找出最大的幾近缺失整數 class Solution:# 輔助方法,判斷第三種情況,只有首位兩個元素有可能為最大幾近缺失數def f(self,nums,x):return -1 if x in nums else xdef largestInteger(self, nums: List[int], k: int) -> int:n len(nums)if k …

【異常錯誤】No module named ‘taming.modules.vqvae‘

錯誤&#xff1a; File "/mnt/d/Pycharm_workspace/text2image/OmniGen-version/OmniGen/latentDiffusion/ldm/models/autoencoder.py", line 6, in <module> from taming.modules.vqvae.quantize import VectorQuantizer2 as VectorQuantizer ModuleNotF…

快檢查達夢庫怎么了

扁鵲的弟弟來了 要求5分鐘定位達夢數據庫問題 #!/bin/bash## content 實例個數 告警日志 實例狀態 用戶連接 活動會話 鎖 集群狀態 服務狀態 磁盤空間 cpu mem 偵聽及日志 ## scope 單機、DW、DSC Linux 多實例 ## example 將腳本保存為d.sh&#xff0c;用root用執行&#…