文章目录
- 介绍:
- 界面展示
- 知识点详解
- 导入相关模块
- 设置Chrome驱动程序的路径
- 创建ChromeDriver服务和启动Chrome浏览器
- 发送GET请求获取网页内容
- 模拟向下滚动加载更多内容
- 获取完整的HTML内容
- 关闭浏览器
- 使用正则表达式提取文章信息
- 构建数据表格和导出到Excel
- 扩展知识点
- 代码示例
- 最终效果
- 总结
介绍:
本文章将介绍如何使用Python的Selenium库和正则表达式对CSDN的活动文章进行爬取,并将爬取到的数据导出到Excel文件中。
界面展示
知识点详解
导入相关模块
首先,我们需要导入以下模块:
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)
扩展知识点
- Selenium:Selenium是一个用于自动化浏览器操作的工具。通过Selenium可以模拟用户在浏览器中的行为,例如打开网页、点击按钮、填写表单等。它支持多种浏览器,包括Chrome、Firefox、Safari等。
- 正则表达式:正则表达式是一种强大的文本处理工具,用于在字符串中匹配和提取特定模式的文本。它可以通过一些特殊字符和语法规则来描述字符串的模式,并进行匹配操作。在爬虫中,正则表达式常用于从网页源代码中提取目标信息。
- 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文件中。 赶快去试试吧!!!