谈及动态加载页面,最先想到的一种情形是这样的——“加载更多”:

面对这种动态加载的页面,要想获得更多的数据,往往需要借助开发者工具进行辅助分析。回归正题,本文依次介绍爬取对象、分析爬取内容。

爬取对象——在行

在行这个平台很多人可能不太熟悉,但是近些年知识付费的井喷式发展很多人应该深有体会,国内从最早的知乎平台,到前些年昙花一现的芬达、得到,每一款产品的运营都是一次新模式的尝试。

与上述专注线上问答模式的平台不同,在行主打的是线下约见的模式——即用户可以在网站上寻找“合自己口味”的行家并向其发出线下见面的邀约,相较于线上问答平台,在行的运营显然更加困难,不过独树一帜的模式也为知识付费带来了更多的可能。

对在行的简单介绍就是这样,下面进入正题。

1.首先浏览一下网站,确定要获取哪些数据。

URL:https://www.zaih.com/falcon/

打开URL,进入网站首页,如下:

可以看到,平台对行家的分类主要为职场发展、行业经验、互联网+、心理等九个大类;若将鼠标悬停至各个大类element时,每个大类下又分为多个小类别,如下图:

(分得太细了,我们还是依据大类分析行家数据吧),以职场发展为例,点击进入:

每页有15名行家的简单信息(包括姓名、所在城市、职业、热门话题、约聊价格和已约见人数),点击各个行家后可以进入其主页,上面有更详细的数据,我们选择第二位叫葛嵩的行家,打开其主页:

主页内容丰富,除了之前页面上出现的简单信息,还有当前行家的约见情况(评分、响应率)、行家自述、用户评价数据等。

2.如何获取所需数据?

那么,为了批量获取每位行家的各项详细数据,我们需要进入每位行家的主页,因此需要获得行家的URL。如何获得呢?我们首先想到,由于我们是从职场发展页跳转到各个行家主页,所以有可能职场发展页上使用了标签<a>设置了链接的各个属性,我们或许能够找到<a>的属性href,直接获取URL;或者细心的朋友应该已经发现,每一位行家都对应着一个ID,这是构造行家主页URL的核心,如葛嵩的ID就为2bi9xi1yzxl,如果能找到行家ID,我们也能够自行构造URL。为了验证想法,回到职场发展页,打开开发者工具F12

我们从Elements中找到行家葛嵩,如下图:

可以发现,在对应的<section>下,并没有我们所需要的element,看来不能那么轻松地解决这个问题。

不过,既然页面能够实现跳转,那么会有两种情况(第一,行家的URL被页面动态加载出来;第二,页面动态加载行家ID,js文件再利用ID生成URL)。因此,我们可以打开Network筛选Xhr,查找页面动态加载的内容,如下图:

我们选中当前页面加载出来的文件,在Preview中发现了我们需要的内容——被命名为uid的数据(即为我们需要的行家ID)。

那么我们尝试获取一下当前页面所有行家的ID。在加载文件的Headers中,可以得到Request URL和Method。如下图:

利用该URL模拟向服务器发出请求,得到Response文件。该文件是json格式的,所以需要.json()方法转换。代码如下:

import requestsdef get_mentor_uid(page_url):mentor_uid = set()html = requests.get(page_url).json()hj_num = len(html)for i in range(hj_num):get_uid = html[i]['uid']mentor_uid.add(get_uid)return mentor_uid

换一页试一试,打开第二页,如下图:

页面同样加载出来了15个行家的信息。职业发展下共有173页的行家数据,为了获取所有行家的ID,我们需要构造173个Request URL。这个很容易,随意打开几个新的页面可以发现每页Request URL的格式,如下:

# 第1页:https://www.zaih.com/falcon/mentor_api/v1/tags/397/mentors?page=1&sort=&per_page=15
# 第2页:https://www.zaih.com/falcon/mentor_api/v1/tags/397/mentors?page=2&sort=&per_page=15
# 第173页:https://www.zaih.com/falcon/mentor_api/v1/tags/397/mentors?page=173&sort=&per_page=15

仅仅是page值的变化,因此,可以容易地构造Request URL,代码如下:

def const_page_url():# 以职场发展部分为例,共173页url_list = []url_part_1 = r'https://www.zaih.com/falcon/mentor_api/v1/tags/397/mentors?page='url_part_2 = r'&sort=&per_page=15'for i in range(173):joint = url_part_1 + str(i+1) + url_part_2url_list.append(joint)return url_list

3.完整的代码

打开一个文本存储所有行家的ID,这对进一步获取行家详细数据很重要。

import requestsdef get_mentor_uid(page_url):mentor_uid = set()html = requests.get(page_url).json()hj_num = len(html)for i in range(hj_num):get_uid = html[i]['uid']mentor_uid.add(get_uid)return mentor_uiddef const_page_url():# 以职场发展部分为例,共173页url_list = []url_part_1 = r'https://www.zaih.com/falcon/mentor_api/v1/tags/397/mentors?page='url_part_2 = r'&sort=&per_page=15'for i in range(173):joint = url_part_1 + str(i+1) + url_part_2url_list.append(joint)return url_listif __name__ == '__main__':url = const_page_url()hj_uid = set()for item in url:uid = get_mentor_uid(item)hj_uid = hj_uid.union(uid)# 准备一个文本记录所有的uidf = open(r'/data/mentor_uid_397.txt', 'w', encoding='utf-8')for item in hj_uid:# print(item)f.write(item)f.write('\n')f.close()

运行之后,可以打开文件看一下。

这样就得到了所有行家的ID,初步工作的演示(以职业发展为例)姑且就这样完成了。后面会更新爬取行家主页的内容。

爬取在行平台数据(1)——动态加载页面分析相关推荐

  1. Python爬虫入门 | 7 分类爬取豆瓣电影,解决动态加载问题

      比如我们今天的案例,豆瓣电影分类页面.根本没有什么翻页,需要点击"加载更多"新的电影信息,前面的黑科技瞬间被秒--   又比如知乎关注的人列表页面:   我复制了其中两个人昵称 ...

  2. 动态加载页面分析、POST请求参数和内容爬取

    要求: 爬取网站:http://jg.sac.net.cn/pages/publicity/securities-list.html# 中的所有公司的page_url下面的公司名,注册地址.法人代表等 ...

  3. python爬取js加载的数据_JS动态加载数据不会爬?老司机教你两个方法爬取想要的数据...

    学习Python的人绝大部分都是在用Python做爬虫,毕竟对于爬虫而言Python是不二选. 但是一般简单的静态页面网站还是很好爬取的,对于很多动态加载的网站就不知道怎么办了,今天小编就给大家介绍两 ...

  4. python爬虫动态加载页面_Python+Selenium爬取动态加载页面(2)

    注: 上一篇<Python+Selenium爬取动态加载页面(1)>讲了基本地如何获取动态页面的数据,这里再讲一个稍微复杂一点的数据获取全国水雨情网.数据的获取过程跟人手动获取过程类似,所 ...

  5. 简单爬取微博评论详细解析,学习爬取ajax异步数据交换动态网页

    爬取微博评论详细解析,学习爬取ajax异步数据交换动态网页 1.什么是ajax异步数据交换网页 2.用到的工具模块和简单解释 3.网页内容解析 4.代码实现及解释 1.什么是ajax异步数据交换网页 ...

  6. Java实现动态加载页面_[Java教程]动态加载页面数据的小工具 javascript + jQuery (持续更新)...

    [Java教程]动态加载页面数据的小工具 javascript + jQuery (持续更新) 0 2014-05-07 18:00:06 使用该控件,可以根据url,参数,加载html记录模板(包含 ...

  7. python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析

    这篇文章主要介绍了python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析的实例,帮助大家更好的理解和学习使用python.感兴趣的朋友可以了解下 一.环境准备 python3.8.3 ...

  8. python爬虫实例解析-Python(爬虫)- 动态加载案例分析

    requests """ 基于网络请求的模块. 环境的安装:pip install requests 作用:模拟浏览器发起请求 分析requests的编码流程: 1.指定 ...

  9. 异步请求动态加载页面

    最近现在在做的项目需要前后端分离,并且还有一些国际化的原因,需要动态替换页面上的一些元素,我简单的和前端同学说了一下我的思路,但是前端同学貌似没太明白,于是自己写了个demo. 大致思路是这样的:先从 ...

最新文章

  1. 什么是Java Marker Interface(标记接口)
  2. aspose 换行写_aspose.word 换行符 aspose.words换行符
  3. linux常用命令(用户篇)
  4. viewgroup 渲染过程
  5. Linux网络那点事
  6. linux oracle 安装_Linux下python连接oracle(cx_Oracle模块)
  7. 洛谷——P1179 [NOIP2010 普及组] 数字统计
  8. 手持式频谱仪帮助解决链路故障
  9. 猛男插件!csdn浏览器助手到底怎样!(整合全网评价)
  10. JavaScript - 笛卡尔积算法
  11. microserver gen10 更换硬盘,解决无法开机问题
  12. Linux:如何让内网的服务器能上网
  13. HBase、Kudu 和 ClickHouse 全视角对比
  14. QSS 自定义QMessageBox
  15. nexus7二代刷Linux,大饱眼福: Nexus 7二代全拆解
  16. 七.【Python3.8+Django3.0从零开始系列】Django3.0+Python3.8连接MySql8.0及遇到的问题解决
  17. python数字转换成中文大写
  18. 变电站巡检机器人 代替工人“翻山越岭”
  19. c语言switch语句支持的字符有哪些,C语言中switch()语句的括号内可以是什么型别的呢?...
  20. 单网口电脑安装openwrt软路由做单臂路由

热门文章

  1. 用opacity方法来隐藏元素后,照样可以触发绑定在其身上的点击事件
  2. 机器学习100天(三):003 数据预处理之处理缺失值
  3. 谁杀死了女大学生刘伟?
  4. Valine 一款快速、简洁且高效的无后端评论系统
  5. 耀耀学院task1-task3练习总结
  6. 常见的USB接口种类以及区别
  7. Linux文件服务站
  8. ipv4子网掩码是指的什么意思
  9. nyoj 1248 海岛争霸
  10. Development Build: