原理:動態網頁,即用js代碼實現動態加載數據,就是可以根據用戶的行為,自動訪問服務器請求數據,重點就是:請求數據,那么怎么用python獲取這個數據了?
瀏覽器請求數據方式:瀏覽器向服務器的api(例如這樣的字符串:http://api.qingyunke.com/api.php?key=free&appid=0&msg=關鍵詞)發送請求,服務器返回json,然后解析該json,就得到請求數據了
同理:用Python向api發送請求,獲得json,解析json,得到數據
即關鍵在于得到api
api獲取:
將鼠標放在上圖圖示位置,將顯示該用戶的一些信息,這些信息就是動態加載出來的。當鼠標放在該位置時,瀏覽器向服務器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循環控制變換字符即可實現自動爬取
上述代碼運行結果:
和該界面對照
以上
利用selenium并使用gevent爬取動態網頁數據
首先要下載相應的庫 gevent協程庫:pip install?gevent selenium模擬瀏覽器訪問庫:pip install?selenium selenium庫相應驅動配置??https: ...
python爬取動態網頁2,從JavaScript文件讀取內容
import requests import json head = {"user-agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) ...
Python:將爬取的網頁數據寫入Excel文件中
Python:將爬取的網頁數據寫入Excel文件中 通過網絡爬蟲爬取信息后,我們一般是將內容存入txt文件或者數據庫中,也可以寫入Excel文件中,這里介紹關于使用Excel文件保存爬取到的網頁數據的 ...
selenium抓取動態網頁數據
1.selenium抓取動態網頁數據基礎介紹 1.1 什么是AJAX AJAX(Asynchronouse JavaScript And XML:異步JavaScript和XML)通過在后臺與服務器進 ...
R語言爬取動態網頁之環境準備
在R實現pm2.5地圖數據展示文章中,使用rvest包實現了靜態頁面的數據抓取,然而rvest只能抓取靜態網頁,而諸如ajax異步加載的動態網頁結構無能為力.在R語言中,爬取這類網頁可以使用RSele ...
python爬取某個網頁的圖片-如百度貼吧
python爬取某個網頁的圖片-如百度貼吧 作者:vpoet mail:vpoet_sir@163.com 注:隨意copy,不用告訴我 #coding:utf-8 import urllib imp ...
Python 爬取單個網頁所需要加載的地址和CSS、JS文件地址
Python 爬取單個網頁所需要加載的URL地址和CSS.JS文件地址 通過學習Python爬蟲,知道根據正式表達式匹配查找到所需要的內容(標題.圖片.文章等等).而我從測試的角度去使用Python爬 ...
利用Python爬取朋友圈數據,爬到你開始懷疑人生
人生最難的事是自我認知,用Python爬取朋友圈數據,讓我們重新審視自己,審視我們周圍的圈子. 文:朱元祿(@數據分析-jacky) 哲學的兩大問題:1.我是誰?2.我們從哪里來? 本文 jacky試 ...
爬蟲(三)通過Selenium + Headless Chrome爬取動態網頁
一.Selenium Selenium是一個用于Web應用程序測試的工具,它可以在各種瀏覽器中運行,包括Chrome,Safari,Firefox 等主流界面式瀏覽器. 我們可以直接用pip inst ...
隨機推薦
lucene 使用注意
1.建立索引時,忘記writer.close(); 結果: 正常結果:
About Wisdom
All human wisdom is summed up in two words?--- wait and hope.人類所有的智慧可以歸結為兩個詞---等待和希望. —— Alexandre D ...
ADO.NET——獲取output 和 return值
程序代碼 //存儲過程 //Create PROCEDURE MYSQL // @a int, // @b int //AS // return @a + @b //GO SqlConnection ...
python學習之路-11 多線程、多進程、協程
python內置隊列模塊 queue queue的四種隊列 q = queue.Queue() # 先進先出隊列 q = queue.LifoQueue() # 后進先出隊列 q = queue.Pr ...
android系統的圖片資源
使用系統的圖片資源的好處有,一個是美工不需要重復的做一份已有的圖片了,可以節約不少工時:另一個是能保證我們的應用程序的風格與系統一致. 1.引用方式 在源代碼*.Java中可以進入如下方式引用: my ...
在dotnetcore的MVC項目中,創建支持 vue.js 的最小工程模板
網上Vue模板不是最新的,我自己做了一個最新的支持 Vue.js 的最小工程模板,方便大家從 Hello world. 入門, 在 VS2017 里學習,并擴展出自己的項目. 下面是創建步驟: 1.在 ...
js switch 用法
//獲取星期 //例子1 var day=new Date().getDay(); switch (day) { : x="Today it's Saturday"; break; ...
js 序列化
Python 序列化 字符串 = json.dumps(對象)? 對象轉字符串 對象 = json.loads(字符串)? ?字符串轉對象 Javascript 字符串 = JSON.stringif ...
更改linux下文件目錄權限、擁有者及用戶組
在linux中的每個用戶必須屬于一個組,不能獨立于組外.在linux中每個文件有所有者.所在組.其它組的概念 -?所有者 -?所在組 -?其它組 -?改變用戶所在的組 所有者 一般為文件的創建者,誰創 ...
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态