当前位置: 首页 > news >正文

selenium 爬取今日头条

由于今日头条网页是动态渲染,再加上各种token再验证,因此直接通过API接口获取数据难度很大,本文使用selenium来实现新闻内容爬取。

selenium核心代码

知识点:

  • 代码中加了很多的异常处理,保证错误后重试,提高稳定性
  • EdgeChromiumDriverManager().install()自动下载浏览器驱动,避免浏览器更新后驱动版本不对的问题
  • 使用driver.refresh()driver.close()driver.quit()防止占用内存过多
  • 使用--disable-extensions禁用插件,避免插件可能带来的影响
  • 使用--inprivate打开无痕模式,这里遇到一个很烦的问题,用户登录同步问题,无痕模式可以避免
    在这里插入图片描述
from webdriver_manager.microsoft import EdgeChromiumDriverManagerdef get_html_by_selenium(url):print("开始:", url)options = webdriver.EdgeOptions()# 启用'禁用浏览器正在被自动化程序控制的提示'启动参数options.add_experimental_option("excludeSwitches", ["enable-automation"])# 禁用插件options.add_argument("--disable-extensions")# 无痕模式options.add_argument('--inprivate')count = 0driver = Nonewhile count < 10:try:driver = webdriver.Edge(service=Service(executable_path=EdgeChromiumDriverManager().install()),options=options)# 最小化driver.minimize_window()time.sleep(1)driver.get(url)breakexcept WebDriverException as e:print(e)count += 1time.sleep(3)continueexcept ConnectionError as e:print(e)count += 1time.sleep(3)continueif driver is None:returntime.sleep(10)try:html = driver.page_source# 防止内存泄露driver.refresh()try:driver.close()except WebDriverException:passdriver.quit()return htmlexcept NoSuchWindowException:return

新闻列表解析代码

URL示例:

https://www.toutiao.com/c/user/token/MS4wLjABAAAA6Ftyf-tftfbjp1u_TEz6kpY77ZlPaYRV0UsfXkF2UsM/?tab=article

这里比较简单,拿到了新闻标题和url,HTML解析过程中可能遇到浏览器中渲染的html结构和真实请求到的html结构不一样,要以真实拿到的html内容为准

url = f"https://www.toutiao.com/c/user/token/{USER_TOKEN}/?tab=article"
html = get_html_by_selenium(url)
soup = BeautifulSoup(html, "html.parser")for article in soup.find_all("div", attrs={"class": "profile-article-card-wrapper"}):a = article.find("a")news_title = a["title"]url = a["href"]content, news_time = parse_and_save_news(url)

新闻内容解析代码

相对比较简单,忽略了图片的解析,最终获得新闻的内容和新闻时间

def parse_and_save_news(url):html = get_html_by_selenium(url)if not html:returnsoup = BeautifulSoup(html, "html.parser")article_content = soup.find("div", attrs={"class": "article-content"})if article_content is None:returnarticle_meta = soup.find("div", attrs={"class": "article-meta"})time_string = article_meta.find("span", attrs=None).textnews_time = datetime.strptime(time_string, "%Y-%m-%d %H:%M")article = article_content.articlenew_soup = BeautifulSoup("<html><body></body></html>", "html.parser")body = new_soup.bodyfor p in article.find_all("p"):body.append(BeautifulSoup(f"<p>{p.text}</p>", "html.parser"))content = new_soup.prettify()return content, news_time

相关文章:

selenium 爬取今日头条

由于今日头条网页是动态渲染&#xff0c;再加上各种token再验证&#xff0c;因此直接通过API接口获取数据难度很大&#xff0c;本文使用selenium来实现新闻内容爬取。 selenium核心代码 知识点&#xff1a; 代码中加了很多的异常处理&#xff0c;保证错误后重试&#xff0c;…...

docker 安装 yapi

文章目录 docker 安装 yapi一、拉取镜像二、创建目录三、添加配置文件四、初始化数据库表五、启动 yapi六、测试以及修改默认密码 没有 MongDB 的可以先看这个教程&#xff1a;MongDB安装教程 docker 安装 yapi 版本&#xff1a; 1.9.5 一、拉取镜像 docker pull yapipro/y…...

【AI如何帮你编写测试用例并输出表格格式】

1、工具&#xff1a;顺便使用一款生成式AI即可&#xff0c;此处用的是ChatGPT&#xff0c;Kimi这两个工具试验。 2、首先要拿到需求文档&#xff0c;根据需求文档向AI发出如下指令&#xff08;Prompt&#xff09; “请根据下面这段需求&#xff0c;编写测试用例&#xff1a; …...

九宫格转圈圈抽奖活动,有加速,减速效果

在线访问demo和代码在底部 代码&#xff0c;复制就可以跑 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><tit…...

利用阿里OSS服务给文件设置过期删除--简单版

在云存储广泛应用的今天&#xff0c;阿里云的Object Storage Service&#xff08;OSS&#xff09;以其高度可扩展性、安全性和成本效益&#xff0c;成为了众多企业和开发者存储海量数据的首选方案。随着数据量的不断膨胀&#xff0c;高效的数据管理和成本控制变得尤为重要。其中…...

LabVIEW控制Trio控制器

将LabVIEW与Trio控制器结合&#xff0c;可以实现对复杂运动系统的控制和监测。以下是详细的方法和注意事项&#xff1a; 一、准备工作 软件安装&#xff1a; 安装LabVIEW开发环境&#xff0c;确保版本兼容性。 安装Trio控制器的相关驱动程序和软件&#xff0c;如Trio Motion …...

02--大数据Hadoop集群实战

前言&#xff1a; 前面整理了hadoop概念内容&#xff0c;写了一些概念和本地部署和伪分布式两种&#xff0c;比较偏向概念或实验&#xff0c;今天来整理一下在项目中实际使用的一些知识点。 1、基础概念 1.1、完全分布式 Hadoop是一个开源的分布式存储和计算框架&#xff0…...

【ARMv8/v9 异常模型入门及渐进 10 -- WFI 与 WFE 使用详细介绍 1】

请阅读【ARMv8/v9 ARM64 System Exception】 文章目录 WFI 与 WFE等待事件&#xff08;WFE&#xff09;发送事件&#xff08;SEV&#xff09;本地发送事件&#xff08;SEVL&#xff09;WFE 唤醒事件 WFE 使用场景举例与代码实现wfe睡眠函数sev 事件唤醒函数全局监视器和自旋锁 …...

@DateTimeFormat 和 @JsonFormat 的区别和使用方式

一. DateTimeFormat 详细用例 DateTimeFormat 是 Spring Framework 的一部分&#xff0c;它用于绑定 Web 请求中的字符串到 Java 的日期和时间类型。这种转换常常在 Spring MVC 控制器中处理 HTTP 请求参数或路径变量时使用。 使用场景: 将 HTTP 请求中的日期(也就是网络传输…...

C++—结构体

结构体&#xff08;struct&#xff09;&#xff0c;是一种用户自定义复合数据类型&#xff0c;可以包含不同类型的不同成员。 结构体的声明定义和使用的基本语法&#xff1a; // 声明结构体struct 结构体类型 { 成员1类型 成员1名称; ...成员N类型 成员N名称; };除声明…...

指针与引用

指针与引用 一&#xff1a;指针与引用场景二级目录三级目录 一&#xff1a;指针与引用场景 二级目录 三级目录...

使用 mysql-binlog-connector 监听处理 MySQLBinlog 文件

1. 需求概述 业务开发中经常需要根据一些数据变更实现相对应的操作。例如&#xff0c;一些用户注销自己的账户&#xff0c;系统可以给用户自动发短信确认&#xff0c;这时有两种解决方案&#xff0c;一种是耦合到业务系统中&#xff0c;当用户执行注销操作的时候&#xff0c;执…...

CF Div2 729 Plus and Multiply

原题链接&#xff1a;Problem - 1542B - Codeforces 题目大意&#xff1a;初始集合里面只有1&#xff0c;给a和b&#xff0c;可以对集合里面的数x进行二种操作&#xff0c;x*a&#xff0c;xb,并放入集合&#xff0c;给数n&#xff0c;问集合里面会不会产生n&#xff0c;会就输…...

Joomla 3.7.0 (CVE-2017-8917) SQL注入漏洞环境

1 漏洞概述 Joomla是一个基于PHP的内容管理系统&#xff08;CMS&#xff09;&#xff0c;广泛应用于各类网站。2017年&#xff0c;Joomla 3.7.0版本被发现存在SQL注入漏洞&#xff08;CVE-2017-8917&#xff09;&#xff0c;攻击者可以利用该漏洞对数据库进行未授权查询或操作…...

Python高克勒-曼宁-斯特里克勒公式计算一维流量

&#x1f4dc;曼宁公式-用例 &#x1f4dc;Python流体数据统计模型和浅水渗流平流模型模拟 | &#x1f4dc;Python蒸发散物理问题(微积分-线性代数-拉普拉斯和傅立叶变换) ✒️Python计算一维流量 高克勒-曼宁-斯特里克勒公式公式基于一维&#xff08;横截面平均&#xff09…...

【GD32系列--基本定时器Timer + 定时1ms 灯光间隔1s闪烁例程】

这里写目录标题 一、定时器的作用二、定时器简介1、定时器类型2、时钟树3、定时器功能配置框图 三、定时器寄存器分析1、控制寄存器&#xff08;TIMERx_CTL0)&#xff09;2、DMA 和中断使能寄存器 (TIMERx_DMAINTEN)3、预分频寄存器 (TIMERx_PSC)4、计数器自动重载寄存器 (TIME…...

第11章 集合与迭代器

目录 目录 目录 11.1 Collection集合 11.1.1 集合的概念 11.1.2 Collection接口 1、添加元素 2、删除元素 3、查询与获取元素 11.2 List 有序集合 11.2.1 新增方法 11.2.2 ArrayList 11.2.3 LinkedList 1、单向链表 2、双向链表 3、删除元素 11.3 Set 无序集合 …...

探索Linux中的神奇工具:探秘tail命令的妙用

探索Linux中的神奇工具&#xff1a;探秘tail命令的妙用 在Linux系统中&#xff0c;tail命令是一个强大的工具&#xff0c;用于查看文件的末尾内容。本文将详细介绍tail命令的基本用法和一些实用技巧&#xff0c;帮助读者更好地理解和运用这个命令。 了解tail命令 tail命令用…...

1688商品API接口:电商数据自动化的新引擎

1688作为中国领先的B2B电子商务平台&#xff0c;为广大商家和制造商提供了一个展示和交易商品的广阔市场。随着1688商品API接口的推出&#xff0c;开发者和商家现在能够通过编程方式自动化获取和管理商品数据&#xff0c;极大地提高了工作效率和数据处理的灵活性。 一、1688商…...

路由器不能端口映射什么原因?如何设置内网映射?

近期有小伙伴发来求助信息&#xff0c;他以前开游戏服务器和别人一起玩&#xff0c;那个时候端口映射还好&#xff0c;不知道哪一天开始突然不行了&#xff0c;已经是公网了&#xff0c;光猫是桥接的状态&#xff0c;连路由器都换了&#xff0c;就是不能端口映射开服务器&#…...

【Linux驱动开发】第11天:设备树(Device Tree)超详细全解:从诞生背景到工作原理

一、设备树的诞生背景&#xff1a;传统驱动的致命痛点 在设备树出现之前&#xff08;Linux 3.0之前&#xff09;&#xff0c;Linux内核采用硬编码的方式描述所有硬件信息。这意味着&#xff1a; 每一个开发板的寄存器地址、中断号、GPIO号&#xff0c;都直接写死在驱动代码里换…...

机器学习论文阅读的解码协议:从扫读到复现的四步实战法

1. 为什么读论文这件事&#xff0c;比写代码还容易让人焦虑“How to Read Machine Learning Papers Effectively”——这个标题乍看像是一篇方法论指南&#xff0c;但在我带过三十多个算法实习生、审过两百多份顶会投稿、自己连续七年保持每周精读2–3篇NeurIPS/ICML/ACL论文的…...

Unity角色移动手感优化:从WASD输入到物理移动的完整链路

1. 这不是“写个Input.GetAxis”就能跑通的移动逻辑在Unity项目里&#xff0c;只要角色需要被玩家操控&#xff0c;WASDQEShift这套组合键几乎就是默认配置——它不依赖鼠标、不强制视角绑定、兼容手柄映射&#xff0c;是PC端第三人称/第一人称角色最基础也最易被低估的交互层。…...

JMeter断言实战:从误配到分层校验的避坑指南

1. 为什么断言不是“加个检查框”就完事了&#xff1f;很多人第一次在 JMeter 里点开“添加 → 断言 → 响应断言”&#xff0c;填上“包含文本&#xff1a;success”&#xff0c;跑完看绿色小勾就以为接口测试闭环了。我带过三届测试团队&#xff0c;新同事交来的脚本里&#…...

【习题05】求n的阶乘

题目&#xff1a; 分别利用递归和非递归的方法求n的阶乘 1、题目分析 规定&#xff1a;0的阶乘为1。 非递归&#xff1a; 我们先列举几个求阶乘的案例&#xff0c;从中找寻规律。 0&#xff01; 11&#xff01; 12&#xff01; 1 * 23&#xff01; 1 * 2 * 3 从上述几个例子可…...

3步实现百度网盘高速下载:Python解析工具实战指南

3步实现百度网盘高速下载&#xff1a;Python解析工具实战指南 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse baidu-wangpan-parse是一款高效的Python工具&#xff0c;专门用于…...

雷达信号体制识别

雷达信号体制识别 摘要 本文档基于工程中的信号识别流水线入口脚本及其所依赖的核心模块&#xff0c;系统梳理该工程如何实现雷达脉冲信号的体制分类&#xff08;Signal Type Recognition&#xff09;。该流水线采用“脉冲检测 → 脉冲描述字提取 → 脉内特征分析 → 驻留段分段…...

探灵直播2026最新官方正版免费下载 一键转存 永久更新 (看到速转存 资源随时走丢)

下载链接 本文将为您客观介绍《探灵直播》的幕后作者、核心玩法机制&#xff0c;并将其与同类型竞品进行简单的横向对比&#xff0c;带您全面了解这款作品的独特之处。 一、 幕后作者&#xff1a;专注于美少女题材的 qureate 《探灵直播》的开发商 qureate 是一家在日本游戏界…...

XBOX360 KINECT体感游戏合集109个

实体机模拟器都可以用&#xff0c;模拟器游戏说明&#xff1a; 1&#xff0c;解压后把游戏文件夹放进模拟器Roms文件夹 2、模拟器运行文件为xenia_canary.exe。点击File—Open&#xff0c;找到游戏目录下的Roms文件夹&#xff0c;一直打开下级文件夹&#xff0c;直到看到以20位…...

毕业论文神器!高效论文写作全流程AI论文写作工具推荐(2026 最新)

论文写作全流程可拆解为文献调研→选题/开题→大纲/初稿→文献综述→降重/去AI味→润色/格式→查重/投稿七大环节&#xff0c;2026年AI论文写作工具按环节精准匹配&#xff0c;兼顾中文适配、降重能力、去AI痕迹、学术合规四大核心需求&#xff0c;覆盖免费/付费、通用/垂直场景…...