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

介绍:

本文章将介绍如何使用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文件中。 赶快去试试吧!!!

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全栈若城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值