【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').text
    author = result.find_element(By.CLASS_NAME, "item-ft").find_element(By.CLASS_NAME, 'name-text').text
    pushTime = 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").text

        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
        except NoSuchElementException:
            read = 0

        try:
            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
        except NoSuchElementException:
            zan = 0

        try:
            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").text
        except 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').text
    author = result.find_element(By.CLASS_NAME, "item-ft").find_element(By.CLASS_NAME, 'name-text').text
    pushTime = result.find_element(By.CLASS_NAME, "item-ft").find_element(By.CLASS_NAME, 'time').text

    if "实战训练营】" 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").text
        except NoSuchElementException:
            read = 0

        try:
            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


        except NoSuchElementException:
            zan = 0

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【外卖系统】菜品信息分页查询

需求分析 当菜品数据很多时,用分页的形式来展示列表数据 代码开发 页面发送ajax请求,将分页查询参数提交到服务端,获取分页数据页面发送请求,请求服务端进行图片下载,用于页面图片展示 构造分页 注意:…

Java入门指南:Java语言优势及其特点

目录 1. Java语言简介及发展概述 2. Java语言的优势 2.1 可移植性 2.2 面向对象 2.3 安全性 2.4 大量类库 3. Java语言与C/C的区别 4. 初识Java程序入口之main方法 5. 注释、标识符、关键字 5.1 注释 5.2 标识符 5.3 关键字 1. Java语言简介及发展概述 Java是一种面…

iphone备份用什么软件?好用的苹果数据备份工具推荐!

众所周知,如果要将iPhone的数据跟电脑进行传输备份的话,我们需要用到iTunes这个pc工具。但是对于iTunes,不少人都反映这个软件比较难用,用不习惯。于是,顺应时代命运的iPhone备份同步工具就出现了。那iphone备份用什么…

[css]margin-top不起作用问题(外边距合并)

在初学css时&#xff0c;会遇到突然间margin-top不起作用的情况。如下面&#xff1a; 情况一&#xff1a; 代码&#xff1a; <html> <head><style type"text/css"> * {margin:0;padding:0;border:0; }#outer {width:300px;height:300px;backgroun…

数据库—数据库备份(三十四)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、概述 二、数据备份的重要性 三、造成数据丢失的原因 四、备份类型 4.1物理与逻辑角度 4.2数据库备份策略角度 五、常见的备份方法 5.1 物理备份 5.2 使用专用备…

短视频平台视频怎么去掉水印?

短视频怎么去水印&#xff0c;困扰很多人&#xff0c;例如&#xff0c;有些logo水印&#xff0c;动态水印等等&#xff0c;分享操作经验&#xff1a; 抖音作为中国最受欢迎的社交娱乐应用程序之一&#xff0c;已成为许多人日常生活中不可或缺的一部分。在使用抖音过程中&#x…

融合大数据、物联网和人工智能的智慧校园云平台源码 智慧学校源码

电子班牌系统用以展示各个班级的考勤信息、授课信息、精品课程、德育宣传、班级荣誉、校园电视台、考场信息、校园通知、班级风采&#xff0c;是智慧校园和智慧教室的对外呈现窗口&#xff0c;也是学校校园文化宣传和各种信息展示的重要载体。将大数据、物联网和人工智能等新兴…

tinkerCAD案例:24. Ruler - Measuring Lengths 标尺 -量勺

tinkerCAD案例&#xff1a;24. Ruler - Measuring Lengths 标尺 - 测量长度 Project Overview: 项目概况&#xff1a; A machine shop, where any idea can become a reality, can cost millions and million of dollars. Still, the most important tool in the shop is the…

ELK高级搜索(一)

文章目录 ELK搜索1&#xff0e;简介1.1 内容1.2 面向 2&#xff0e;Elastic Stack2.1 简介2.2 特色2.3 组件介绍 3&#xff0e;Elasticsearch3.1 搜索是什么3.2 数据库搜索3.3 全文检索3.4 倒排索引3.5 Lucene3.6 Elasticsearch3.6.1 Elasticsearch的功能3.6.2 Elasticsearch使…

Patchwork 黑客组织瞄准我国大学和研究机构

据知道创宇404高级威胁情报团队近期发现&#xff0c;名为“Patchwork”的黑客组织正以中国的大学和研究机构为目标进行活动&#xff0c;部署名为EyeShell的后门。 Patchwork也被称为“Operation Hangover”和“Zinc Emerson”&#xff0c;被怀疑是来自印度的APT组织。该组织发起…

职业发展规划指南:如何成为成功的产品经理

导语&#xff1a;产品经理是当今互联网时代最炙手可热的职位之一。作为连接技术、商业和用户需求的桥梁&#xff0c;产品经理在公司中扮演着至关重要的角色。本文将为你提供一些关于产品经理职业发展的规划指南&#xff0c;帮助你在这个领域取得成功。 掌握核心技能&#xff1…

Coremail中睿天下|2023年第二季度企业邮箱安全态势观察

7月24日&#xff0c;Coremail邮件安全联合中睿天下发布《2023第二季度企业邮箱安全性研究报告》&#xff0c;对2023第二季度和2023上半年的企业邮箱的安全风险进行了分析。 一、垃圾邮件同比下降16.38% 根据Coremail邮件安全人工智能实验室&#xff08;以下简称AI实验室&#…

pgsql 查看某个表建立了那些索引sql

执行以下sql&#xff1a; SELECTns.nspname as schema_name,tab.relname as table_name,cls.relname as index_name,am.amname as index_type,idx.indisprimary as is_primary,idx.indisunique as is_unique FROMpg_index idx INNER JOIN pg_class cls ON cls.oididx.indexrel…

AI技术快讯:清华开源ChatGLM2双语对话语言模型

ChatGLM2-6B是一个开源项目&#xff0c;提供了ChatGLM2-6B模型的代码和资源。根据提供的搜索结果&#xff0c;以下是对该项目的介绍&#xff1a; 论文&#xff1a;https://arxiv.org/pdf/2103.10360.pdf ChatGLM2-6B是一个开源的双语对话语言模型&#xff0c;是ChatGLM-6B模…

如何利用plotly和geopandas根据美国邮政编码(Zip-Code)绘制美国地图

对于我自己来说&#xff0c;该需求源自于分析Movielens-1m数据集的用户数据&#xff1a; UserID::Gender::Age::Occupation::Zip-code 1::F::1::10::48067 2::M::56::16::70072 3::M::25::15::55117 4::M::45::7::02460 5::M::25::20::55455 6::F::50::9::55117我希望根据Zip-…

Windows下安装Hive(包安装成功)

Windows下安装Hive Hive与Hadoop的版本选择很关键&#xff0c;千万不能选错&#xff0c;否则各种报错。一、Hive下载1.1、官网下载Hive1.2、网盘下载Hive 二、解压安装包&#xff0c;配置Hive环境变量2.1、环境变量新增&#xff1a;HIVE_HOME2.2、修改Path环境变量&#xff0c;…

leetcode 860. 柠檬水找零

2023.8.1 简单的一个思路就是建一个大小为3的数组change &#xff0c;用于存储剩余的零钱&#xff0c;然后遍历账单&#xff0c;每次找零钱的时候判断一下是否有足够的零钱&#xff0c;不够的话直接返回false。 能坚持到结束遍历则返回true。 代码如下&#xff1a; class Solu…

【TypeScript】接口类型 Interfaces 的使用理解

导语&#xff1a; 什么是 类型接口&#xff1f; 在面向对象语言中&#xff0c;接口&#xff08;Interfaces&#xff09;是一个很重要的概念&#xff0c;它是对行为的抽象&#xff0c;而具体如何行动需要由类&#xff08;classes&#xff09;去实现&#xff08;implement&#x…

深入理解设计模式之门面模式

深入理解设计模式之门面模式 什么是门面模式&#xff1f; 门面模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;它提供了一个简单的接口&#xff0c;用于访问复杂子系统中的一组接口。门面模式通过封装子系统的复杂性&#xff0c;提供了一个更简…

华为云hcip核心知识笔记(数据库服务规划)

华为云hcip核心知识笔记&#xff08;数据库服务规划&#xff09; 1.云数据接库优势 1.1云数据库优点有&#xff1a; 易用性强&#xff1a;能欧快速部署和运行 高扩展&#xff1a;开放式架构和云计算存储分离 低成本&#xff1a;按需使用&#xff0c;成本更加低廉 2.云数据库r…