文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-08-31 15:56

关注

文章目录


在这里插入图片描述

前言

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

导入模块

from selenium import webdriverimport jsonfrom selenium.webdriver.common.by import Byfrom selenium.common.exceptions import NoSuchElementExceptionimport timefrom datetime import datetimeimport pandas as pdfrom openpyxl import Workbook, load_workbook

设置ChromeDriver路径和创建WebDriver对象

driver_path = ''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}')

输出data列表

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')

完整代码如下

from selenium import webdriverimport jsonfrom selenium.webdriver.common.by import Byfrom selenium.common.exceptions import NoSuchElementExceptionimport timefrom datetime import datetimeimport pandas as pdfrom 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')

运行效果

在这里插入图片描述

结束语

太难了, 卷不起啊!!!

来源地址:https://blog.csdn.net/qq_33681891/article/details/132062763

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯