前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用Python和Selenium自动化爬取 #【端午特别征文】 探索技术极致,未来因你出“粽” # 的投稿文章

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

作者头像
全栈若城
发布2024-02-29 18:51:13
发布2024-02-29 18:51:13
32600
代码可运行
举报
文章被收录于专栏:若城技术专栏若城技术专栏
运行总次数:0
代码可运行

介绍:

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

界面展示

知识点详解

导入相关模块

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

代码语言:javascript
代码运行次数:0
运行
复制
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驱动程序的路径:

代码语言:javascript
代码运行次数:0
运行
复制
driver_path = 'path_to_chrome_driver'

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

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

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

代码语言:javascript
代码运行次数:0
运行
复制
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活动页面的网页内容:

代码语言:javascript
代码运行次数:0
运行
复制
url = 'https://activity.csdn.net/creatActivity?utm_source=324486289&id=10478&spm=1011.2433.3001.6900'
driver.get(url)
模拟向下滚动加载更多内容

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

代码语言:javascript
代码运行次数:0
运行
复制
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内容:

代码语言:javascript
代码运行次数:0
运行
复制
html_content = driver.page_source
关闭浏览器

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

代码语言:javascript
代码运行次数:0
运行
复制
driver.quit()
使用正则表达式提取文章信息

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

代码语言:javascript
代码运行次数:0
运行
复制
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文件中:

代码语言:javascript
代码运行次数:0
运行
复制
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)

扩展知识点

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

代码示例

完整代码示例如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
# 导入相关模块
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文件中。 赶快去试试吧!!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍:
  • 界面展示
  • 知识点详解
    • 导入相关模块
    • 设置Chrome驱动程序的路径
    • 创建ChromeDriver服务和启动Chrome浏览器
    • 发送GET请求获取网页内容
    • 模拟向下滚动加载更多内容
    • 获取完整的HTML内容
    • 关闭浏览器
    • 使用正则表达式提取文章信息
    • 构建数据表格和导出到Excel
  • 扩展知识点
  • 代码示例
  • 最终效果
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档