当前位置: 首页 > java >正文

【python实用小脚本-59】连续刷题7天,手动整理编程题目效率低下,Python代码5分钟搞定,效率提升80%(附方案)

一、应用场景故事

上周,我的同事小李为了准备编程竞赛,花费了整整一个周末的时间,手动从CodeChef网站上整理了几十道编程题目的信息,包括题目名称、链接和题目描述。他累得筋疲力尽,还抱怨说:“要是能有个工具自动帮我整理这些信息就好了。”我笑了笑,告诉他其实用Python写一个简单的爬虫程序,就能轻松搞定。于是,我用这段代码,不到10分钟就完成了所有题目的整理,并且还生成了PDF文件。这就是Python的魅力——用简单的代码解决实际问题,提升工作效率。

二、核心代码解析
1. Selenium自动化网页操作
# 功能说明:Selenium自动化网页操作
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECdriver = webdriver.Chrome(options=options)
driver.get("https://www.codechef.com/problems/school")
element = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='primary-content']/div/div[2]/div/div[2]/table/tbody/tr[1]/td[1]/div/a/b")))
  • 技术原理:Selenium是一个自动化测试工具,可以模拟人类操作浏览器的行为。webdriver就像一个“智能机器人”,可以打开网页、点击按钮、输入内容等。
  • 参数作用options用于设置浏览器的运行参数,比如无头模式(--headless)可以让浏览器在后台运行,节省资源。WebDriverWaitexpected_conditions用于等待页面元素加载完成,避免因页面未加载完成而导致的错误。
  • 易错点提示:新手可能会忘记设置等待时间,导致页面元素未加载完成时就尝试操作,从而引发NoSuchElementException

学以致用:如何修改代码,让Selenium等待页面标题加载完成?

2. FPDF生成PDF文件
# 功能说明:FPDF生成PDF文件
from fpdf import FPDFpdf = FPDF()
pdf.add_page()
pdf.set_font("Arial", size=15)
pdf.cell(200, 10, txt="Problem Title", ln=1, align='C')
pdf.multi_cell(200, 10, txt="Problem Statement", align='L')
pdf.output("problem.pdf")
  • 技术原理:FPDF是一个Python库,用于生成PDF文件。它就像一个“打印机”,可以将文本、图像等内容打印到PDF页面上。
  • 参数作用add_page()用于添加一个新页面,set_font()设置字体和字号,cell()multi_cell()用于添加文本内容。output()将生成的PDF文件保存到本地。
  • 易错点提示:新手可能会忘记调用add_page(),导致PDF文件为空。另外,multi_cell()用于处理多行文本,而cell()只能处理单行文本。

学以致用:如何修改代码,让PDF文件包含一个标题和一个段落?

3. 异常处理
# 功能说明:异常处理
try:element = driver.find_element_by_xpath("some_xpath")
except NoSuchElementException:print("Element not found!")
except TimeoutException:print("Page load timed out!")
  • 技术原理:异常处理就像一个“代码安全气囊”,当代码运行过程中出现错误时,可以捕获异常并进行处理,避免程序崩溃。
  • 参数作用try块中包含可能会出错的代码,except块用于捕获特定类型的异常,并执行相应的处理逻辑。
  • 易错点提示:新手可能会忘记捕获异常,导致程序在出错时直接崩溃。另外,捕获异常时需要明确异常类型,否则可能会隐藏其他问题。

学以致用:如何捕获并处理ValueError异常?

流程图

开始
打开网页
等待页面加载
获取问题信息
生成PDF文件
保存PDF文件
三、扩展应用场景开发
场景一:自动收集在线课程信息

场景痛点:学习者需要手动从多个在线教育平台(如Coursera、网易云课堂)上查找课程信息,效率低下且容易遗漏。

技术选型对比

  • 手动查找:效率低,容易出错。
  • Selenium爬虫:自动化收集信息,效率高。

代码改进示范

# 自动收集在线课程信息
from selenium import webdriver
from fpdf import FPDFdef collect_courses(url, course_count):driver = webdriver.Chrome(options=options)driver.get(url)courses = []for i in range(1, course_count + 1):course_name = driver.find_element_by_xpath(f"//div[@class='course-listing'][{i}]/h2").textcourse_link = driver.find_element_by_xpath(f"//div[@class='course-listing'][{i}]/a").get_attribute("href")courses.append((course_name, course_link))driver.quit()return coursesdef generate_pdf(courses):pdf = FPDF()pdf.add_page()pdf.set_font("Arial", size=15)for course in courses:pdf.cell(200, 10, txt=course[0], ln=1, align='C')pdf.cell(200, 10, txt=course[1], ln=1, align='L')pdf.output("courses.pdf")courses = collect_courses("https://www.coursera.org/courses", 10)
generate_pdf(courses)

学以致用:如何修改代码,让爬虫从网易云课堂收集课程信息?

圈景二:自动化生成简历

场景痛点:求职者需要手动整理简历内容,格式不统一且效率低下。

技术选型对比

  • 手动编辑:效率低,格式难以统一。
  • FPDF生成PDF简历:自动化生成,格式统一。

代码改进示范

# 自动化生成简历
from fpdf import FPDFdef generate_resume(name, position, experience):pdf = FPDF()pdf.add_page()pdf.set_font("Arial", size=20)pdf.cell(200, 10, txt=name, ln=1, align='C')pdf.set_font("Arial", size=15)pdf.cell(200, 10, txt=position, ln=1, align='L')pdf.set_font("Arial", size=12)for exp in experience:pdf.multi_cell(200, 10, txt=exp, align='L')pdf.output("resume.pdf")generate_resume("张三", "软件工程师", ["2022-2024: 某公司,开发项目A", "2020-2022: 某公司,开发项目B"])

学以致用:如何修改代码,让简历包含教育背景信息?

四、总结

这篇文章通过一个Python爬虫程序,展示了如何利用Selenium自动化网页操作、FPDF生成PDF文件以及异常处理来解决实际问题。无论是自动收集编程题目、在线课程信息,还是生成简历,都可以通过这种方式快速实现。这个案例的完整源码已开源在我的GitCode仓库,可自行搜索下载。不会玩GitCode仓库的,可到这里下载:[链接] https://pan.quark.cn/s/654cf649e5a6 提取码:f5VG

http://www.xdnf.cn/news/5998.html

相关文章:

  • 力扣刷题Day 48:盛最多水的容器(283)
  • Linux操作系统中的SOCKET相关 - Socket字节序调整与网络传输
  • Kubernetes 标签和注解
  • 【软件测试】第一章·软件测试概述
  • 行动算子(知识)
  • GZip+Base64压缩字符串在ios上解压报错问题解决(安卓、PC模拟器正常)
  • 服务器中存储空间不足该怎么办?
  • IP协议的特性
  • 大白话解释联邦学习
  • skolelinux系统详解
  • Proxmox VE 8.4.0显卡直通完整指南:NVIDIA Tesla T4 实战
  • 什么是懒加载?
  • 06_java常见集合类底层实现
  • unity 制作某个旋转动画
  • 分割一切(SAM) 论文阅读:Segment Anything
  • 用vue和go实现登录加密
  • 科研领域开源情报应用:从全球信息网络到创新决策
  • 微机原理|| 流水灯实验
  • 两种常见的C语言实现64位无符号整数乘以64位无符号整数的实现方法
  • 【嵌入式】记一次解决VScode+PlatformIO安装卡死的经历
  • Apifox使用方法
  • Xianyu AutoAgent,AI闲鱼客服机器人
  • 无人机信号监测系统技术解析
  • codeforcesE. Anna and the Valentine‘s Day Gift
  • 在 STM32 上使用 register 关键字
  • 部署大模型:解决ollama.service: Failed with result ‘exit-code‘的问题
  • ROS多机集群组网通信(四)——Ubuntu 20.04图形化配置 Ad-Hoc组网通信指南
  • element-plus自动导入插件
  • 使用DevEco Studio性能分析工具高效解决鸿蒙原生应用内存问题
  • python的命令库Envoy