【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
)可以让浏览器在后台运行,节省资源。WebDriverWait
和expected_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
异常?
流程图:
三、扩展应用场景开发
场景一:自动收集在线课程信息
场景痛点:学习者需要手动从多个在线教育平台(如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