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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/23936.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

以游戏编程的角度看待模拟时间的算法题——以PAT甲级1026 Table Tennis为例

对于需要模拟时间的算法题,可以将开始时间作为游戏的开始(如Unity的Start或UE的BeginPlay),每一秒的模拟作为游戏的画面更新(如Unity的Update或UE的Tick),结束时间可作为游戏的结束(…

Django使用uwsgi+nginx部署,admin没有样式解决办法

Django使用uwsginginx部署,admin没有样式解决办法 如果使用了虚拟环境则修改nginx.conf文件中的/static/路径为你虚拟环境的路径,没有使用虚拟环境则改为你python安装路径下的static server {listen 8008;server_name location; #改为自己的域名,没域名…

【Linux】五种IO模型

文章目录 1. IO基本概念2. 五种IO模型2.1 五个钓鱼的例子2.2 五种IO模型2.2.1 阻塞IO2.2.2 非阻塞IO2.2.3 信号驱动IO2.2.4 IO多路转接2.2.5 异步IO 1. IO基本概念 认识IO IO就是输入和输出,在冯诺依曼体系结构中,将数据从输入设备拷贝到内存就叫输入&am…

力扣热题100 JavaScript--136. 只出现一次的数字

给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。 示例 1 : 输入&#xff…

【Linux】信号捕捉

目录 信号捕捉1.用户态与内核态1.1关于内核空间与内核态:1.2关于用户态与内核态的表征: 2.信号捕捉过程 信号捕捉 1.用户态与内核态 用户态:执行用户代码时,进程的状态 内核态:执行OS代码时,进程的状态 …

中国1km分辨率月最低温度数据集(1901-2021年)介绍

该数据为中国逐月最低温度数据,空间分辨率为0.0083333(约1km),时间为1901.1-2021.12。数据格式为NETCDF,即.nc格式。数据单位为0.1 ℃。该数据集是根据CRU发布的全球0.5气候数据集以及WorldClim发布的全球高分辨率气候…

Mac强制停止应用

有时候使用Mac的时候,某个应用卡住了,但是肯定不能因为一个应用卡住了, 就将电脑重启吧,所以只需要单独停止该应用即可,使用快捷键optioncommandesc就会出现强制停止的界面,选择所要停止的应用,…

第一课-前提-Stable Diffusion 教程

学习 SD 的前提是电脑配置! SD 参考配置: 建议选择台式机 i5 CPU, 内存16GB,N卡 RTX3060, 8G显存以上的配置(最低配) 在此基础上的配置越高越好。 比如,cpu i7 更好,显卡能有 RTX4090 更好,32显存要能有最好,嘿嘿嘿。 如何查看自己的显卡配置? Win+R 输入 “dxdiag…

从零开始,探索Python变量的奥秘!

在Python这个充满魔力的编程世界中,变量是一门必须深入了解的基础知识。无论你是初学者还是有经验的开发者,掌握变量的基本语法对于编写优雅、高效的代码至关重要。本篇博客将带你从零开始,深入探索Python变量的奥秘,让你在编程之…

wait,notify/notifyAll都要放在synchronized锁里面

wait,notify/notifyAll都要放在synchronized锁里面 如果没放在synchronized锁里面,就要报这样的错误 public class Test5 {public static void main(String[] args) throws InterruptedException {Thread t1 new Thread(()->{syn();},"t1&quo…

在消费级GPU调试LLM的三种方法:梯度检查点,LoRA和量化

LLM的问题就是权重参数太大,无法在我们本地消费级GPU上进行调试,所以我们将介绍3种在训练过程中减少内存消耗,节省大量时间的方法:梯度检查点,LoRA和量化。 梯度检查点 梯度检查点是一种在神经网络训练过程中使动态计算只存储最…

26 MFC序列化函数

文章目录 Serialize对于存储文件的序列化 Serialize Serialize 是一个在 MFC (Microsoft Foundation Classes) 中常用的函数或概念。它用于将对象的数据进行序列化和反序列化,便于在不同的场景中保存、传输和恢复对象的状态。 在 MFC 中,Serialize 函数…

EdgeBox_tx1_A200 PyTorch v1.9.0 环境部署

大家好,我是虎哥,今天远程帮助几个小伙伴在A200 控制器上安装PyTorch v1.9.0 torchvision v0.10.0,中间也是经历了很多波折,当然,大部分是网络问题和版本适配问题,所以完事后,将自己完整可用的过…

esp32c3 xiao 脚本记录

oled显示网络时间, wifi链接网络 // ntp_get_date.h #include "time.h"String week[8] {"Sun", "Mon", "Tues", "Wednes", "Thur", "Fri", "Sat" };void printLocalTime(Adafruit_SSD1306 …

开源进展 | WeBASE v3.1.0发布,新增多个实用特性

WeBASE是一个友好、功能丰富的区块链中间件平台,通过一系列通用功能组件和实用工具,助力社区开发者更快捷地与区块链进行交互。 目前WeBASE已更新迭代至v3.1.0版本,本次更新中,WeBASE带来了最新的合约Java脚手架导出功能&#xff…

vue3 实现一个下拉刷新

1. 实现最简单的下拉刷新雏形 <template><div class"wrap" ref"freshcontainer" touchstart"handlerstart" touchmove"handlermove" touchend"handlerend"><div class"fresh_txt" v-if"mo…

【音视频SDK测评】线上K歌软件开发技术选型

摘要 在线K歌软件的开发有许多技术难点&#xff0c;需考虑到音频录制和处理、实时音频传输和同步、音频压缩和解压缩、设备兼容性问题等技术难点外&#xff0c;此外&#xff0c;开发者还应关注音乐版权问题&#xff0c;确保开发的应用合规合法。 前言 前面写了几期关于直播 …

vue项目在body设置公共的背景前提下,区分首页背景图和其他页面背景图

1.需求:在vue项目已设置统一的body背景图的前提,单独给首页换一个背景图,然后其他页面背景图不变的临时需求 实现思路1:在首页home.vue中 在公共的style.css文件中写上两个背景样式(写在公共样式中是因为style.css比组件内部的先加载,避免页面出现后背景空白的问题) …

十四.redis哨兵模式

redis哨兵模式 1.概述2.测试3.哨兵模式优缺点 redis哨兵模式基础是主从复制 1.概述 主从切换的技术方法&#xff1a;当主节点服务器宕机后&#xff0c;需要手动把一台从服务器切换为主服务器&#xff0c;这就需要人工干预&#xff0c;费时费力&#xff0c;还会造成一段时间内服…

单例模式和工厂模式

目录 今日良言&#xff1a;关关难过关关过&#xff0c;步步难行步步行 一、单例模式 1.饿汉模式 2.懒汉模式 二、工厂模式 今日良言&#xff1a;关关难过关关过&#xff0c;步步难行步步行 一、单例模式 首先来解释一下&#xff0c;什么是单例模式。 单例模式也就是单个…