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

news/2025/1/8 18:04:26/

文章目录

  • 介绍:
  • 界面展示
  • 知识点详解
      • 导入相关模块
      • 设置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.ppmy.cn/news/566422.html

相关文章

短信验证码的防攻击

案例 看到下面一个请求包,发个验证码附带了这么多的参数,那么肯定是有些问题滴!! 一般比较典型的短信轰炸漏洞,要么是未作任何限制,要么是添加 +、空格等可以绕过 最近在测试的时候,发现了一点新东西,利用请求中的其他参数也可以造成短信轰炸漏洞,比如说: 场景 …

vue3 + TS + Vue3 BaiduMap Gl 丝滑根据ip获取定位

官网 添加链接描述 安装 # with npm npm install vue3-baidu-map-gllatest --save# or with yarn yarn add vue3-baidu-map-gllatest# or with pnpm pnpm add vue3-baidu-map-gllatest配置 导入 import { createApp } from vue import App from ./App.vue import baiduMap f…

中移链链账户、合约与资源关系介绍

中移链链账户是在中移链区块链上注册的用户标识&#xff0c;每个账户可以持有一定数量的资源。CPU资源是账户用于执行智能合约的计算能力配额&#xff0c;决定了账户可以使用的CPU计算时间。NET资源是账户的带宽配额&#xff0c;用于处理事务的传输和网络通信。RAM资源用于存储…

基于Springboot+vue+协同过滤+前后端分离+电子产品推荐系统(用户,多商户,管理员)+全套视频教程

基于Springbootvue协同过滤前后端分离电子产品推荐系统(用户,多商户,管理员)(毕业论文11000字以上,共33页,程序代码,MySQL数据库) 代码下载 链接&#xff1a;https://pan.baidu.com/s/1ckCKm4zKT0m4RqfHULYyOg 提取码&#xff1a;8888 【运行环境】Idea JDK1.8 Maven MySQL …

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

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

mysql 集群实验~~双主双从搭建

这里写目录标题 搭建mysql集群实现双主双从的同步一、部署环境1.1 分别安装mysql服务并设置域名解析 二、 配置双主MySQL服务器2.1由于是双主&#xff0c;所以master2是master1的从&#xff0c;同时master1又是master2的从所以都要开启二进制和中继日志2.2 重启服务2.3 测试双主…

Delphi实现通用的定时自动关机程序

一、问题的提出:运行某任务的计算机&#xff0c;尤其是服务器&#xff0c;如果能实现在无人职守的情况下&#xff0c;到达指定时间时自动关机&#xff0c;那么将极大地减轻系统管理员的负担&#xff0c;也会给我们的日常工作带来很大方便。  笔者用Delphi开发的这个定时自动关…

戴尔服务器开机自动关机,戴尔台式电脑自动关机怎么办

戴尔电脑运行的好好的自动就关机或者自动重新启动了,那么为什么电脑会自动关机与自动重新启动呢?学习啦小编为大家分享了具体的操作方法&#xff0c;接下来大家就跟着学习啦小编一起去了解下吧。 戴尔台式电脑自动关机怎么办 电脑自动关机的原因&#xff1a;病毒 1、一般来说不…