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

 2023-11-19 阅读 29 评论 0

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

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

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

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

即關鍵在于得到api

api獲取:

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vaS1iZXRhLzE3ODU2MzgvMjAxOTEyLzE3ODU2MzgtMjAxOTEyMDYxNTMyNDcxODktMTExNjQyNzg3NS5wbmc=.jpg

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

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vaS1iZXRhLzE3ODU2MzgvMjAxOTEyLzE3ODU2MzgtMjAxOTEyMDYxNTQzMjY3ODktMTQ1MDA4MTQyMC5wbmc=.jpg

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

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vaS1iZXRhLzE3ODU2MzgvMjAxOTEyLzE3ODU2MzgtMjAxOTEyMDYxNTQ2MzMxODAtMTQ0MzEyNzEwNi5wbmc=.jpg

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

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vaS1iZXRhLzE3ODU2MzgvMjAxOTEyLzE3ODU2MzgtMjAxOTEyMDYxNTUxMDQ4ODAtMzkxODcyMjQ5LnBuZw==.jpg

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

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vaS1iZXRhLzE3ODU2MzgvMjAxOTEyLzE3ODU2MzgtMjAxOTEyMDYxNTU0NDE5NTQtMTE1NTkzNjEyMi5wbmc=.jpg

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

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vaS1iZXRhLzE3ODU2MzgvMjAxOTEyLzE3ODU2MzgtMjAxOTEyMDYxNjAzNTYyMjQtMTg4MTcwNTY2OC5wbmc=.jpg

下面用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:

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vaS1iZXRhLzE3ODU2MzgvMjAxOTEyLzE3ODU2MzgtMjAxOTEyMDYxNjIwMjc3NzktMzY3NzM1NTU4LnBuZw==.jpg

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

上述代碼運行結果:

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vaS1iZXRhLzE3ODU2MzgvMjAxOTEyLzE3ODU2MzgtMjAxOTEyMDYxNjIzMDc5MDktODUwNDYwMDcyLnBuZw==.jpg

和該界面對照

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vaS1iZXRhLzE3ODU2MzgvMjAxOTEyLzE3ODU2MzgtMjAxOTEyMDYxNjI1MTMyNDQtNTQ3NTg2MTc1LnBuZw==.jpg

以上

利用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中每個文件有所有者.所在組.其它組的概念 -?所有者 -?所在組 -?其它組 -?改變用戶所在的組 所有者 一般為文件的創建者,誰創 ...

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/186091.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息