学习使用Django进行网页爬取取决于你对Python、Django框架和网络爬虫的熟悉程度。以下是一些关键点,总的来说,如果你已经具备Python和Django的基础知识,并对网页爬虫有一定了解,那么学习使用Django进行网页爬取将会比较容易。如果你是一个完全的初学者,那么可能需要更多的时间和努力来掌握所需的所有技能。不过,通过逐步学习和实践,这是完全可行的。比如我遇到得下面得问题以及我得应对方法。
问题背景
在Django代码中,遇到一个TypeError: ‘float’ object is not callable的错误。
这个错误发生在几个property装饰器的方法中,例如:
@property
def pmt_loaner_final(self):return float(self.pmt_loaner_new) + float(self.debit_fee)@property
def pmt_broker_final(self):return float(self.pmt_broker_new) + float(self.debit_fee)@property
def total_compounded_broker(self):return self.compounded_amount(self.brokerage_fees)@property
def total_compounded_loaner(self):return self.compounded_amount(self.amount)
这些property装饰器的方法试图将浮点数转换为整数,但由于浮点数不是可调用的对象,因此抛出TypeError: ‘float’ object is not callable的错误。
另外,在以下代码段中,也遇到了同样的错误:
@property
def discount(self):return self.final_credit_rate(self.pmt_loaner_final + self.pmt_broker_final,self.total_compounded_loaner + self.total_compounded_broker)
在该代码段中,试图将a+b和c+d的和作为实参传递给final_credit_rate方法,但是由于a+b和c+d都是浮点数,因此抛出TypeError: ‘float’ object is not callable的错误。
除此之外,还尝试使用final_pmt_without_withdrawal_fees和total_compounded作为实参传递给get_final_credit_rate方法,也遇到了同样的错误。
解决方案
对于这个问题,有两种可能的解决方案:
1、移除@property装饰器
如果不需要将这些方法作为property属性来使用,可以移除@property装饰器,并将这些方法定义为普通的函数。这样就可以直接调用这些方法,而不会抛出TypeError: ‘float’ object is not callable的错误。
2、使用括号调用property属性
如果需要将这些方法作为property属性来使用,可以使用括号来调用这些属性。例如:
discount = computation.final_credit_rate(computation.pmt_loaner_final() + computation.pmt_broker_final(),computation.total_compounded_loaner() + computation.total_compounded_broker()
)
通过使用括号来调用property属性,就可以避免TypeError: ‘float’ object is not callable的错误。
对于第二个问题,需要将a+b和c+d的和转换为整数,然后再作为实参传递给final_credit_rate方法。例如:
discount = computation.final_credit_rate(int(computation.pmt_loaner_final()) + int(computation.pmt_broker_final()),int(computation.total_compounded_loaner()) + int(computation.total_compounded_broker())
)
通过将a+b和c+d的和转换为整数,就可以避免TypeError: ‘float’ object is not callable的错误。
对于第三个问题,需要将final_pmt_without_withdrawal_fees和total_compounded转换为整数,然后再作为实参传递给get_final_credit_rate方法。例如:
final_credit_rate = computation.get_final_credit_rate(int(computation.final_pmt_without_withdrawal_fees()),int(computation.total_compounded())
)
通过将final_pmt_without_withdrawal_fees和total_compounded转换为整数,就可以避免TypeError: ‘float’ object is not callable的错误。
了解如何爬取网页(使用请求库如requests
)、解析HTML(使用解析库如BeautifulSoup
或lxml
)是必要的。这部分可以独立于Django学习。
网上有大量的教程和指南,这些资源可以帮助你学习Django和爬虫技术。理论学习之后,动手实践是非常重要的。通过实际编写和运行代码来加深理解。以上就是全部得内容,如果有更多学术探讨,欢迎评论区留言讨论。