使用Python和Selenium自动化爬取 #【端午特别征文】 探索技术极致,未来因你出“粽” # 的投稿文章

news2024/12/29 8:48:56

文章目录

  • 介绍:
  • 界面展示
  • 知识点详解
      • 导入相关模块
      • 设置Chrome驱动程序的路径
      • 创建ChromeDriver服务和启动Chrome浏览器
      • 发送GET请求获取网页内容
      • 模拟向下滚动加载更多内容
      • 获取完整的HTML内容
      • 关闭浏览器
      • 使用正则表达式提取文章信息
      • 构建数据表格和导出到Excel
  • 扩展知识点
  • 代码示例
  • 最终效果
  • 总结

介绍:

本文章将介绍如何使用Python的Selenium库和正则表达式对CSDN的活动文章进行爬取,并将爬取到的数据导出到Excel文件中。

界面展示

在这里插入图片描述

知识点详解

python 知识点详解

导入相关模块

首先,我们需要导入以下模块:

import re                    # 用于处理正则表达式的模块
import time                  # 用于暂停执行的模块
import pandas as pd          # 用于创建和操作数据表格的模块
from selenium import webdriver                      # 用于控制浏览器的模块
from selenium.webdriver.chrome.service import Service    # 用于创建ChromeDriver服务的模块
from selenium.webdriver.common.by import By                 # 用于定位元素的模块
from selenium.webdriver.common.action_chains import ActionChains    # 用于模拟鼠标操作的模块
from selenium.webdriver.common.keys import Keys            # 用于模拟键盘操作的模块
  • re是Python内置的正则表达式模块,用于处理字符串匹配和搜索。
  • time模块提供了一些与时间相关的函数,我们可以使用它来暂停程序的执行。
  • pandas是一个强大的数据分析库,用于创建和操作数据表格。
  • selenium是一个用于自动化浏览器操作的库,我们使用它来控制Chrome浏览器进行页面爬取。

设置Chrome驱动程序的路径

在代码中指定Chrome驱动程序的路径:

driver_path = 'path_to_chrome_driver'

请将path_to_chrome_driver替换为实际的Chrome驱动程序的路径。

创建ChromeDriver服务和启动Chrome浏览器

创建ChromeDriver服务和启动Chrome浏览器:

service = Service(driver_path)    # 创建ChromeDriver服务
options = webdriver.ChromeOptions()    # 创建Chrome浏览器选项
options.add_argument('--headless')    # 可选设置,无界面模式
driver = webdriver.Chrome(service=service, options=options)    # 启动Chrome浏览器

这样就成功创建了ChromeDriver服务,并启动了Chrome浏览器。

发送GET请求获取网页内容

使用driver.get(url)方法发送GET请求,获取CSDN活动页面的网页内容:

url = 'https://activity.csdn.net/creatActivity?utm_source=324486289&id=10478&spm=1011.2433.3001.6900'
driver.get(url)

模拟向下滚动加载更多内容

为了获取页面的全部内容,我们需要模拟向下滚动加载更多内容。这里我们使用JavaScript脚本来执行滚动操作:

while True:
    prev_height = driver.execute_script('return document.body.scrollHeight')
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(5)
    new_height = driver.execute_script('return document.body.scrollHeight')
    if new_height == prev_height:
        break

代码使用了一个循环来不断执行滚动操作,直到页面没有新内容出现为止。

获取完整的HTML内容

在滚动加载完所有内容后,我们可以通过driver.page_source属性获取完整的HTML内容:

html_content = driver.page_source

关闭浏览器

完成所有爬取操作后,记得关闭浏览器:

driver.quit()

使用正则表达式提取文章信息

使用正则表达式模式来提取CSDN活动文章的信息,并将结果存储到matches列表中:

pattern = r'<div class="article-tit"><a href="(.*?)" target="_blank">(.*?)<\/a><\/div><div class="article-dec">(.*?)<\/div><div class="article-status">.*?<a href="(.*?)" target="_blank" class="text">(.*?)<\/a>.*?<span class="text">发布博客 (.*?)<\/span>'
matches = re.findall(pattern, html_content)

注意 : 确保正则表达式模式与目标网页的HTML结构相匹配。

构建数据表格和导出到Excel

我们使用Pandas库来构建数据表格,并将爬取到的数据导出到Excel文件中:

data = []
for match in matches:
    url = match[0]
    title = match[1]
    content = match[2].strip()
    author_url = match[3]
    author = match[4]
    publish_date = match[5]

    data.append({
        '标题': title,
        '链接': url,
        '内容': content,
        '作者': author,
        '发布日期': publish_date,
        '作者链接': author_url
    })

df = pd.DataFrame(data)    # 创建数据帧
df.sort_values(by='作者', inplace=True)    # 按照作者进行排序

output_path = 'output.xlsx'    # 导出路径
with pd.ExcelWriter(output_path) as writer:
    df.to_excel(writer, sheet_name='文章列表', index=False)    # 导出到Excel文件

print('结果已导出到Excel文件:', output_path)

扩展知识点

python 扩展知识点

  1. Selenium:Selenium是一个用于自动化浏览器操作的工具。通过Selenium可以模拟用户在浏览器中的行为,例如打开网页、点击按钮、填写表单等。它支持多种浏览器,包括Chrome、Firefox、Safari等。
  2. 正则表达式:正则表达式是一种强大的文本处理工具,用于在字符串中匹配和提取特定模式的文本。它可以通过一些特殊字符和语法规则来描述字符串的模式,并进行匹配操作。在爬虫中,正则表达式常用于从网页源代码中提取目标信息。
  3. Pandas:Pandas是Python中常用的数据分析和数据处理库。它提供了丰富的数据操作和处理功能,可以方便地进行数据清洗、转换、合并等操作。在本文中,我们使用Pandas来构建数据表格并导出到Excel文件中。

代码示例

完整代码示例如下所示:

# 导入相关模块
import re
import time
import pandas as pd
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 设置Chrome驱动程序的路径
driver_path = 'path_to_chrome_driver'

# 创建ChromeDriver服务
service = Service(driver_path)

# 启动Chrome浏览器
options = webdriver.ChromeOptions()
options.add_argument('--headless')  # 无界面模式,可选设置
driver = webdriver.Chrome(service=service, options=options)

# 发送GET请求获取网页内容
url = 'https://activity.csdn.net/creatActivity?utm_source=324486289&id=10478&spm=1011.2433.3001.6900'
driver.get(url)

# 模拟向下滚动加载更多内容
while True:
    prev_height = driver.execute_script('return document.body.scrollHeight')
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(5)
    new_height = driver.execute_script('return document.body.scrollHeight')
    if new_height == prev_height:
        break

# 获取完整的HTML内容
html_content = driver.page_source

# 关闭浏览器
driver.quit()

# 使用正则表达式模式提取文章信息
pattern = r'<div class="article-tit"><a href="(.*?)" target="_blank">(.*?)<\/a><\/div><div class="article-dec">(.*?)<\/div><div class="article-status">.*?<a href="(.*?)" target="_blank" class="text">(.*?)<\/a>.*?<span class="text">发布博客 (.*?)<\/span>'
matches = re.findall(pattern, html_content)

# 构建数据表格
data = []
for match in matches:
    url = match[0]
    title = match[1]
    content = match[2].strip()
    author_url = match[3]
    author = match[4]
    publish_date = match[5]

    data.append({
        '标题': title,
        '链接': url,
        '内容': content,
        '作者': author,
        '发布日期': publish_date,
        '作者链接': author_url
    })

# 创建数据帧
df = pd.DataFrame(data)

# 按照作者进行排序
df.sort_values(by='作者', inplace=True)

# 导出到Excel文件
output_path = 'output.xlsx'
with pd.ExcelWriter(output_path) as writer:
    df.to_excel(writer, sheet_name='文章列表', index=False)

print('结果已导出到Excel文件:', output_path)

最终效果

在这里插入图片描述

总结

本文介绍了使用Selenium和正则表达式爬取CSDN的活动文章信息,并将爬取到的数据导出到Excel文件中。 赶快去试试吧!!!

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

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

相关文章

HTTP中的API是什么?

&#x1f482; 个人网站:【海拥】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 前言什么是API&#xf…

活动选择问题|贪婪算法-1

贪婪是一种算法范式&#xff0c;它一点一点地构建解决方案&#xff0c;总是选择下一个提供最明显和最直接好处的部分。贪婪算法用于优化问题。 如果优化问题具有以下属性&#xff0c;则可以使用贪婪解决该问题&#xff1a; 在每一步中&#xff0c;我们都可以做出一个目前看起来…

scrapy学习(scrapy项目学习)

创建scrapy项目 创建爬虫项目 scrapy startproject ss1_miove创建爬虫文件&#xff08;&#xff09; 命令格式&#xff1a;scrapy genspider <爬虫名称> <网站域名> scrapy genspider ss1_scrapy ssr1.scrape.centerscrapy框架的组成 spider文件夹&#xff1a…

ELK之Elasticsearch7.17.4安装(yum方式)和三节点集群配置

一、下载Elasticsearch7.17.4 的rpm包 下载地址&#xff1a; https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-17-4 二、建立elasticsearch的yum源 vim /etc/yum.repos.d/es.repo [elasticsearch] nameElasticsearch repository for 7.x packages bas…

IO多路复用之poll

文章目录 一&#xff1a;poll函数接口参数说明&#xff1a;返回结果&#xff1a; 二&#xff1a;poll的优缺点优点&#xff1a;缺点&#xff1a; 三&#xff1a;poll代码示例 一&#xff1a;poll函数接口 #include <poll.h> int poll(struct pollfd *fds, nfds_t nfds, i…

Java设计模式之行为型-模板方法模式(UML类图+案例分析)

目录 一、概念 二、角色设计 三、代码实现 案例一 案例二 四、总结 一、概念 定义一个操作中的算法骨架&#xff0c;而将算法的一些步骤延迟到子类当中&#xff0c;使得子类可以不改变该算法结构的情况下重定义该算法的特定步骤&#xff0c;即在一个抽象类中公开定义了执…

信驰达科技携手TI将CC2340推向更广市场领域

根据蓝牙技术联盟&#xff08;Bluetooth SIG&#xff09;2023年最新发布《2023年蓝牙市场最新资讯》&#xff0c;市调机构ABI Research预测数据显示&#xff0c;蓝牙市场在未来五年将会实现高增长&#xff0c;蓝牙设备年出货量将保持强劲增长势头&#xff0c;预计到2027年将达7…

python高频函数—CSV() 读写

Part.1 csv.reader()函数 csv.reader(csvfile, dialectexcel, **fmtparams) 返回一个 reader 对象&#xff0c;该对象将逐行遍历 csvfile。 一个简短的用法示例: >>> import csv>>> with open(eggs.csv, newline) as csvfile:... spamreader csv.r…

ctrl键的作用

crtl是control的英文缩写&#xff0c;是控制的意思&#xff0c;长和其他键组合起来使用&#xff0c;达到快捷操作的功能。 例如&#xff1a;ctrlX是剪切的功能&#xff0c;ctrlP是打印设置&#xff0c;ctrlZ是撤销&#xff0c;ctrlF是查找&#xff0c;ctrlY是恢复的功能等。 …

在野外使用无线电台的必知事项

电台属于无线通信设备的一种&#xff0c;主要用于发送和接收无线电信号&#xff0c;实现语音、数据和图像等信息的传输。它一般是由发射机和接收机两部分组成&#xff0c;能够在不同的频段和频率上进行通信。通过无线电波传输信息&#xff0c;为人们在不同场景中提供可靠的远距…

11.Rocket解决分布式事务

highlight: arduino-light 两阶段提交协议 原文链接&#xff1a;https://blog.csdn.net/fenglibing/article/details/92417739 两阶段提交协议(Two-phase Commit&#xff0c;2PC)经常被用来实现分布式事务。一般分为协调器TC和若干事务执行者两种角色&#xff0c;这里的事务执行…

【Vue3】学习笔记-ref函数、reactive函数

ref函数、reactive函数 Ref函数reactive函数 Ref函数 作用&#xff1a;定义一个响应式的数据语法&#xff1a;const xxxref(initValue) 创建一个包含响应式数据的引用对象(reference对象&#xff0c;简称ref对象)。JS中操作数据:xxx.value模板中读取数据&#xff1a;不需要.va…

地理数据处理-地理空间表的导入与查询

前言 现在大部分数据库都支持地理空间的数据存储&#xff0c;可以方便的与GIS平台调用&#xff0c;比如Geoserver、ArcGis, 但是如果使用不规范的空间表去发布图层预览可能会出现各种问题&#xff0c;比如坐标系错误&#xff0c;无法聚焦。 本文将举例最常见的SQLServer和Post…

Godot引擎 4.0 文档 - 手册 - 2D

本文为Google Translate英译中结果&#xff0c;DrGraph在此基础上加了一些校正。英文原版页面&#xff1a; 2D — Godot Engine (stable) documentation in English 画布层 视口和画布项目 CanvasItem是所有 2D 节点的基础&#xff0c;无论是常规的 2D 节点&#xff0c;例如…

深入理解微分、积分电路!搞懂PID控制原理就这么简单!

很多朋友觉得PID是遥不可及&#xff0c;很神秘&#xff0c;很高大上的一种控制&#xff0c;对其控制原理也很模糊&#xff0c;只知晓概念性的层面&#xff0c;知其然不知其所以然&#xff0c;那么本期从另类视角来探究微分、积分电路的本质&#xff0c;意在帮助理解PID的控制原…

智慧排水监测系统有什么作用?

随着城市化进程的加速&#xff0c;城市排水系统的压力不断增加。然而&#xff0c;当前城市排水系统面临着管理效率低下、水资源浪费和洪涝灾害等问题。为了解决这些问题&#xff0c;智慧排水监测系统逐渐成为了新的解决方案。本文将为大家详细介绍智慧排水监测系统的作用以及智…

微软公布量子超级计算机路线图

光子盒研究院 6月22日&#xff0c;微软公布了三个重要的量子计算公告。首先&#xff0c;公司宣布它已经实现了通往量子超级计算机的六步路线图的第一个里程碑&#xff0c;并发表了一篇经同行评议的研究论文来证明这一成就。 这家科技巨头的第二项公告是将其人工智能&#xff08…

堆——“数据结构与算法”

各位CSDN的uu们你们好呀&#xff0c;今天小雅兰的内容仍旧是二叉树&#xff0c;此刻分享的内容是一种特殊的二叉树&#xff0c;也就是堆了。下面&#xff0c;让我们进入堆的世界吧&#xff01;&#xff01;&#xff01; typedef int HeapDataType; typedef struct Heap {HeapDa…

MES系统是什么?它如何帮助企业提高生产效率?

随着制造业的发展&#xff0c;越来越多的企业开始使用全面的制造执行系统&#xff08;MES&#xff09;来管理其生产过程。那么&#xff0c;MES系统到底是什么呢&#xff1f;它又是如何帮助企业提高生产效率的呢&#xff1f;本文将为大家详细介绍。 一、MES系统的概念 MES系统是…

Leetcode 剑指 Offer II 032. 有效的变位词

题目难度: 简单 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断它们是不…