python爬取動態網頁數據,詳解


原理:動態網頁,即用js代碼實現動態加載數據,就是可以根據用戶的行為,自動訪問服務器請求數據重點就是:請求數據那么怎么用python獲取這個數據了?

瀏覽器請求數據方式:瀏覽器向服務器的api(例如這樣的字符串:http://api.qingyunke.com/api.php?key=free&appid=0&msg=關鍵詞)發送請求,服務器返回json,然后解析該json,就得到請求數據

同理:用Python向api發送請求,獲得json,解析json,得到數據

即關鍵在於得到api

api獲取:

  1.用瀏覽器打開目標網頁eg:https://www.zhihu.com/topic/19561718/top-answers

 

 將鼠標放在上圖圖示位置,將顯示該用戶的一些信息,這些信息就是動態加載出來的。當鼠標放在該位置時,瀏覽器向服務器api發出請求,得到json,再解析便得到下圖所示數據

 

 

 

 在該網頁反鍵選擇檢查源代碼,按圖示點開選項:

 

 然后將鼠標移動到網頁界面用戶上(箭頭位置),會發現右邊多出兩個請求信息,如圖:

 

 點擊下面一個,紅色方框內的鏈接,就是要找的api接口

 

直接用瀏覽器打開該api即可看到json,如下圖

 

下面用python代碼請求該api並解析

 

import requests
import json
#api
url='https://www.zhihu.com/api/v4/members/wisphilo?include=allow_message%2Cis_followed%2Cis_following%2Cis_org%2Cis_blocking%2Cemployments%2Canswer_count%2Cfollower_count%2Carticles_count%2Cgender%2Cbadge%5B%3F(type%3Dbest_answerer)%5D.topics'

#header的目的是模擬請求,因為該api設置了反爬取
header={
	'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'
}

doc=requests.get(url,headers=header)#發起請求
doc.encoding='utf-8'#設置編碼為utf-8

data=json.loads(doc.text)#將json字符串轉為json

#根據位置查找數據 print('用戶名:',data.get('name')) print('個人描述:',data.get('headline')) print('職務:'+data.get('employments')[0].get('job').get('name')) print('回答:',data.get('answer_count')) print('文章:',data.get('articles_count')) print('關注者:',data.get('follower_count'))

  另外查找數據最好用在線json格式化再查找,不然很難看出自己要的數據在哪eg:

 

 一般網頁的api都有規律可尋,用for循環控制變換字符即可實現自動爬取

上述代碼運行結果:

 

 和該界面對照

 

 

 以上

打賞

免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2021 CODEPRJ.COM