【python】使用Selenium获取(2023博客之星)的参赛文章

简介: 【python】使用Selenium获取(2023博客之星)的参赛文章

前言

2023博客之星活动已经过了半年之久,出于好奇,想看看目前为止到底有多少人参与了, 由于小助手每次只发单独赛道的, 因此无法窥其全貌,进行对比, 因此写了这个脚本,来分析一下, 看到结果之后, 很想放弃啊, 太卷了.

导入模块

from selenium import webdriver
import json
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
import time
from datetime import datetime
import pandas as pd
from openpyxl import Workbook, load_workbook
  • 这一部分代码导入了所需的模块,其中包括selenium、json、time、datetime、pandas和openpyxl。

设置ChromeDriver路径和创建WebDriver对象

driver_path = ''
driver = webdriver.Chrome(driver_path)
  • 这部分代码设置了ChromeDriver的路径,并创建了一个Chrome WebDriver对象,用于操作浏览器。

打开网页

url = 'https://bbs.csdn.net/forums/blogstar2023?typeId=3092730&spm=1001.2014.3001.9616'
driver.get(url)
time.sleep(5)
  • 这部分代码通过get()方法打开了指定的网页,并使用time.sleep()方法等待5秒钟以确保页面加载完成。

找到结果元素

results = driver.find_element(By.CLASS_NAME, "user-tabs").find_elements(By.CLASS_NAME, "tab-list-item")
  • 这部分代码通过find_element()方法定位Class名字为"user-tabs"的元素,并通过find_elements()方法查找其下所有Class名字为"tab-list-item"的元素,将结果保存在results变量中。

创建一个空列表用于存储数据

data = []
  • 这部分代码创建了一个空列表data,用于存储数据。

获取当前日期和时间

current_datetime = datetime.now()
current_date = current_datetime.date()
  • 这部分代码获取了当前的日期。

创建一个新的 Excel 文件

result_workbook = Workbook()
result_sheet = result_workbook.active
  • 这部分代码使用openpyxl库的Workbook函数创建了一个新的Excel文件和一个工作表,并使用active属性获取默认的工作表。

写入标题行

result_sheet.append(['排名',"用户名","总原力值","当月获得原力值","2023年获得原力值","2023年高质量博文数"])
  • 这部分代码使用append()方法将标题写入工作表的第一行。

遍历结果元素并提取数据

for result in results:
    time.sleep(5)
    title = result.find_element(By.CLASS_NAME, 'content-wrapper').find_element(By.CLASS_NAME, 'long-text-title').text
    link = result.find_element(By.CLASS_NAME, 'content-wrapper').find_element(By.CLASS_NAME, 'align-items-center').get_attribute("href")
    if str(current_date) in title:
        item = {
            'title': title,  # 标题
            'link': link
        }
        data.append(item)
    else:
        print(f'不是今天的不做处理. 标题{title}')
  • 这部分代码使用for循环遍历结果元素列表,并使用find_element()方法提取每个元素中的标题和链接信息。如果标题包含当前日期,则将标题和链接以字典的形式存储在data列表中。否则,输出一条消息。

输出data列表

print(data)
  • 这部分代码输出data列表,显示提取的数据。

创建一个空的DataFrame来存储数据

df = pd.DataFrame(columns=["Link", "Content"])
  • 这部分代码使用pandas的DataFrame函数创建了一个空的DataFrame,用于存储数据。

遍历链接并爬取数据

for item in data:
    print(item['link'])
    driver.get(item['link'])
    time.sleep(5)
    table_element = driver.find_element(By.CLASS_NAME, 'markdown_views').find_element(By.TAG_NAME, 'table')
    rows = table_element.find_elements(By.TAG_NAME, 'tr')
    for row in rows:
        row_data = []
        columns = row.find_elements(By.TAG_NAME, 'td')
        for column in columns:
             cell_data = column.text
             row_data.append(cell_data)
             print(cell_data)
        result_sheet.append(row_data)
  • 这部分代码使用for循环遍历data列表中的每个元素,获取其链接并导航到该链接。然后从页面中找到标签为table的元素,并遍历表格的行和列,将单元格中的数据保存在row_data列表中,然后将row_data添加到result_sheet工作表中。

关闭浏览器驱动

driver.quit()
  • 这部分代码关闭了浏览器驱动,释放资源。

保存结果到一个新的 Excel 文件

result_workbook.save('博客之星.xlsx')
  • 这部分代码使用save()方法将result_workbook保存为名为"博客之星.xlsx"的Excel文件。

完整代码如下

from selenium import webdriver
import json
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
import time
from datetime import datetime
import pandas as pd
from openpyxl import Workbook, load_workbook
# 设置ChromeDriver的路径
driver_path = ''
# 创建Chrome WebDriver对象
driver = webdriver.Chrome(driver_path)
# 打开网页
url = 'https://bbs.csdn.net/forums/blogstar2023?typeId=3092730&spm=1001.2014.3001.9616'
driver.get(url)
time.sleep(5)
# 找到结果元素
results = driver.find_element(By.CLASS_NAME, "user-tabs").find_elements(By.CLASS_NAME, "tab-list-item")
# 创建一个空列表用于存储数据
data = []
# 获取当前日期和时间
current_datetime = datetime.now()
# 提取当前日期
current_date = current_datetime.date()
# 创建一个新的 Excel 文件
result_workbook = Workbook()
result_sheet = result_workbook.active
# 写入标题行
result_sheet.append(['排名',"用户名","总原力值","当月获得原力值","2023年获得原力值","2023年高质量博文数"])
# 遍历结果元素并提取数据
for result in results:
    time.sleep(5)
    title = result.find_element(By.CLASS_NAME, 'content-wrapper').find_element(By.CLASS_NAME, 'long-text-title').text
    link = result.find_element(By.CLASS_NAME, 'content-wrapper').find_element(By.CLASS_NAME, 'align-items-center').get_attribute("href")
    if str(current_date) in title:
        # 将提取的数据存储为字典格式
        item = {
            'title': title,  # 标题
            'link': link
        }
        # 将字典添加到数据列表中
        data.append(item)
    else:
        print(f'不是今天的不做处理. 标题{title}')
print(data)
# 创建一个空的DataFrame来存储数据
df = pd.DataFrame(columns=["Link", "Content"])
# 遍历链接并爬取数据
for item in data:
    print(item['link'])
    # 导航到链接
    driver.get(item['link'])
    time.sleep(5)
    table_element = driver.find_element(By.CLASS_NAME, 'markdown_views').find_element(By.TAG_NAME, 'table')
    rows = table_element.find_elements(By.TAG_NAME, 'tr')  # 获取所有行
    for row in rows:
        row_data = []
        columns = row.find_elements(By.TAG_NAME, 'td')  # 获取每行中的所有列
        for column in columns:
             cell_data = column.text
             row_data.append(cell_data)
             print(cell_data)
        result_sheet.append(row_data)
# 关闭浏览器驱动
driver.quit()
# 保存结果到一个新的 Excel 文件
result_workbook.save('博客之星.xlsx')

运行效果

结束语

太难了, 卷不起啊!!!

相关文章
|
1天前
|
数据采集 Web App开发 存储
打造高效的Web Scraper:Python与Selenium的完美结合
本文介绍如何使用Python结合Selenium,通过代理IP、设置Cookie和User-Agent抓取BOSS直聘的招聘信息,包括公司名称、岗位、要求和薪资。这些数据可用于行业趋势、人才需求、企业动态及区域经济分析,为求职者、企业和分析师提供宝贵信息。文中详细说明了环境准备、代理配置、登录操作及数据抓取步骤,并提醒注意反爬虫机制和验证码处理等问题。
打造高效的Web Scraper:Python与Selenium的完美结合
|
4月前
|
Web App开发 前端开发 JavaScript
探索Python科学计算的边界:利用Selenium进行Web应用性能测试与优化
【10月更文挑战第6天】随着互联网技术的发展,Web应用程序已经成为人们日常生活和工作中不可或缺的一部分。这些应用不仅需要提供丰富的功能,还必须具备良好的性能表现以保证用户体验。性能测试是确保Web应用能够快速响应用户请求并处理大量并发访问的关键步骤之一。本文将探讨如何使用Python结合Selenium来进行Web应用的性能测试,并通过实际代码示例展示如何识别瓶颈及优化应用。
227 5
|
3月前
|
JSON Linux 数据格式
Python模块:从入门到精通,只需一篇文章!
Python中的模块是将相关代码组织在一起的单元,便于重用和维护。模块可以是Python文件或C/C++扩展,Python标准库中包含大量模块,如os、sys、time等,用于执行各种任务。定义模块只需创建.py文件并编写代码,导入模块使用import语句。此外,Python还支持自定义模块和包,以及虚拟环境来管理项目依赖。
Python模块:从入门到精通,只需一篇文章!
|
3月前
|
测试技术 开发者 Python
对于Python中的异常要如何处理,raise关键字你真的了解吗?一篇文章带你从头了解
`raise`关键字在Python中用于显式引发异常,允许开发者在检测到错误条件时中断程序流程,并通过异常处理机制(如try-except块)接管控制。`raise`后可跟异常类型、异常对象及错误信息,适用于验证输入、处理错误、自定义异常、重新引发异常及测试等场景。例如,`raise ValueError("Invalid input")`用于验证输入数据,若不符合预期则引发异常,确保数据准确并提供清晰错误信息。此外,通过自定义异常类,可以针对特定错误情况提供更具体的信息,增强代码的健壮性和可维护性。
|
3月前
|
数据采集 Web App开发 前端开发
Python爬虫进阶:Selenium在动态网页抓取中的实战
【10月更文挑战第26天】动态网页抓取是网络爬虫的难点,因为数据通常通过JavaScript异步加载。Selenium通过模拟浏览器行为,可以加载和执行JavaScript,从而获取动态网页的完整内容。本文通过实战案例,介绍如何使用Selenium在Python中抓取动态网页。首先安装Selenium库和浏览器驱动,然后通过示例代码展示如何抓取英国国家美术馆的图片信息。
197 6
|
4月前
|
存储 C语言 索引
Python 语法及入门 (超全超详细) 专为Python零基础 一篇博客让你完全掌握Python语法
本文全面介绍了Python的基础知识,包括Python的诞生背景、为什么学习Python、Python的应用场景、Python环境的安装、Python的基础语法、数据类型、控制流、函数以及数据容器的使用方法,旨在为Python零基础读者提供一篇全面掌握Python语法的博客。
905 1
Python 语法及入门 (超全超详细) 专为Python零基础 一篇博客让你完全掌握Python语法
|
3月前
|
数据采集 JavaScript 程序员
探索CSDN博客数据:使用Python爬虫技术
本文介绍了如何利用Python的requests和pyquery库爬取CSDN博客数据,包括环境准备、代码解析及注意事项,适合初学者学习。
154 0
|
4月前
|
数据采集 Web App开发 数据可视化
Python爬虫教程:Selenium可视化爬虫的快速入门
Python爬虫教程:Selenium可视化爬虫的快速入门
|
4月前
|
编解码 UED Python
Python批量修改指定目录下图片的大小名文章
Python批量修改指定目录下图片的大小名文章
32 1
|
5月前
|
存储 Go C语言
Python 的整数是怎么实现的?这篇文章告诉你答案
Python 的整数是怎么实现的?这篇文章告诉你答案
94 7

热门文章

最新文章

推荐镜像

更多