前面的例子都是获取的服务器渲染数据,本篇来尝试获取客户端渲染数据,案例就是CSDN,尝试用魔法打败魔法(狗头。

目标:获取指定博主ID所有的文章标题、链接、阅读量。

一、 确认渲染方式

也就是要获取的数据在不在源代码中

右键,查看网页源码,发现标题、链接、阅读数、点赞数等都有,开心地以为这是服务器渲染方式。

但是再往下多滚几页,再点查看源码,你会发现源码一点变化都没有。所以其实这是客户端渲染方式,源码看到的那些数据只是框架而已。

既然如此,应该直接去取它推送的格式化数据。

二、 获取数据准备

回顾一下获取客户端渲染方式数据需要准备什么 Python 数据获取(一)—— request模块、变量使用与传参方式_Hehuyi_In的博客-CSDN博客_python request传参

1. 找到数据链接和参数

在博客主页 -> F12 -> network -> 往下滚直到出现第二页数据

可以看到,真正的数据页出现了。

Headers页面可以获取url和请求方式

https://blog.csdn.net/community/home-api/v1/get-business-list?page=2&size=20&businessType=lately&noMore=false&username=Hehuyi_In

Payload页可以获取参数

  • 这里只有page是会变的,通过循环,就可以获取到所有链接。

2. 获取总页数

当然如果只是获取我自己的,标题栏瞄一眼就知道一共707篇,但批量获取就不靠谱了。

不过,既然它在标题栏了,就肯定有办法获取到。

重新打开F12 -> network -> 在博客主页刷新,找博客数相关的数据

看看这个url和参数

https://blog.csdn.net/community/home-api/v1/get-tab-total?username=Hehuyi_In

3. 整体思路

  • 访问blogs对应链接,获取总博客数
  • 访问真正数据链接,获取单页的博客标题、链接、阅读量等
  • 根据总博客数和每页size,计算循环次数,循环执行第二步
  • 数据保存

下面就按整体思路来逐步完成代码

三、 代码实现

1. 获取总博客数

import requestsheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4542.2 Safari/537.36'}def getBlogsCount(username):url = 'https://blog.csdn.net/community/home-api/v1/get-tab-total'params = {'username': username}resp = requests.get(url=url, headers=headers,params=params)# 注意要的是json数据而不是text文本# print(resp.json())                  # 输出为 {..., 'data': {..., 'ask': 0, 'video': 0, 'blink': 0, 'blog': 707, 'live': 0}}# print(resp.json()['data']['blog'])  # 输出为 707return resp.json()['data']['blog']if __name__ == '__main__':username = "Hehuyi_In"getBlogsCount(username)

2. 获取单页数据

import requestsheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4542.2 Safari/537.36'}def getBlogsInfo(username):url = 'https://blog.csdn.net/community/home-api/v1/get-business-list'page = 2size = 20params = {'page':page,'size':size,'businessType':'lately','noMore':'false','username': username}resp = requests.get(url=url, headers=headers,params=params)# print(resp.json())                   # 输出为 {... 'data': {'list': [{..., 'title': 'postgresql源码学习(41)—— 崩溃恢复③ - 日志来源', ..., 'url': 'https://blog.csdn.net/Hehuyi_In/article/details/126494891',...,'viewCount': 568}for info in resp.json()['data']['list']:# 只获取blog信息,其他类型例如download链接则不保存if (info['type'] == 'blog'):print(info['title'])print(info['url'])print(info['viewCount'])
if __name__ == '__main__':username = "Hehuyi_In"getBlogsInfo(username)

3. 循环输出

getBlogsCount函数不变,增加了循环调用

def getBlogsInfo(username,blogs_count):url = 'https://blog.csdn.net/community/home-api/v1/get-business-list'size = 20# 总页数=int((总记录数-1)/每页数量)+1page_count = int((blogs_count-1)/size)+1# 循环处理每页for page in range(1,page_count+1):params = {'page':page,'size':size,'businessType':'lately','noMore':'false','username': username}resp = requests.get(url=url, headers=headers,params=params)# print(resp.json())                   # 输出为 {... 'data': {'list': [{..., 'title': 'postgresql源码学习(41)—— 崩溃恢复③ - 日志来源', ..., 'url': 'https://blog.csdn.net/Hehuyi_In/article/details/126494891',...,'viewCount': 568}for info in resp.json()['data']['list']:# 只获取blog信息,其他类型例如download链接则不保存if (info['type'] == 'blog'):print(info['title'])print(info['url'])print(info['viewCount'])
if __name__ == '__main__':username = "Hehuyi_In"blogs_count=getBlogsCount(username)getBlogsInfo(username,blogs_count)

4. 数据保存

这里把它们保存到excel,如果只是想要文章url,直接存到txt文档会更简单。

效果如下

稍微调整下格式

def saveBlogsInfo(username,blogs_count,filename):# 实例化excel文档wb = openpyxl.Workbook()# 获取当前sheetsheet = wb.active# 表头数据,是一个listheader_list=['文章标题','文章链接','阅读量']sheet.append(header_list)# 获取博客数据url = 'https://blog.csdn.net/community/home-api/v1/get-business-list'size = 20# 总页数=int((总记录数-1)/每页数量)+1page_count = int((blogs_count-1)/size)+1# 循环处理每页for page in range(1,page_count+1):params = {'page':page,'size':size,'businessType':'lately','noMore':'false','username': username}resp = requests.get(url=url, headers=headers,params=params)# print(resp.json())                   # 输出为 {... 'data': {'list': [{..., 'title': 'postgresql源码学习(41)—— 崩溃恢复③ - 日志来源', ..., 'url': 'https://blog.csdn.net/Hehuyi_In/article/details/126494891',...,'viewCount': 568}for info in resp.json()['data']['list']:# 只获取blog信息,其他类型例如download链接则不保存if (info['type'] == 'blog'):info_list = []info_list.append(info['title'])info_list.append(info['url'])info_list.append(info['viewCount'])sheet.append(info_list)# 保存excelwb.save(filename)if __name__ == '__main__':username = "Hehuyi_In"filename = username+"--CSDN文章信息.xlsx"blogs_count=getBlogsCount(username)saveBlogsInfo(username,blogs_count,filename)

四、 读取excel数据

算是个附加内容,保存到excel后怎么用Python读出来?

# 读取文件访问所有文章
def getExcelData(filename):# 打开excel文档wb = openpyxl.load_workbook(filename)# 获取当前sheetsheet = wb.active# iter_rows函数可以加各种参数用于获取指定行和列的数据,例如 min_row,max_row,min_col,max_colfor row_list in sheet.iter_rows():for cell in row_list:# 注意这里是.valueprint(cell.value)

大功告成~

五、 完整代码

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time  : 2022-12-03 23:14
# @Author: Hehuyi_In
# @File  : get_csdn_utl.pyimport requests
import openpyxlheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4542.2 Safari/537.36'}def getBlogsCount(username):url = 'https://blog.csdn.net/community/home-api/v1/get-tab-total'params = {'username': username}resp = requests.get(url=url, headers=headers,params=params)# 注意要的是json数据而不是text文本# print(resp.json())                  # 输出为 {..., 'data': {..., 'ask': 0, 'video': 0, 'blink': 0, 'blog': 707, 'live': 0}}# print(resp.json()['data']['blog'])  # 输出为 707return resp.json()['data']['blog']def saveBlogsInfo(username,blogs_count,filename):# 实例化excel文档wb = openpyxl.Workbook()# 获取当前sheetsheet = wb.active# 表头数据,是一个listheader_list=['文章标题','文章链接','阅读量']sheet.append(header_list)# 获取博客数据url = 'https://blog.csdn.net/community/home-api/v1/get-business-list'size = 20# 总页数=int((总记录数-1)/每页数量)+1page_count = int((blogs_count-1)/size)+1# 循环处理每页for page in range(1,page_count+1):params = {'page':page,'size':size,'businessType':'lately','noMore':'false','username': username}resp = requests.get(url=url, headers=headers,params=params)# print(resp.json())                   # 输出为 {... 'data': {'list': [{..., 'title': 'postgresql源码学习(41)—— 崩溃恢复③ - 日志来源', ..., 'url': 'https://blog.csdn.net/Hehuyi_In/article/details/126494891',...,'viewCount': 568}for info in resp.json()['data']['list']:# 只获取blog信息,其他类型例如download链接则不保存if (info['type'] == 'blog'):info_list = []info_list.append(info['title'])info_list.append(info['url'])info_list.append(info['viewCount'])sheet.append(info_list)# 保存excelwb.save(filename)# 读取文件访问所有文章
def getExcelData(filename):# 打开excel文档wb = openpyxl.load_workbook(filename)# 获取当前sheetsheet = wb.active# iter_rows函数可以加各种参数用于获取指定行和列的数据,例如 min_row,max_row,min_col,max_colfor row_list in sheet.iter_rows():for cell in row_list:# 注意这里是.valueprint(cell.value)if __name__ == '__main__':# 注意这个username实际对应的是CSDN个人中心里的用户id,只是为了对应网页中的参数名这里也叫usernameusername = "Hehuyi_In"filename = username+"--CSDN文章信息.xlsx"blogs_count=getBlogsCount(username)saveBlogsInfo(username,blogs_count,filename)# getExcelData(filename)

参考

Python 数据获取(一)—— request模块、变量使用与传参方式_Hehuyi_In的博客-CSDN博客_python request传参

Python将word表格存入excel —— 格式化pg参数手册_Hehuyi_In的博客-CSDN博客_python word表格写入excel

Python 数据获取(五)—— 获取客户端渲染方式数据相关推荐

  1. 因为 Java 和 Php 在获取客户端 cookie 方式不同引发的 bug

    遇到个 Java 和 Php 在获取客户端 cookie 方式不同导致跨系统的问题.所以写了这篇博客梳理下相关知识. 实验 下面通过两个简单的实验,来看Java和Php在获取web请求中的cookie ...

  2. 【随记】Python:前端表格获取到的填写数据插入到数据库表格中数据类型问题

    Python:前端表格获取到的填写数据插入到数据库表格中数据类型问题 背景 问题再现 结论 背景 用户在前端界面的表格中填写数据,通过 text() 获取到的数据插入到数据库表中,该过程涉及到了数据类 ...

  3. python带你获取视频及弹幕数据~知识点满满(含完整源代码)

    前言 嗨喽!大家好呀,这里是魔王~** 模块安装问题: 如果安装python第三方模块: win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip instal ...

  4. 【Python】爬虫获取微博热搜数据,response中文显示“\u7814\u7a76\u8bc1\u5b9e\u”

    问题描述 在爬虫获取微博热搜数据的时候,response中文出现了不便于理解的字段,截取如下: ......[{"title_sub":"\u7814\u7a76\u8b ...

  5. Python爬虫之获取淘宝商品数据

    爬取淘宝信息数据 首先需要先导入webdriver from selenium import webdriver webdriver支持主流的浏览器,比如说:谷歌浏览器.火狐浏览器.IE浏览器等等 然 ...

  6. python model如何获取分类错误的数据_使用CNN和Keras进行95%准确度的交通标志识别的Python项目

    Python项目–交通标志识别 您一定已经听说过自动驾驶汽车,乘客可以在其中完全依靠汽车行驶.但是要实现5级自动驾驶,车辆必须了解并遵守所有交通规则. 在人工智能和技术进步的世界中,许多研究人员和大公 ...

  7. python加载html表格数据,使用python 3.6获取html表格行数据美丽的汤

    选择 '数据reactid' 具有值" .romjx8c48.1.0.5.1:1.4.0.3.1.0.0.0.0.1. 0.0.0.0.1.$ company-data-Revenues($ ...

  8. java开发 获取客户端地磅串口数据

    这里写自定义目录标题 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一 ...

  9. python笔记(五) - 获取对象的引用

    1,使用 getattr 函数,可以得到一个直到运行时才知道名称的函数的引用. >>> li = ["Larry", "Curly"] > ...

最新文章

  1. Linux网络通信管理
  2. python详细安装教程环境配置-Python的安装教程与环境配置
  3. 使用神经网络拟合曲线(MATLAB/Python)
  4. 企业分布式微服务云SpringCloud SpringBoot mybatis (五)路由网关(zuul)
  5. Xcode 6.3 Ineligible Devices 临时解决方法
  6. undefined reference to `boost::system::generic_category()
  7. python 列表数据类型 200221
  8. 应届生找工作是首先选择一个公司,还是选择一个行业?
  9. idea 调节背景护眼_网易严选皓月护眼台灯评测:真正专业智能台灯,保护眼睛设计超强...
  10. 用cmd 查看本机的IP地址
  11. 【机器学习】几种常见的有监督学习算法
  12. (转载)重新编译SJF2410以适应NM9805并口卡(PCMICIA接口)
  13. iframe中某些网页无法打开
  14. 投影幕尺寸参数对照表
  15. 天使投资AI、风险投资VC、私募股权投资PE、投行IB、FOF、普通合伙人GP、有限合伙人LP、PIPE
  16. 3天1W赞的程序员学习路线,入门进阶都非常实用
  17. matlab生成特定矩阵
  18. 快速上手 Kotlin 开发系列之数据类和枚举
  19. 【CVPR 2021】Knowledge Review:知识蒸馏新解法
  20. 庆贺谢副会长乔迁新居及2018年新年聚会

热门文章

  1. Docker私有仓库与Harbor部署使用
  2. 手把手教你“撸”一套企业级代理服务-前言
  3. 一中模拟赛3.15——树上gcd
  4. 【TwinCAT3】安装注意事项记录
  5. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version
  6. 测试百公里加速软件,测试:实测百公里加速成绩为9.6秒
  7. 比开源技术更重要的,可能是开源治理!
  8. 网红创业潮来袭 网红经济还能红多久?
  9. 《类型和程序设计语言》
  10. 医药数字化的中国实践