首页 > 解决方案 > 跨类的多个实例仅调用一次函数

问题描述

我对 Python 和 Web Scraping 非常陌生,所以如果您可以改进我的代码并用您改进的版本进行回复,我们将不胜感激。

我正在从 Indeed 上抓取招聘信息(网络抓取 - selenium)并将它们导出到电子表格中。我想搜索 2 个工作:1. 软件工程师,2. 软件开发人员

我不想登录 Indeed 搜索“软件工程师职位”,然后再次登录搜索“软件开发人员职位”。我想调用这个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创建时: - 登录 Indeed - 搜索软件工程师职位

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

我想要:obj1创建时: - 登录 Indeed - 搜索软件工程师职位

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

所以......我'login_indeed'(1x)和'search_jobs'(2x)

谢谢

标签: pythonseleniumoopweb-scraping

解决方案


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

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')

推荐阅读