python爬取动态网页_python爬取动态网页数据,详解

原理:动态网页,即用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中每个文件有所有者.所在组.其它组的概念 - 所有者 - 所在组 - 其它组 - 改变用户所在的组 所有者 一般为文件的创建者,谁创 ...

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值