百家号个人账号爬虫

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

相关文章

智能客服到个人助理,国内AI大模型如何改变我们的生活?

引言 随着人工智能(AI)技术的高速发展,AI大模型越来越多地出现在我们的日常生活和工作中。国内的AI大模型在过去几年里取得了显著的进展,不少独创的技术点和实际应用令人瞩目。 那么,国内的AI大模型有哪些独创的技术点?它们在实际应用中又有哪些出色表现呢?此外,普通人又该如何利用这些大模型提升工作和生活的质量和效率呢?本文将为你一一解析。 一、国内AI大模型的独创技术点 多模态学习 多

Python爬虫-贝壳新房

前言 本文是该专栏的第32篇,后面会持续分享python爬虫干货知识,记得关注。 本文以某房网为例,如下图所示,采集对应城市的新房房源数据。具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。接下来,跟着笔者直接往下看正文详细内容。(附带完整代码) 正文 地址:aHR0cHM6Ly93aC5mYW5nLmtlLmNvbS9sb3VwYW4v 目标:采集对应城市的

六西格玛培训公司:解锁成功之门,让企业与个人共赴“嗨”途

在竞争激烈的21世纪,六西格玛培训公司手握一把神奇的钥匙,帮助企业及个人轻松开启成功的大门。 对企业来说: 产品质量飞跃:不再是偶尔的精品,而是每个产品都如同精雕细琢的艺术品,吸引无数顾客争相购买。 工作流程优化:六西格玛培训如同精准的剪刀,剪去冗余,让工作流程更加顺畅高效。 客户满意度飙升:深谙客户需求的六西格玛,帮助企业精准把握市场脉搏,让每位客户都感受到宾至如归的满意。 战略转型游刃有

写一个坏越的个人天地(二)

小红书上搜了下博客,感觉好像没有让自己喜欢的。昨天刚好学了点grid布局,来试试 菜单栏直接使用el-menu 下边布局就用grid局部了,这块初步想法是轮播+你的天气和我的天气+自我介绍 天气的话,这边要先找一下有没有天气的api 我这边百度搜了个聚合的api,一天可以免费调用50次,应该是够了吧~要用代理,不然会报cors import axios from 'axios

个人博客文章目录索引(持续更新中...)

文章目录 一、Java基础二、Java相关三、MySql基础四、Mybatis基础及源码五、MybatisPlus基础六、Spring基础及源码七、Tomcat源码八、SpringMVC基础及源码   随着文章数量多起来,每次着急翻找半天,而是新申请的域名下来了,决定整理下最近几年的文章目录索引。(红色标记为常检索文章) 一、Java基础 1、Java基础(一):语言概述2、J

爬虫阶段思考

内容:写这篇文章是因为最近帮同学改了很多的爬虫代码,感触良多。 我用豆瓣为例,并不是不会用别的,而是这个我个人感觉最经典。然后还会写我遇到的一些问题以及解决方法。 首先,我们得先知道怎样爬取。我用的scrapy框架爬取。 我对此图的理解就是: 从spiders中获得一个请求(REQUEST),通过引擎传递给调度器,之后再返回给引擎,引擎把url封装好后传递给下载器,下载器将资源下载好后

6月21日训练 (东北林业大学)(个人题解)

前言:   这次训练是大一大二一起参加的训练,总体来说难度是有的,我和队友在比赛时间内就写出了四道题,之后陆陆续续又补了了三道题,还有一道题看了学长题解后感觉有点超出我的能力范围了,就留给以后的自己吧。话不多说,上正文。 正文:   Problem:A 幸运数字: #include <bits/stdc++.h>using namespace std;int sum,ans;in

mysql 如何分配root账号创建数据库的权限

1.mysql 如何分配root账号创建数据库的权限 在 MySQL 中,root 用户通常具有所有的权限,包括创建数据库的权限。但是,如果我们想要为另一个用户分配创建数据库的权限,或者想要限制 root 用户对某个特定数据库或服务器的权限(尽管这在实际操作中并不常见,因为 root 用户通常应该是无限制的),我们需要按照以下步骤进行操作。 这里我将解释如何为一个新的 MySQL 用户分配创建

从零开始搭建一个酷炫的个人博客

效果图 一、搭建网站 git和hexo准备 注册GitHub本地安装Git绑定GitHub并提交文件安装npm和hexo,并绑定github上的仓库注意:上述教程都是Windows系统,Mac系统会更简单! 域名准备 购买域名,买的是腾讯云域名,购买完成之后的域名管理解析域名域名备案 二、优化网站 使用的Fluid主题,Hexo Fluid 用户手册 增加图床,图片可以放在g

简单的php爬虫程序

<?php /** * 爬虫程序 -- 原型 * * BookMoth 2009-02-21 */ /** * 从给定的url获取html内容 * * @param string $url * @return string */ function _getUrlContent($url){ $handle = fopen($url, "r"); if($handle){ $content =