只在类的多个实例上调用函数一次

2024-10-03 09:14:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python和Web抓取非常陌生,所以如果您能改进我的代码并用改进的版本回复我,我将不胜感激

我正在从Google(web scraping-selenium)中抓取工作公告,并将其导出到电子表格中。 我想找两份工作:1。软件工程师,2。软件开发人员

我不想登录搜索“软件工程师工作”,然后再次登录搜索“软件开发人员工作”。我想调用这个login_indeed()函数一次,然后在每次创建类的新实例时调用所有其他函数,如search_jobs()

class IndeedJobScraper:
    def __init__(position, location):
        self.position = position
        self.location = location
    
    def login_indeed(self): # I WANT TO CALL THIS ONCE
        # input username and password
    
    def search_jobs(self)  
        # input job title and location into search boxes
    
    def retrieve_jobs(self)
        self.login()
        self.search_jobs()

if __name__ == '__main__':
    obj1 = IndeedJobScraper('Software Engineer', 'Ireland')
    obj1.retrieve_jobs()

    obj2 = IndeedJobScraper('Software Developer', 'Ireland')
    obj2.retrieve_jobs()
    

目前: 创建obj1时: -确实登录到 -寻找软件工程师职位

When `obj1` created:
- Login to Indeed
- Search for Software Engineer Jobs

我想: 创建obj1时: -确实登录到 -寻找软件工程师职位

When `obj2` created:
- ̶L̶o̶g̶i̶n̶ ̶t̶o̶ ̶I̶n̶d̶e̶e̶d̶
- Search for Software Engineer Jobs

所以。。。I“登录”(1x)和“搜索工作”(2x)

谢谢


Tags: selfsearch软件defjobspositionloginsoftware
2条回答

在构造函数中进行一次授权,创建一次对象,然后在需要时调用搜索方法。例如,我会这样写:

class IndeedJobScraper:
    def __init__(self):
        # input username and password
        pass
    
    def search_jobs(self, position, location)  
        # input job title and location into search boxes
    
    def retrieve_jobs(self, position, location)
        self.search_jobs(position, location)

if __name__ == '__main__':
    obj1 = IndeedJobScraper()
    obj1.retrieve_jobs('Software Engineer', 'Ireland')
    obj1.retrieve_jobs('Software Developer', 'Ireland')

根据@Carcigenicate的评论,您要做的是在__init__中有一个初始化为self.logged_in = False的属性。然后我会在login_indeed()函数中设置一个条件来检查logged_in == True,如果logged_in为False,则登录并更新属性。否则,如果它已登录,则继续执行该函数的其余部分

相关问题 更多 >