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

python优雅地爬虫

申明:仅用作学习用途,不提供任何的商业价值。

背景

我需要获得新闻,然后tts,在每天上班的路上可以听一下。具体的方案后期我也会做一次分享。先看我喜欢的万能的老路:获得html内容-> python的工具库解析,获得元素中的内容,完成。

好家伙,我知道我爬取失败了。一堆js代码,看得我烦。我一去看页面发现:原来新闻的获得是走的接口,然后js插入文档的,于是啃接口。

又被难住了!接口的pageCallback是什么,感觉我的经验,这个是复杂的js加密之后的,因为没有带这个参数,可以轻易的通过接口获得想要的数据。

假如没有这个参数,我其实可以为所欲为了。所以,分析pageCallback这个参数的加密非常耗时间了。也不打算研究,我决定换一种方式去研究。

拿出我的终极大招:Selenium。模拟用户的操作,该不会拦截我吧。

爬虫2.0

使用Selenium模拟用户爬取页面内容,并输出成文件。关于Selenium是什么,欢迎看这篇文章:selenium Python教程。在这里,我只讲我主要的实现。

首先作为一款工具脚本,我们应该不喜欢窗口界面吧,除非你需要动态的观察程序的操作。所以,我开启了无头浏览器模式。

# 无头浏览器
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
driver = webdriver.Chrome(options=chrome_options)

关键的driver拿到之后,剩下的过程就简单了。和一般的requestsspider爬虫一样,需要获得页面的代码,然后解析对应的元素,拿到属性或者文本。

# titles
title_elems = driver.find_elements(by=By.CLASS_NAME, value="item-title")
titles = [title_elem.text for title_elem in title_elems]

是不是很神奇,看到了By.CLASS_NAME,是不是一下子联想到了CSS了。是的,你的预感足够的正确。如果以上的内容带给你足够的震撼和惊奇,请继续往下看,

# 所有的更新时间
related_elems = driver.find_elements(by=By.CSS_SELECTOR, value="div.item-related > span.time")
relateds = [related_elem.text for related_elem in related_elems]
# 所有的描述信息
desc_elems = driver.find_elements(by=By.CSS_SELECTOR, value="div.item-desc > span")
# 需要去除新闻摘要结尾的()内容
descs = [desc_item.text[:desc_item.text.rfind('(')] for desc_item in desc_elems]

没错,"div.item-related > span.time"这个是什么选择起来着?后代选择器。nice,CSS的选择器它都支持。

来个小插曲:你知道的CSS选择器有哪些?

  • 元素选择器 p div
  • 类选择器 .highlight
  • ID选择器 #id
  • 属性选择器 [type='text']
  • 后代选择器 ul li
  • 子元素选择器 ul > li
  • 相邻兄弟选择器 h2+p
  • 通用选择器 *

不要觉得我是多余的了,其实这些选择器会了,基本上在页面的爬取上就是无敌了。另外,selenium还有这几种选择器:

class By:"""Set of supported locator strategies."""ID = "id"XPATH = "xpath"LINK_TEXT = "link text"PARTIAL_LINK_TEXT = "partial link text"NAME = "name"TAG_NAME = "tag name"CLASS_NAME = "class name"CSS_SELECTOR = "css selector"

常用的还是XPATH TAD_NAME CLASS_NAME CSS_SELECTOR 大家感兴趣的话可以自行的研究。

最后插一句话哈,作为后端的开发人员,我很希望我的接口、网站是可以正常访问的,给用户提供稳定的服务。但是,爬虫的话,对网站的危害很大的,特别是计算机的运行速度要比人快很多倍,相当于一下子加重了服务器的负担,类似于DOS攻击了。一旦爬虫劫持了流量,其它的用户就不能正常的访问了。

所以,在后端的接口设计上一般采取的是限流,但是也会降低用户的使用体验。所以,适当的学习学习就可以啦。也得守住法律的底线,话说:“python是包四餐的学科”。

相关文章:

python优雅地爬虫

申明:仅用作学习用途,不提供任何的商业价值。 背景 我需要获得新闻,然后tts,在每天上班的路上可以听一下。具体的方案后期我也会做一次分享。先看我喜欢的万能的老路:获得html内容-> python的工具库解析&#xff0…...

mysql8查看执行sql历史日志、慢sql历史日志,配置开启sql历史日志general_log、慢sql历史日志slow_query_log

0.本博客sql总结 -- 1.查看参数 -- 1.1.sql日志和慢sql日志输出方式(TABLE/FILE)。global参数 SHOW GLOBAL VARIABLES LIKE log_output; -- 1.2.sql日志开关。global参数 SHOW GLOBAL VARIABLES LIKE general_log%; -- 1.3.慢sql日志开关。global参数 SHOW GLOBAL VARIABLE…...

vscode关闭绑定元素“xxx”隐式具有“any”类型这类错误

在ts的项目里面,真的经常看到any类型的报错,真的很烦的 所以为了眼不见心不乱,我决定消除这个错误提示 在tsconfig.json里面配置 "noImplicitAny": false 就可以了 {"compilerOptions": {"target": "E…...

View绘制流程-Window创建

前言: View绘制流程中,主要流程是这样的: 1.用户进入页面,首先创建和绑定Window; 2.首次创建以及后续vsync信号来临时,会请求执行刷新流程; 3.刷新流程完成后,会通知SurfaceFlin…...

Jenkins build包时虽然单元测试失败了,但是仍然可以成功build包(最终结束时build success)

1.尝试方案1: 尽管单元测试失败,Jenkins Maven仍然可以获得成功-Java 学习之路 将 -Dmaven.test.failure.ignorefalse 添加到 MAVEN_OPTS artifactoryMaven {goals "-U clean install -Dmaven.test.skipfalse -DallowSnapshotstrue -Dmaven.te…...

【vue3】基础知识点-setup语法糖

学习vue3&#xff0c;都会从基础知识点学起。了解setup函数&#xff0c;ref&#xff0c;recative&#xff0c;watch、comptued、pinia等如何使用 今天说vue3组合式api&#xff0c;setup函数 在学习过程中一开始接触到的是这样的&#xff0c;定义数据且都要通过return返回 <…...

idol!! 2023牛客暑期多校训练营6 C

登录—专业IT笔试面试备考平台_牛客网 题目大意&#xff1a;定义n!!等于与n的奇偶性相同的所有小于等于n的数的阶乘之和&#xff0c;问n!!的末尾有多少0 1<n<1e18 思路&#xff1a;因为末尾0的来源是2*5&#xff0c;而2的个数明显比5的个数多得多&#xff0c;所以末尾…...

深入理解Jdk5引入的Java泛型:类型安全与灵活性并存

深入理解Jdk5引入的Java泛型&#xff1a;类型安全与灵活性并存 ​ 在Java的中&#xff0c;有一个强大的工具&#xff0c;它可以让你在编写代码时既保持类型安全&#xff0c;又享受灵活性。**这个工具就是——泛型&#xff08;Generics&#xff09;。**本文将引导你深入了解Java…...

idea在控制台中输出文字显示乱码

VM options中加入下面这行 -Dfile.encodingutf-8...

hacksudo3 通关详解

环境配置 一开始桥接错网卡了 搞了半天 改回来就行了 信息收集 漏洞发现 扫个目录 大概看了一眼没什么有用的信息 然后对着login.php跑了一下弱口令 sqlmap 都没跑出来 那么利用点应该不在这 考虑到之前有过dirsearch字典太小扫不到东西的经历 换个gobuster扫一下 先看看g…...

CentOS 虚拟机磁盘扩容(非常实用)

新手村的选手在刚开始安装使用 CentOS 虚拟机时&#xff0c;很多选项都会按照推荐操作来&#xff0c;比如&#xff1a;磁盘推荐大小为 20 GB&#xff1b;但随着后面的使用&#xff0c;总会因为“磁盘根目录不足”原因&#xff0c;而导致软件无法安装、虚拟机无法正常运行等&…...

docker案例复现

$uri导致的CRLF注入漏洞 前期准备dockerdocker compose 漏洞配置 前期准备 docker 要完成这样的测试&#xff0c;需要我们有一定的环境&#xff0c;也就是需要大家去安装docker 更新系统软件包&#xff1a; sudo yum update 安装 Docker 的依赖软件包&#xff1a; sudo yum …...

淘宝资源采集(从零开始学习淘宝数据爬取)

1. 为什么要进行淘宝数据爬取&#xff1f; 淘宝数据爬取是指通过自动化程序从淘宝网站上获取数据的过程。这些数据可以包括商品信息、销售数据、评论等等。淘宝数据爬取可以帮助您了解市场趋势、优化您的产品选择以及提高销售额。 淘宝作为全球的电商平台&#xff0c;每天都有…...

【C语言】预处理详解

本文目录 1 预定义符号 2 #define 2.1 #define 定义标识符 2.2 #define 定义宏 2.3 #define 替换规则 2.4 #和## 2.5 带副作用的宏参数 2.6 宏和函数对比 2.7 命名约定 3 #undef 4 命令行定义 5 条件编译 6 文件包含 6.1 头文件被包含的方式 6.2 嵌套文件包含 1 预定义符号 __…...

2023中国(合肥)场景创新峰会成功举办,全息网御被纳入《合肥市第二批场景能力清单》

场景作为重要的城市资源&#xff0c;在驱动科技创新、产业发展、城市治理方面发挥着重要作用。近年来&#xff0c;为促进数字技术与实体经济深度融合&#xff0c;加速前沿科技转化落地、吸引全球创新资源集聚&#xff0c;合肥市聚焦“双找”&#xff1a;为产品找场景&#xff0…...

QT QLCDNumber 使用详解

本文详细的介绍了QLCDNumber控件的各种操作&#xff0c;例如&#xff1a;新建界面、源文件、设置显示位数、设置进制、设置外观、设置小数点、设置溢出、显示事件、其它文章等等操作。 实际开发中&#xff0c;一个界面上可能包含十几个控件&#xff0c;手动调整它们的位置既费时…...

明年,HarmonyOS不再兼容Android应用!

2023年华为开发者大会&#xff0c;不知道各位老铁们是否观看了&#xff0c;一个震撼的消息就是&#xff0c;首次公开了HarmonyOS NEXT的概念&#xff0c;简而言之就是&#xff0c;这是一款专为开发者打造的预览版操作系统&#xff0c;旨在提供"纯正鸿蒙操作系统"的体…...

华为OD机试 - 人气最高的店铺(Java JS Python)

题目描述 某购物城有m个商铺,现决定举办一场活动选出人气最高店铺。 活动共有n位市民参与,每位市民只能投一票,但1号店铺如果给该市民发放 q 元的购物补贴,该市民会改为投1号店铺。 请计算1号店铺需要最少发放多少元购物补贴才能成为人气最高店铺(即获得的票数要大于其…...

mysql sql 语句sum求和嵌套数学表达式

今天有个需求, 已减高度 高度 x 单双开(单开1 双开2) x 2,要直接写在sql语句中。 表字段 包含 高度 和 单双开字段 值是字符串 (双开 左单开 右单开) -- 已减高度 2 * 单双开 * 高度 sum( -- 求和 表达式 已减高度 2 * 单双开 * 高度 t_cloth.hegiht * 2 * (case WHEN l…...

Java课题笔记~ Servlet编程

1.Servlet编程基础 (1)什么是Servlet Servlet是基于Java语言的Web编程技术&#xff0c;部署在服务器端的Web容器里&#xff0c;获取客户端的访问请求&#xff0c;并根据请求生成响应信息返回给客户端。 创建Servlet的方式&#xff0c;有 如下图&#xff1a;一般创建Servlet都…...

杰理之播放暂停的杂音【篇】

a2dp PLC...

springboot基于深度学习的图书推荐系统_ry1n8702_c006

前言 随着互联网的普及和电子商务的发展&#xff0c;线上图书销售平台越来越多&#xff0c;用户在选择图书时面临海量数据的选择困难。传统的图书推荐方式&#xff0c;如书店的畅销书榜单、图书馆的分类推荐等&#xff0c;已经难以满足用户个性化、精准化的阅读需求。因此&…...

SwartNinjaPIR:嵌入式高可靠PIR运动检测驱动库

1. SwartNinjaPIR 库概述&#xff1a;面向嵌入式系统的高可靠性 PIR 运动检测驱动设计SwartNinjaPIR 是一个专为 Arduino 及兼容平台&#xff08;如 STM32、ESP32 等基于 Arduino Core 的 MCU&#xff09;设计的轻量级、生产就绪型被动红外&#xff08;Passive Infrared, PIR&a…...

从一次RDP爆破到全网挖矿:复盘Windows Server 3389端口的安全加固与监控策略

Windows Server 3389端口安全防御体系&#xff1a;从RDP爆破到挖矿攻击的全链路防护 最近处理了一起典型的服务器入侵事件&#xff1a;攻击者通过RDP暴力破解获取管理员权限后&#xff0c;在服务器上部署了挖矿程序。这种攻击模式看似简单&#xff0c;却暴露出许多企业在Windo…...

新手福音:通过快马生成图文并茂的ccswitch安装教程代码,轻松上手

最近在折腾一个叫ccswitch的工具&#xff0c;作为刚入门的新手&#xff0c;真的被各种环境配置搞得头大。好在发现了InsCode(快马)平台&#xff0c;它能直接生成带详细注释的安装教程代码&#xff0c;简直是救命稻草&#xff01;今天就把这个图文并茂的教程项目分享给大家。 c…...

C++ 模板元编程在性能优化中的作用

C 模板元编程在性能优化中的作用 在现代C开发中&#xff0c;性能优化始终是开发者关注的核心问题之一。而模板元编程&#xff08;Template Metaprogramming, TMP&#xff09;作为一种编译期计算技术&#xff0c;能够在程序运行前完成复杂的逻辑处理&#xff0c;从而显著提升运…...

功率半导体技术:GaN与SiC的性能对比与应用指南

1. 功率半导体技术演进背景在电力电子领域&#xff0c;功率半导体器件的发展经历了从硅(Si)到第三代半导体材料的重大跨越。作为工程师&#xff0c;我们正站在技术革新的关键节点&#xff1a;氮化镓(GaN)和碳化硅(SiC)这两种宽禁带半导体材料正在重塑功率转换的格局。传统硅基功…...

SEO_网站SEO排名下降的五大原因及应对技巧

SEO:网站SEO排名下降的五大原因及应对技巧 在数字营销的世界里&#xff0c;网站的SEO排名对于吸引流量和提升业务是至关重要的。随着搜索引擎算法的不断更新&#xff0c;很多网站会经历SEO排名下降的困境。本文将详细探讨网站SEO排名下降的五大原因&#xff0c;并提供相应的应…...

AD7193高精度ADC驱动设计与嵌入式集成实践

1. PRDC_AD7193 库概述&#xff1a;面向高精度测量的 AD7193 嵌入式驱动设计与工程实践AD7193 是 Analog Devices&#xff08;ADI&#xff09;推出的一款专为高精度、低噪声测量场景优化的 Σ-Δ 型 24 位模数转换器&#xff08;ADC&#xff09;。其核心特性包括&#xff1a;集…...

阿里通义实验室FunAudioLLM实战:如何用SenseVoice快速搭建多语言语音识别系统(附代码)

基于SenseVoice构建多语言语音识别系统的工程实践指南 语音识别技术正在重塑人机交互的边界&#xff0c;而阿里通义实验室开源的FunAudioLLM项目中的SenseVoice模型&#xff0c;为开发者提供了一把打开多语言语音世界的钥匙。不同于传统ASR系统需要针对不同语言单独训练模型的繁…...