百家号个人账号爬虫

2023-11-09 01:31
文章标签 爬虫 个人 账号 百家

本文主要是介绍百家号个人账号爬虫,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

百家号爬虫

爬取内容:个人账号下的全部内容

image-20231102091337971

爬取步骤

一开始用request库发现得不到数据,访问页面的时候加了一层通行证类似的东西。

所以选择用Selenium模拟浏览器的操作。

1、用Selenium模拟打开需要爬取的个人页面

# 创建一个浏览器实例
driver = webdriver.Chrome()
# 打开网站
driver.get("https://author.baidu.com/home/92")

成功打开网页后,F12打开开发者工具,页面不断往下滑发现前端页面是异步加载,那么前端一定会有新的请求发送给后端,得到新数据后在前端渲染出来。

image-20231102093520933

2、找到前后端交互数据的请求

找到响应的请求

image-20231102094306441

可以看到响应内容主要是包含动态的一个列表,那么这就是我们需要的

image-20231102094228692

缩减请求URL,通过每次删除一个参数,对比结果,得到一个较短的URL地址

https://mbd.baidu.com/webpage?tab=main&num=10&uk=hHNfE_FRm443SRWFXvs_HA&source=pc&ctime=16747263512750&type=newhome&action=dynamic&format=jsonp&otherext=h5_20231027211324&Tenger-Mhor=149607609&callback=__jsonp81698889050544

缩减后请求URL

https://mbd.baidu.com/webpage?tab=main&num=10&uk=hHNfE_FRm443SRWFXvs_HA&ctime=16747263512750&type=newhomeformat=jsonp

主要参数分析:

  • num:每次返回的动态内容的条数
  • uk:要爬取用户的唯一标识
  • ctime:动态的标识,表示获取内容从当前动态开始,往后num条(当没有ctime参数时默认从第一条动态开始)
从哪里获取这些参数来构造一个新的请求呢?
UK值的获取

在页面元素中搜索当前用户的uk值“hHNfE_FRm443SRWFXvs_HA”,发现包含在body的script标签中

image-20231102095207038

获取UK代码

headContainer = driver.find_element_by_xpath("//*[@id='app']/div/div[3]/div/div/div/div[2]/h2")
scriptContainer = driver.find_element_by_xpath("/html/body/script[2]")
scriptHTML = scriptContainer.get_attribute("innerHTML")
ukSet = set(s for s in scriptHTML.split("&") if s.startswith("uk"))
uk = ukSet.pop().split("=")[-1]
ctime值的获取

对于ctime的获取,就是请求响应中dynamic_ctime_raw的值

image-20231102095558897

3、用Selenium模拟地址栏输入访问请求

知道这些主要参数后,就可以构造新的请求,用Selenium模拟打开这个请求

# 模拟在地址栏输入URL
script = 'window.location.href = "https://mbd.baidu.com/webpage?tab=main&num=10&uk= 			         {}&ctime{}&type=newhome&action=dynamic&format=jsonp"'.format(uk, ctime)
driver.execute_script(script)

4、爬取结果

里面包含了动态的标题,点赞,评论,图片或视频链接

image-20231102103431018

源代码

import json
import timefrom selenium import webdriver# 创建一个浏览器实例
driver = webdriver.Chrome()
# 打开网站
driver.get("https://author.baidu.com/home/92")headContainer = driver.find_element_by_xpath("//*[@id='app']/div/div[3]/div/div/div/div[2]/h2")
scriptContainer = driver.find_element_by_xpath("/html/body/script[2]")
scriptHTML = scriptContainer.get_attribute("innerHTML")
ukSet = set(s for s in scriptHTML.split("&") if s.startswith("uk"))
uk = ukSet.pop().split("=")[-1]ctime = ""while 1:# 模拟在地址栏输入URLscript = 'window.location.href = "https://mbd.baidu.com/webpage?tab=main&num=10&uk={}&ctime={}&type=newhome&action=dynamic&format=jsonp"'.format(uk, ctime)driver.execute_script(script)jsonp_str = driver.find_element_by_xpath("/html/body/pre")jsonp_str = jsonp_str.text# 提取JSON数据start_index = jsonp_str.index('(') + 1end_index = jsonp_str.rindex(')')json_str = jsonp_str[start_index:end_index]# 将JSON字符串转换为Python对象data = json.loads(json_str)# 输出转换后的Python对象postList = data["data"]["list"]print("当前帖子数:", len(postList))if len(postList) == 0:print("爬取完毕!!!")breakfor postItem in postList:ctime = postItem["dynamic_ctime_raw"]itemData = postItem["itemData"]print(itemData)

这篇关于百家号个人账号爬虫的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/373464

相关文章

SpringSecurity显示用户账号已被锁定的原因及解决方案

《SpringSecurity显示用户账号已被锁定的原因及解决方案》SpringSecurity中用户账号被锁定问题源于UserDetails接口方法返回值错误,解决方案是修正isAccountNon... 目录SpringSecurity显示用户账号已被锁定的解决方案1.问题出现前的工作2.问题出现原因各

使用DeepSeek搭建个人知识库(在笔记本电脑上)

《使用DeepSeek搭建个人知识库(在笔记本电脑上)》本文介绍了如何在笔记本电脑上使用DeepSeek和开源工具搭建个人知识库,通过安装DeepSeek和RAGFlow,并使用CherryStudi... 目录部署环境软件清单安装DeepSeek安装Cherry Studio安装RAGFlow设置知识库总

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

oracle如何连接登陆SYS账号

《oracle如何连接登陆SYS账号》在Navicat12中连接Oracle11g的SYS用户时,如果设置了新密码但连接失败,可能是因为需要以SYSDBA或SYSOPER角色连接,解决方法是确保在连接... 目录oracle连接登陆NmOtMSYS账号工具问题解决SYS用户总结oracle连接登陆SYS账号

Python3 BeautifulSoup爬虫 POJ自动提交

POJ 提交代码采用Base64加密方式 import http.cookiejarimport loggingimport urllib.parseimport urllib.requestimport base64from bs4 import BeautifulSoupfrom submitcode import SubmitCodeclass SubmitPoj():de

HomeBank:开源免费的个人财务管理软件

在个人财务管理领域,找到一个既免费又开源的解决方案并非易事。HomeBank 正是这样一个项目,它不仅提供了强大的功能,还拥有一个活跃的社区,不断推动其发展和完善。 开源免费:HomeBank 是一个完全开源的项目,用户可以自由地使用、修改和分发。用户友好的界面:提供直观的图形用户界面,使得非技术用户也能轻松上手。数据导入支持:支持从 Quicken、Microsoft Money

分布式系统的个人理解小结

分布式系统:分的微小服务,以小而独立的业务为单位,形成子系统。 然后分布式系统中需要有统一的调用,形成大的聚合服务。 同时,微服务群,需要有交流(通讯,注册中心,同步,异步),有管理(监控,调度)。 对外服务,需要有控制的对外开发,安全网关。

Java IO 操作——个人理解

之前一直Java的IO操作一知半解。今天看到一个便文章觉得很有道理( 原文章),记录一下。 首先,理解Java的IO操作到底操作的什么内容,过程又是怎么样子。          数据来源的操作: 来源有文件,网络数据。使用File类和Sockets等。这里操作的是数据本身,1,0结构。    File file = new File("path");   字

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

LeetCode 第414场周赛个人题解

目录 Q1. 将日期转换为二进制表示 原题链接 思路分析 AC代码 Q2. 范围内整数的最大得分 原题链接 思路分析 AC代码 Q3. 到达数组末尾的最大得分 原题链接 思路分析 AC代码 Q4. 吃掉所有兵需要的最多移动次数 原题链接 思路分析 AC代码 Q1. 将日期转换为二进制表示 原题链接 Q1. 将日期转换为二进制表示 思路分析