Network,XHR,json(4)

當(dāng)我們的程序運(yùn)行結(jié)果什么都找不到時(shí),有兩種情況:

1、 首先要確認(rèn)自己的代碼是否有問題。

確認(rèn)的方法是:用print方法從下往上,倒推著一步一步排查:看提取是不是出錯(cuò),看解析是不是出錯(cuò),看請(qǐng)求是不是出錯(cuò)。

2、 網(wǎng)頁源代碼里沒有我們想要的數(shù)據(jù)?
確認(rèn)的方法是:翻找Network。
有一些比較老(或比較輕量)的網(wǎng)站,會(huì)直接把所有的關(guān)鍵信息都放在第0個(gè)請(qǐng)求(當(dāng)下剛剛完成的請(qǐng)求)里,我們用requests和BeautifulSoup就能解決它們。否則,就需要用到Network。

什么是Network

用途:
Network的功能是:記錄在當(dāng)前頁面上發(fā)生的所有請(qǐng)求。
Network記錄的是實(shí)時(shí)網(wǎng)絡(luò)請(qǐng)求
我們點(diǎn)擊一下刷新,瀏覽器會(huì)重新訪問網(wǎng)絡(luò),這樣就會(huì)有記錄。

Network怎么用

4-1.png

紅色的圓鈕是啟用Network監(jiān)控(默認(rèn)高亮打開),灰色圓圈是清空面板上的信息。右側(cè)勾選框Preserve log,它的作用是“保留請(qǐng)求日志”。如果不點(diǎn)擊這個(gè),當(dāng)發(fā)生頁面跳轉(zhuǎn)的時(shí)候,記錄就會(huì)被清空。

主要功能:
ALL(查看全部)
XHR(僅查看XHR,一種不借助刷新網(wǎng)頁即可傳輸數(shù)據(jù)的對(duì)象)
Doc(Document,第0個(gè)請(qǐng)求一般在這里)
Img(僅查看圖片)
Media(僅查看媒體文件)
Other(其他)
JS和CSS是前端代碼,負(fù)責(zé)發(fā)起請(qǐng)求和頁面實(shí)現(xiàn)
Font是文字的字體

什么是XHR?

是Network中一類非常重要的請(qǐng)求,當(dāng)把鼠標(biāo)在XHR上懸停,可以看到它的完整表述是XHR and Fetch。

用瀏覽器上網(wǎng)時(shí)經(jīng)常有這樣的情況:瀏覽器上方訪問的網(wǎng)址沒變,但是網(wǎng)頁里卻新加了內(nèi)容。如購物網(wǎng)站,下滑自動(dòng)加載出更多商品。這是Ajax技術(shù)。這種技術(shù)在工作的時(shí)候,會(huì)創(chuàng)建一個(gè)XHR(或是Fetch)對(duì)象,然后利用XHR對(duì)象來實(shí)現(xiàn)服務(wù)器和瀏覽器之間傳輸數(shù)據(jù)。
如今,比較新潮的網(wǎng)站都在使用這種技術(shù)來實(shí)現(xiàn)數(shù)據(jù)傳輸。只剩下一些特別老,或是輕量的網(wǎng)站還在用老辦法——加載新的內(nèi)容,必須要跳轉(zhuǎn)一個(gè)新網(wǎng)址。

XHR怎么請(qǐng)求?

使用前提:
當(dāng)我們要找的東西不在網(wǎng)頁源代碼(res.text)里,而且也不是圖片,不是媒體文件,自然只會(huì)是在XHR里。

首先,尋找可能存放的文件名稱
1、 點(diǎn)擊XHR,尋找最大的數(shù)據(jù)(通常我們要的東西都含有較大的數(shù)據(jù)量)
2、 或者試著去閱讀XHR或是Fetch文件名稱,比如,client_search(意思是客戶端搜索)

其次,點(diǎn)擊開這個(gè)文件查看尋找

4-2.png

Headers:標(biāo)頭(請(qǐng)求信息)
Preview:預(yù)覽
Response:響應(yīng)
Cookies:Cookies
Timing:時(shí)間
點(diǎn)擊Preview(預(yù)覽),找對(duì)的話能在里面發(fā)現(xiàn)我們想要的信息就藏在里面?。ㄓ袝r(shí)需要一層一層展開)

最后,拿到這個(gè)文件(定義文件位置)
那如何把這些文件拿到呢?

1、去最左側(cè)的Headers。第0個(gè)General,General里的Requests URL就是我們應(yīng)該去訪問的鏈接。
2、回到原網(wǎng)址,直接用Preview來看,順序展開后列表和字典在此有非常清晰的結(jié)構(gòu)。
XHR是一個(gè)字典,字典里可以套字典,字典里也可以套列表。其中對(duì)應(yīng)我們要找的文件名。

json是什么?

用途:
使用res.text取到的,是字符串。它不是我們想要的列表/字典,因此數(shù)據(jù)取不出來。這時(shí)候,需要把response對(duì)象轉(zhuǎn)成列表/字典(把response對(duì)象轉(zhuǎn)成字符串的方法是res.text)——用json來實(shí)現(xiàn)。我們可以將json格式的數(shù)據(jù),轉(zhuǎn)換成正常的列表/字典,也可以將列表/字典轉(zhuǎn)換成json。

定義:
在Python語言當(dāng)中,json是一種特殊的字符串,這種字符串特殊在它的寫法——它是用列表/字典的語法寫成的。

舉例:
a = '1,2,3,4'# 這是字符串
b = [1,2,3,4]# 這是列表
c = '[1,2,3,4]'# 這是字符串,但它是用json格式寫的字符串

這種特殊的寫法決定了,json能夠有組織地存儲(chǔ)信息。json是另一種組織數(shù)據(jù)的格式,長得和Python中的列表/字典非常相像。它和html一樣,常用來做網(wǎng)絡(luò)數(shù)據(jù)傳輸。在XHR里查看到的列表/字典,嚴(yán)格來說其實(shí)它不是列表/字典,它是json。

json和XHR之間的關(guān)系:
XHR用于傳輸數(shù)據(jù),它能傳輸很多種數(shù)據(jù),json是被傳輸?shù)囊环N數(shù)據(jù)格式。

json數(shù)據(jù)如何解析?
方法:
請(qǐng)求到數(shù)據(jù)之后,使用json()方法即可成功讀取。接下來的操作,就和列表/字典相一致。

舉例說明:
import requests# 引用requests庫
res_music = requests.get('https://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.song&searchid=60997426243444153&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=20&w=%E5%91%A8%E6%9D%B0%E4%BC%A6&g_tk=5381&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq.json&needNewCode=0')# 調(diào)用get方法,下載這個(gè)字典
json_music = res_music.json()# 使用json()方法,將response對(duì)象,轉(zhuǎn)為列表/字典
list_music = json_music['data']['song']['list']# 一層一層地取字典,獲取歌單列表
for music in list_music:# list_music是一個(gè)列表,music是它里面的元素
print(music['name']) # 以name為鍵,查找歌曲名

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容