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

【python】使用Selenium和Chrome WebDriver来获取 【腾讯云 Cloud Studio 实战训练营】中的文章信息

文章目录

  • 前言
  • 导入依赖库
  • 设置ChromeDriver的路径
  • 创建Chrome WebDriver对象
  • 打开网页
  • 找到结果元素
  • 创建一个空列表用于存储数据
  • 遍历结果元素并提取数据
  • 提取标题、作者、发布时间等信息
  • 判断是否为目标文章
  • 提取目标文章的描述、阅读数量、点赞数量、评论数量等信息
  • 将提取的数据存储为字典格式
  • 将字典添加到数据列表中
  • 保存数据为JSON文件
  • 关闭WebDriver
  • 完整代码
    • 运行效果
  • 结束语

在这里插入图片描述

前言

本文介绍了如何使用Selenium和Chrome WebDriver来获取 【腾讯云 Cloud Studio 实战训练营】中的文章信息。在这篇文章中,我们首先导入了需要使用的依赖库,然后设置了ChromeDriver的路径,并创建了Chrome WebDriver对象。接着,我们使用WebDriver打开了指定的网页,并等待页面加载完成。随后,通过定位元素的方式找到了搜索结果列表的父元素,并提取了每个搜索结果的标题、作者、发布时间等信息。最后,我们将提取到的数据存储为JSON文件,并关闭了WebDriver。

导入依赖库

在这里插入图片描述

from selenium import webdriver
import json
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
import time

这段代码导入了需要使用的依赖库,包括seleniumjson,以及一些常用模块。

设置ChromeDriver的路径

在这里插入图片描述

driver_path = ''

在这里,driver_path变量存储了ChromeDriver的路径,需要根据实际情况进行设置。

创建Chrome WebDriver对象

driver = webdriver.Chrome(driver_path)

通过webdriver.Chrome()方法创建了一个Chrome WebDriver对象,并将其赋值给变量driver

打开网页

在这里插入图片描述

url = 'https://so.csdn.net/so/search?spm=1001.2100.3001.7499&q=%E8%85%BE%E8%AE%AF%E4%BA%91%20Cloud%20Studio%20%E5%AE%9E%E6%88%98%E8%AE%AD%E7%BB%83%E8%90%A5&t=blog&u=&utm_medium=distribute.pc_search_hot_word.none-task-hot_word-alirecmd-1-%E8%85%BE%E8%AE%AF%E4%BA%91%20Cloud%20Studio%20%E5%AE%9E%E6%88%98%E8%AE%AD%E7%BB%83%E8%90%A5-null-null.172%5Ev8%5Etag_flag&depth_1-utm_source=distribute.pc_search_hot_word.none-task-hot_word-alirecmd-1-%E8%85%BE%E8%AE%AF%E4%BA%91%20Cloud%20Studio%20%E5%AE%9E%E6%88%98%E8%AE%AD%E7%BB%83%E8%90%A5-null-null.172%5Ev8%5Etag_flag'
driver.get(url)
time.sleep(5)

使用driver.get()方法打开了指定的网页。这里的URL是搜索某个关键词的CSDN博客链接。然后通过time.sleep()方法等待页面加载完成。

找到结果元素

results = driver.find_element(By.CLASS_NAME, "so-result-list").find_elements(By.CLASS_NAME, "list-item")

使用driver.find_element()方法找到了搜索结果列表的父元素,再通过find_elements()方法找到所有的搜索结果元素,并将其赋值给变量results

创建一个空列表用于存储数据

data = []

创建一个空列表data,用于存储提取出的数据。

遍历结果元素并提取数据

for result in results:...

遍历结果元素列表results,对每一个结果元素进行数据提取。

提取标题、作者、发布时间等信息

    title = result.find_element(By.CLASS_NAME, "title").find_element(By.TAG_NAME, 'a').textauthor = result.find_element(By.CLASS_NAME, "item-ft").find_element(By.CLASS_NAME, 'name-text').textpushTime = result.find_element(By.CLASS_NAME, "item-ft").find_element(By.CLASS_NAME, 'time').text

通过find_element()方法找到标题、作者和发布时间等元素,并使用.text属性获取对应的文本内容。

判断是否为目标文章

    if "实战训练营】" in title:...else:print(f'不是目标文章, 当前文章标题是:{title}')

通过判断标题中是否包含关键字"实战训练营】"来确定是否为目标文章。如果是目标文章,则进行下一步的数据提取;否则打印当前文章的标题。

提取目标文章的描述、阅读数量、点赞数量、评论数量等信息

        description = result.find_element(By.CLASS_NAME, "item-bd__cont").find_element(By.CLASS_NAME, "row2").texttry:read = result.find_element(By.CLASS_NAME, "item-bd__cont").find_element(By.CLASS_NAME,"item-ft").find_element(By.CLASS_NAME, "btm-view").find_element(By.CLASS_NAME, "num").textexcept NoSuchElementException:read = 0try:zan = result.find_element(By.CLASS_NAME, "item-bd__cont").find_element(By.CLASS_NAME,"item-ft").find_element(By.CLASS_NAME, "btm-dig").find_element(By.CLASS_NAME, "num").textexcept NoSuchElementException:zan = 0try:comment = result.find_element(By.CLASS_NAME, "item-bd__cont").find_element(By.CLASS_NAME,"item-ft").find_element(By.CLASS_NAME, "btm-comment").find_element(By.CLASS_NAME, "num").textexcept NoSuchElementException:comment = 0

使用find_element()方法逐层查找目标文章的描述、阅读数量、点赞数量、评论数量等元素,并通过.text属性获取对应的文本内容。如果某个元素不存在,则将对应的变量赋值为0。

将提取的数据存储为字典格式

        item = {'title': title,  # 标题'description': description, # 描述'read': read,  # 阅读数量'zan': zan,  # 点赞数量'comment': comment,  # 评论数量'author': author, # 作者'pushTime': pushTime # 发布时间}

将提取到的标题、描述、阅读数量等信息存储为一个字典item

将字典添加到数据列表中

        data.append(item)

将提取到的字典item添加到数据列表data中。

保存数据为JSON文件

with open('data.json', 'w', encoding='utf-8') as f:json.dump(data, f, ensure_ascii=False, indent=4)

使用json.dump()方法将数据列表data以JSON格式保存到文件"data.json"中。

关闭WebDriver

driver.quit()

关闭Chrome WebDriver。

完整代码

from selenium import webdriver
import json
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
import time# 设置ChromeDriver的路径
driver_path = ''# 创建Chrome WebDriver对象
driver = webdriver.Chrome(driver_path)# 打开网页
url = 'https://so.csdn.net/so/search?spm=1001.2100.3001.7499&q=%E8%85%BE%E8%AE%AF%E4%BA%91%20Cloud%20Studio%20%E5%AE%9E%E6%88%98%E8%AE%AD%E7%BB%83%E8%90%A5&t=blog&u=&utm_medium=distribute.pc_search_hot_word.none-task-hot_word-alirecmd-1-%E8%85%BE%E8%AE%AF%E4%BA%91%20Cloud%20Studio%20%E5%AE%9E%E6%88%98%E8%AE%AD%E7%BB%83%E8%90%A5-null-null.172%5Ev8%5Etag_flag&depth_1-utm_source=distribute.pc_search_hot_word.none-task-hot_word-alirecmd-1-%E8%85%BE%E8%AE%AF%E4%BA%91%20Cloud%20Studio%20%E5%AE%9E%E6%88%98%E8%AE%AD%E7%BB%83%E8%90%A5-null-null.172%5Ev8%5Etag_flag'
driver.get(url)
time.sleep(5)# 找到结果元素
results = driver.find_element(By.CLASS_NAME, "so-result-list").find_elements(By.CLASS_NAME, "list-item")# 创建一个空列表用于存储数据
data = []# 遍历结果元素并提取数据
for result in results:time.sleep(5)title = result.find_element(By.CLASS_NAME, "title").find_element(By.TAG_NAME, 'a').textauthor = result.find_element(By.CLASS_NAME, "item-ft").find_element(By.CLASS_NAME, 'name-text').textpushTime = result.find_element(By.CLASS_NAME, "item-ft").find_element(By.CLASS_NAME, 'time').textif "实战训练营】" in title:description = result.find_element(By.CLASS_NAME, "item-bd__cont").find_element(By.CLASS_NAME, "row2").text# readEle = result.find_element(By.CLASS_NAME, "item-bd__cont").find_element(By.CLASS_NAME, "item-ft").find_element(#     By.CLASS_NAME, "btm-view")# zanEle = result.find_element(By.CLASS_NAME, "item-bd__cont").find_element(By.CLASS_NAME, "item-ft").find_element(#     By.CLASS_NAME, "btm-dig")# print(zanEle)# commentEle = result.find_element(By.CLASS_NAME, "item-bd__cont").find_element(By.CLASS_NAME,#                                                                            "item-ft").find_element(#     By.CLASS_NAME, "btm-comment")try:read = result.find_element(By.CLASS_NAME, "item-bd__cont").find_element(By.CLASS_NAME,"item-ft").find_element(By.CLASS_NAME, "btm-view").find_element(By.CLASS_NAME, "num").text# read = result.find_element(By.CLASS_NAME, "item-bd__cont").find_element(By.CLASS_NAME,#                                                                         "item-ft").find_element(#     By.CLASS_NAME, "btm-view").find_element(By.CLASS_NAME, "num").textexcept NoSuchElementException:read = 0try:zan = result.find_element(By.CLASS_NAME, "item-bd__cont").find_element(By.CLASS_NAME,"item-ft").find_element(By.CLASS_NAME, "btm-dig").find_element(By.CLASS_NAME, "num").textexcept NoSuchElementException:zan = 0try:comment = result.find_element(By.CLASS_NAME, "item-bd__cont").find_element(By.CLASS_NAME,"item-ft").find_element(By.CLASS_NAME, "btm-comment").find_element(By.CLASS_NAME, "num").textexcept NoSuchElementException:comment = 0# read = result.find_element(By.CLASS_NAME, "item-bd__cont").find_element(By.CLASS_NAME, "item-ft").find_element(By.CLASS_NAME, "btm-view").find_element(By.CLASS_NAME, "num").text# zan = result.find_element(By.CLASS_NAME, "item-bd__cont").find_element(By.CLASS_NAME, "item-ft").find_element(By.CLASS_NAME, "btm-dig").find_element(By.CLASS_NAME, "num").text# comment = result.find_element(By.CLASS_NAME,"item-bd__cont").find_element(By.CLASS_NAME, "item-ft").find_element(By.CLASS_NAME, "btm-comment").find_element(By.CLASS_NAME, "num").textidx = result.get_attribute('i')# 将提取的数据存储为字典格式item = {'title': title,  # 标题'description': description, # 描述'read': read,  # 阅读数量'zan': zan,  # 点赞数量'comment': comment,  # 评论数量'author': author, # 作者'pushTime': pushTime # 发布时间}print(idx)# 将字典添加到数据列表中data.append(item)else:print(f'不是目标文章, 当前文章标题是:{title}')# 保存数据为JSON文件with open('data.json', 'w', encoding='utf-8') as f:json.dump(data, f, ensure_ascii=False, indent=4)# 关闭WebDriver
driver.quit()

运行效果

运行的数据会保存到json 中
在这里插入图片描述

结束语

通过本文的介绍,我们学习了如何使用Selenium和Chrome WebDriver进行网页数据爬取,掌握了定位元素、提取信息和数据存储的相关技巧。这些技术对于获取网页上的数据非常有用,可以帮助我们实现自动化的数据采集和处理。希望本文对您有所帮助!如果您对网页数据爬取和数据处理有更多兴趣和需求,可以继续深入学习和探索相关内容。祝您在数据领域取得更多的成果!

相关文章:

【python】使用Selenium和Chrome WebDriver来获取 【腾讯云 Cloud Studio 实战训练营】中的文章信息

文章目录 前言导入依赖库设置ChromeDriver的路径创建Chrome WebDriver对象打开网页找到结果元素创建一个空列表用于存储数据遍历结果元素并提取数据提取标题、作者、发布时间等信息判断是否为目标文章提取目标文章的描述、阅读数量、点赞数量、评论数量等信息将提取的数据存储为…...

使用Feign 的远程调用,把mysql数据导入es

要把数据库数据导入到elasticsearch中,包括下面几步: 1)将商品微服务中的分页查询商品接口定义为一个FeignClient,放到feign-api模块中 2)搜索服务编写一个测试业务,实现下面功能: 调用item-ser…...

Java课题笔记~ MyBatis接口开发(代理开发)

使用XML文件进行开发,在调用SqlSession进行操作时,需要指定MyBatis映射文件中的方法,这种调用方式过于烦琐。为解决此问题,MyBatis提供了接口开发的方式。 接口开发的目的: 解决原生方式中的硬编码 简化后期执行SQL …...

从数学到深度学习的学习资料及教程合集

诸神缄默不语-个人CSDN博文目录 目前仅收集免费内容,最多需要买本纸质书。 付费的如果有免费版本我也会收录。 链接如失效请联系我。 这个笔记主要是为我自己准备的,算是一个可公开的to do list(其实做不完的我也知道)&#xff…...

nn.CrossEntropyLoss()报错

RuntimeError: “nll_loss_forward_reduce_cuda_kernel_2d_index” not implemented for ‘Float’ Traceback (most recent call last): File "<string>", line 1, in <module> File "/home/zz/anaconda3/envs/torch1.11/lib/python3.7/site-pack…...

【BASH】回顾与知识点梳理(一)

【BASH】回顾与知识点梳理 一 前言一. 认识与学习 BASH1.1 硬件、核心与 Shell1.2 为何要学文字接口的 shell&#xff1f;1.3 系统的合法 shell 与 /etc/shells 功能1.4 Bash shell 的功能1.5 查询指令是否为 Bash shell 的内建命令&#xff1a; type1.6 指令的下达与快速编辑按…...

AWS Amplify 部署node版本18报错修复

Amplify env&#xff1a;Amazon Linux:2 Build Error : Specified Node 18 but GLIBC_2.27 or GLIBC_2.28 not found on build 一、原因 报错原因是因为默认情况下&#xff0c;AWS Amplify 使用 Amazon Linux:2 作为其构建镜像&#xff0c;并自带 GLIBC 2.26。不过&#xff0c;…...

K8S添加yum源并安装kubectl/kubeadm/kubelet组件

1.安装kubectl/kubeadm/kubelet ##添加yum 源 cat > /etc/yum.repos.d/kubernetes.repo << EOF [kubernetes] nameKubernetes baseurlhttps://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled1 gpgcheck0 repo_gpgcheck0 gpgkeyhttps://mirr…...

kafka生产者指定ip

kafka生产者指定ip 最近工作中遇到一个问题&#xff0c;记录一下&#xff0c;需求中要求往kafka上推送信息。本来是个很简单的需求&#xff0c;但是踩了一个坑。 ​ 我通过spring boot集成了kafka写了一个生产者&#xff0c;客户那边给我三个节点的ip&#xff0c;然后我也没多想…...

python 封装sql 增删改查连接MySQL

select * from Teacher limit 10 连接字符串配置MysqlConfig.py class MysqlConfig:HOST 192.168.56.210PORT 3306USER rootPASSWORD 1qaz0987654321DBStudentDBCHARSET utf8封装增删改查MysqlConnection.py Author: tkhywang 2810248865qq.com Date: 2023-06-19 15:44:48 Las…...

Flink正常消费一段时间后,大量反压,看着像卡住了,但又没有报错。

文章目录 前言一、原因分析二、解决方案 前言 前面我也有提到&#xff0c;发现flink运行一段时间后&#xff0c;不再继续消费的问题。这个问题困扰了我非常久&#xff0c;一开始也很迷茫。又因为比较忙&#xff0c;所以一直没有时间能够去寻找答案&#xff0c;只是通过每天重启…...

软件测试需求分析的常用方法

软件测试需求分析时&#xff0c;应要求产品人员对需求进行讲解&#xff0c;并使用相对应的方法进行科学分析&#xff0c;否则无法保障软件测试的完整性和科学性&#xff0c;从而造成在项目中后期Bug频出、风险增大等问题。 而常用的测试需求分析的方法&#xff1a; 1、功能分解…...

数据结构10 -查找_树表查找

创建二叉搜索树 二叉搜索树 二叉搜索树是有数值的了&#xff0c;二叉搜索树是一个有序树。 若它的左子树不空&#xff0c;则左子树上所有结点的值均小于它的根结点的值&#xff1b; 若它的右子树不空&#xff0c;则右子树上所有结点的值均大于它的根结点的值&#xff1b; 它…...

第126天:内网安全-隧道技术SSHDNSICMPSMB上线通讯LinuxMac

知识点 #知识点&#xff1a; 1、入站规则不出网上线方案 2、出站规则不出网上线方案 3、隧道技术-SMB&ICMP&DNS&SSH 4、控制上线-Linux&Mac&IOS&Android-连接方向&#xff1a;正向&反向&#xff08;基础课程有讲过&#xff09; -内网穿透&#xf…...

开发一个饲料商城小程序需要多少钱

随着宠物行业的蓬勃发展&#xff0c;饲料商城小程序作为一个重要的销售渠道&#xff0c;吸引了越来越多的投资者。那么&#xff0c;开发一套饲料商城小程序需要多少钱呢&#xff1f;本文将为您详细解答。 首先&#xff0c;开发一套饲料商城小程序的价格受到多个因素的影响&…...

Emacs之set-face-attribute与font-lock-add-keywords用法区别(一百二十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…...

JavaScript高阶函数和闭包

在JavaScript编程中&#xff0c;高阶函数和闭包是两个重要而又常见的概念。它们是函数式编程的重要组成部分&#xff0c;可以让我们的代码更加灵活、简洁和高效。本文将详细解释高阶函数和闭包的概念、用法以及它们在JavaScript中的重要性。 高阶函数 1. 什么是高阶函数&…...

私有化部署企业IM即时通讯:提升效率、防止泄密、高效协同办公

随着科技的飞速发展和智能手机的普及&#xff0c;即时通讯&#xff08;IM&#xff09;应用在我们的生活和工作中变得越来越重要。在企业中&#xff0c;IM已成为员工之间交流沟通的主要方式之一。然而&#xff0c;对于大多数企业来说&#xff0c;选择私有化部署企业IM即时通讯软…...

react ant icon的简单使用

refer: 快速上手 - Ant Design 1.引入ant npm install antd --save 2.在页面引用&#xff1a; import { StarOutlined } from ant-design/icons; 如果想要引入多个icon&#xff0c;可以这样书写&#xff1a; import { UserOutlined, MailOutlined, PieChartOutlined } fr…...

用Rust实现23种设计模式之原型模式

在 Rust 中&#xff0c;原型模式可以通过实现 Clone trait 来实现。原型模式是一种创建型设计模式&#xff0c;它允许通过复制现有对象来创建新对象&#xff0c;而无需显式地使用构造函数。下面是一个使用 Rust 实现原型模式的示例&#xff0c;带有详细的代码注释和说明&#x…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...