Python爬虫从掌握class(类)和def(函数)开始

       很多刚学 Python 的朋友会觉得“爬虫只是用 requests 发请求,用 BeautifulSoup 抓数据就好了”,但真正写出可维护、可复用、可扩展的爬虫,会不会使用类和方法以及函数是关键。

         本文将带你一起分析一个“图书信息录入 + 满减优惠系统”的完整示例,通过构建 BookBookBundle 两个类,以及定义的main()函数掌握实例化、方法调用、列表操作和异常处理的关键知识点

一、项目背景

         目标是让用户输入若干本书的信息,自动计算总价,并判断是否达到某个金额以享受折扣。比如满 200 元打 85 折。


二、代码功能总览

代码分为三个模块:

  1. Book 类:表示单本图书。

  2. BookBundle 类:表示一组图书并提供价格计算与优惠功能。

  3. main() 函数:负责用户交互,输入书籍信息并调用逻辑。


 三、详细代码讲解与知识点解析

1. Book 类定义

class Book:
    def __init__(self,book_name,author,price):   #__init__是创建Book的属性
        self.book_name=book_name                 #self指的是当前对象Book
        self.author=author
        self.price=price

    def display_info(self):                      #创建方法,展示图书信息
        print(f"{self.author}的{self.book_name}这本书的价格是{self.price}元!")

 知识点:

  • 创建Book(self,book_name,author,price)就是创建一个实例(对象)

  • 每本书都是Book的一个“实例”;

  • self.xxx是绑定在该对象上的属性。

  • f-string可以使得格式化更美观和便捷。


2. BookBundle 类定义

        为了能够同时进行多本书籍的信息统计,创建BookBundle类,来统计用户所购买的所有书籍的信息。包括计算所有书籍的价格总额,书籍优惠折扣等。

class BookBundle: def __init__(self,books): self.books=books
  • 定义BookBundle类用来接收一本或多本书组成的列表。

    def total_price(self):
       return sum(book.price for book in self.books)
  • 使用内置函数sum计算所有书的总价。

    def apply_discount(self,threshold=200,rate=0.8):  
                        #threshold是参与优惠的界限,200元以上才能有优惠。

        if self.total_price() >=threshold:     #对消费者的金额进行判断,是否能有优惠
            discounted=self.total_price()*rate  #计算优惠后的金额
            saved=self.total_price()-discounted  #计算为用户优惠了的金额
            print(f"您一共消费{self.total_price():.2f}元,已给您优惠{saved:.2f}元,您需要支付{discounted:.2f}元。")
        else:
            print(f"您总共消费{self.total_price():.2f}元,欢迎下次光临!")

知识点:

  • 方法调用:使用self.total_price() 可以在类内部访问另一个方法;

  • if 用于进行用户消费金额的判断,满足满减条件的金额就会执行if下面的语句,否则就会执行else语句。

  • if 语句中进行比较的数据,他们的数据类型(type)必须相同。

  • 格式化输出 :.2f 表示保留两位小数。


3. main() 函数:

定义main()主函数,独立于类存在,串联起之后用户输入的内容,从而调用上面已经创建好的Book、BookBundle类,实现较复杂的操作。

def main():
    book_list=[]
    try:           #防止因为用户输入错误,程序报错。如果用户输入错误,则会执行except语句。
        num=int(input("请输入您要添加的书籍数量:"))    
                        #下方的for语句会使用num,必须要将输入的string类型转成int类型
        for i in range(num):
            i += 1
            print(f"\n第{i}本书的信息是:")
            name=input("书的名称是:")
            author_name=input("作者的名字是:")
            book_price=float(input("这本书的价格是:"))
                                 #在循环中创建多个 Book 的数据。

     在main函数内部,创建实例之后,使用封装好的 display_info() 方法来显示图书信息,并将

每本书对象(使用append)存入列表,后面统一交给 BookBundle 处理。

            book = Book(name, author_name, book_price)  #创建Book实例
            book.display_info()
            book_list.append(book)

        bundle = BookBundle(book_list)
        bundle.apply_discount(threshold=200, rate=0.85)

    except ValueError:
        print("请输入正确的内容格式!")
  • 将所有书组成一个“图书集合” book_list 交给 BookBundle 管理,将用户所购买的所有书籍的信息进行处理。

  • 调用 apply_discount() 方法自动判断是否打折、打印优惠信息。

最后使用main()调用整个程序。

if __name__ == '__main__':
    main()

运行程序,实现的程序效果是:

Python爬虫从掌握class(类)和def(函数)开始_第1张图片

  易错点总结:

Python爬虫从掌握class(类)和def(函数)开始_第2张图片

        恭喜你成功学会了类和方法的使用,本文的内容看起来像“只是对书打个折”,实则是你日后写爬虫、写接口、写框架的必备基础!也总结了在代码编写过程中易出现的错误,希望能够帮助你写出更高效的代码!

你可能感兴趣的:(python,爬虫,开发语言,代码示例)