├── runtime.txt ├── utils ├── runtime.txt └── status_code_file.py ├── images ├── cat.png ├── Screenshot 2021-12-04 233606.png └── Screenshot 2021-12-04 233631.png ├── Proxy ├── __pycache__ │ └── proxies.cpython-39.pyc └── proxies.py ├── requirements.txt ├── idea ├── misc.xml ├── inspectionProfiles │ └── profiles_settings.xml ├── modules.xml ├── pythonProject1.iml └── workspace.xml ├── Ethio_jobs ├── ethio_jobs.py └── deeptable.py ├── main.py └── README.md /runtime.txt: -------------------------------------------------------------------------------- 1 | python == 3.9.0 -------------------------------------------------------------------------------- /utils/runtime.txt: -------------------------------------------------------------------------------- 1 | python==3.9.0 -------------------------------------------------------------------------------- /images/cat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdimk/ethiojobs/HEAD/images/cat.png -------------------------------------------------------------------------------- /Proxy/__pycache__/proxies.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdimk/ethiojobs/HEAD/Proxy/__pycache__/proxies.cpython-39.pyc -------------------------------------------------------------------------------- /images/Screenshot 2021-12-04 233606.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdimk/ethiojobs/HEAD/images/Screenshot 2021-12-04 233606.png -------------------------------------------------------------------------------- /images/Screenshot 2021-12-04 233631.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abdimk/ethiojobs/HEAD/images/Screenshot 2021-12-04 233631.png -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | requests==2.26.0 2 | urllib3==1.26.7 3 | matplotlib==3.5.0 4 | beautifulsoup4==4.10.0 5 | numpy==1.21.2 6 | lxml==4.6.4 -------------------------------------------------------------------------------- /idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /idea/pythonProject1.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Proxy/proxies.py: -------------------------------------------------------------------------------- 1 | try: 2 | import requests 3 | from bs4 import BeautifulSoup 4 | import random 5 | except Exception as e: 6 | print('some thing went wrong{}'.format(e)) 7 | 8 | 9 | def get_proxy(): 10 | url = 'https://www.sslproxies.org/' 11 | r = requests.get(url) 12 | soup = BeautifulSoup(r.content, 'lxml') 13 | return {'https': random.choice(list(map(lambda x: x[0] + ':' + x[1], list( 14 | zip(map(lambda x: x.text, soup.findAll('td')[::8]), map(lambda x: x.text, soup.findAll('td')[1::8]))))))} 15 | 16 | 17 | get_proxy() 18 | 19 | 20 | def proxy_request(request_type, url, data, **kwargs): 21 | while 1: 22 | try: 23 | proxy = get_proxy() 24 | r = requests.request(request_type, url, proxies=proxy, timeout=5, **kwargs) 25 | break 26 | except: 27 | pass 28 | 29 | return r 30 | -------------------------------------------------------------------------------- /utils/status_code_file.py: -------------------------------------------------------------------------------- 1 | class HttpCodeError(Exception): 2 | pass 3 | 4 | 5 | def http_status(request): 6 | HTTP = {'OK': 200, 'ACCEPTED': 202,'NON_AUTHORITATIVE_INFORMATION': 203, 'NO_CONTENT': 204, 'NOT_MODIFIED': 304, 7 | 'USE_PROXY': 305, 'TEMPORARY_REDIRECT': 307, 'PERMANENT_REDIRECT': 308, 'BAD_REQUEST': 400, 8 | 'UNAUTHORIZED': 402, 'FORBIDDEN': 403, 'NOT_FOUND': 404, 'NOT_ACCEPTABLE': 406, 9 | 'PROXY_AUTHENTICATION_REQUIRED': 407, 'REQUEST_TIMEOUT': 408, 'MISDIRECTED_REQUEST': 421, 10 | 'UPGRADE_REQUIRED': 426, 'TOO_MANY_REQUESTS': 429, 'NETWORK_AUTHENTICATION_REQUIRED': 511} 11 | for key, value in HTTP.items(): 12 | if request == value: 13 | return key 14 | else: 15 | pass 16 | #https: // docs.python.org / 3 / library / http.html # http-status-codes 17 | ''' 18 | {200:'OK',202:'ACCEPTED', 19 | 203:'NON_AUTHORITATIVE_INFORMATION', 20 | 204:'NO_CONTENT',304:'NOT_MODIFIED', 21 | 305:'USE_PROXY',307:'TEMPORARY_REDIRECT', 22 | 308:'PERMANENT_REDIRECT',400:'BAD_REQUEST', 23 | 402:'UNAUTHORIZED',403:'FORBIDDEN', 24 | 404:'NOT_FOUND',406:'NOT_ACCEPTABLE', 25 | 407:'PROXY_AUTHENTICATION_REQUIRED',408:'REQUEST_TIMEOUT', 26 | 421:'MISDIRECTED_REQUEST',426:'UPGRADE_REQUIRED', 27 | 429:'TOO_MANY_REQUESTS',502:'BAD_GATEWAY', 28 | 505:'HTTP_VERSION_NOT_SUPPORTED',511:'NETWORK_AUTHENTICATION_REQUIRED'} 29 | ''' 30 | 31 | -------------------------------------------------------------------------------- /Ethio_jobs/ethio_jobs.py: -------------------------------------------------------------------------------- 1 | from pprint import pprint 2 | from urllib.request import Request, urlopen 3 | from bs4 import BeautifulSoup 4 | from utils import status_code_file 5 | import requests as http_request 6 | from Proxy import proxies 7 | from matplotlib import pyplot 8 | import lxml 9 | 10 | class EthioJobs(object): 11 | def __init__(self,query): 12 | self.query = query 13 | self.words = self.query.split() 14 | self.sent_str = "" 15 | for i in self.words: 16 | self.sent_str += str(i) + "+" 17 | self.sent_str = self.sent_str[:-1] 18 | self.url = f'https://www.ethiojobs.net/search-results-jobs/?action=search&listing_type%5Bequal%5D=Job&keywords%5Ball_words%5D={self.sent_str}' 19 | self.status_code = urlopen(self.url).getcode() 20 | self.req = Request(self.url, headers={'User-Agent': 'Mozilla/5.0'}) 21 | 22 | def __str__(self): 23 | return str(self.sent_str) 24 | 25 | def show_status(self): 26 | #my_proxy = proxies.get_proxy() 27 | #status_code = http_request.get(self.url,proxies=urllib.request.getproxies()) 28 | #status_code = urlopen(self.url).getcode() 29 | http_request_response = status_code_file.http_status(int(self.status_code)) 30 | return http_request_response 31 | 32 | def numberofjobs(self): 33 | req = Request(self.url, headers={'User-Agent': 'Mozilla/5.0'}) 34 | webpage = urlopen(req).read() 35 | soup = BeautifulSoup(webpage, 'lxml') 36 | number_of_jobs = soup.find_all('span', class_='pull-left sp-right') 37 | for number_of_job in number_of_jobs: 38 | try: 39 | if (int(number_of_job.text) == None or int(number_of_job.text) == 0): 40 | print('\n') 41 | except ValueError: 42 | print('No jobs found!') 43 | else: 44 | return(f'{int(number_of_job.text)} {self.query} jobs has been found!') 45 | def scraped_jobs_title(self): 46 | req = Request(self.url, headers={'User-Agent': 'Mozilla/5.0'}) 47 | webpage = urlopen(req).read() 48 | soup = BeautifulSoup(webpage, 'lxml') 49 | job_titles_list = [] 50 | job_titles = soup.find_all('h2') 51 | for job in job_titles: 52 | job_titles_list.append(job.text) 53 | return job_titles_list 54 | def scraped_campany_names(self): 55 | req = Request(self.url, headers={'User-Agent': 'Mozilla/5.0'}) 56 | webpage = urlopen(req).read() 57 | soup = BeautifulSoup(webpage, 'lxml') 58 | campany_names = [] 59 | refine_search = soup.find_all('a', class_="company-name") 60 | for campany_names_title in refine_search: 61 | campany_names.append(campany_names_title.text) 62 | return campany_names 63 | def job_over_all(self): 64 | req = Request(self.url, headers={'User-Agent': 'Mozilla/5.0'}) 65 | webpage = urlopen(req).read() 66 | soup = BeautifulSoup(webpage, 'lxml') 67 | job_over_all = soup.find_all('span', class_='captions-field') 68 | job_over_all_list = [] 69 | for over_all in job_over_all: 70 | job_over_all_list.append(over_all.text.strip()) 71 | return job_over_all_list 72 | 73 | def scraped_campany_jobs_dead_line(self): 74 | req = Request(self.url, headers={'User-Agent': 'Mozilla/5.0'}) 75 | webpage = urlopen(req).read() 76 | soup = BeautifulSoup(webpage, 'lxml') 77 | dead_line_list = [] 78 | dates = soup.find_all('span', class_='text-danger captions-field') 79 | for date in dates: 80 | dead_line_list.append(date.text) 81 | return dead_line_list 82 | def scraped_campany_jobs_info(self): 83 | req = Request(self.url, headers={'User-Agent': 'Mozilla/5.0'}) 84 | webpage = urlopen(req).read() 85 | soup = BeautifulSoup(webpage, 'lxml') 86 | show_brief_list = [] 87 | show_brief = soup.find_all('div', class_='show-brief') 88 | for i in show_brief: 89 | show_brief_list.append(i.text) 90 | 91 | show_brief_list.pop(0) 92 | return show_brief_list 93 | def scraped_campany_jobs_links(self): 94 | req = Request(self.url, headers={'User-Agent': 'Mozilla/5.0'}) 95 | webpage = urlopen(req).read() 96 | soup = BeautifulSoup(webpage, 'lxml') 97 | links = [] 98 | view_job_list = soup.find_all('div', class_='listing-links') 99 | for i in view_job_list: 100 | links.append(i.a.get('href')) 101 | 102 | return links 103 | 104 | -------------------------------------------------------------------------------- /Ethio_jobs/deeptable.py: -------------------------------------------------------------------------------- 1 | from pprint import pprint 2 | from urllib.request import Request, urlopen 3 | from bs4 import BeautifulSoup 4 | from utils import status_code_file 5 | import requests as http_request 6 | from Proxy import proxies 7 | from datetime import date 8 | from matplotlib import pyplot as plt 9 | import lxml 10 | 11 | class TableData(object): 12 | def __init__(self): 13 | self.main_url = 'https://www.ethiojobs.net/' 14 | self.daily_url = 'https://www.ethiojobs.net/search-results-jobs/?searchId=1638535666.0806&action=search&page=1&listings_per_page=100&view=list' 15 | self.req = Request(self.main_url, headers={'User-Agent': 'Mozilla/5.0'}) 16 | self.webpage = webpage = urlopen(self.req).read() 17 | self.soup = BeautifulSoup(self.webpage, 'lxml') 18 | # WARRING DON'T MODIFY THIS FUNCTION 19 | def jobs_by_catagory(self): 20 | #req = Request(self.main_url, headers={'User-Agent': 'Mozilla/5.0'}) 21 | #webpage = urlopen(req).read() 22 | #soup = BeautifulSoup(webpage, 'lxml') 23 | scrape_jobs = self.soup.find_all('a', class_='list-group-item') 24 | scarpe_jobs_number = self.soup.find_all('span', class_='badge badge-blue pull-right') 25 | # current on demand jobs 26 | all_jobs = [] 27 | number_of_jobs = [] 28 | links_of_jobs = [] 29 | 30 | for jobs in scrape_jobs: 31 | all_jobs.append(jobs.h4.text) 32 | 33 | for sjn in scarpe_jobs_number: 34 | number_of_jobs.append(sjn.text) 35 | 36 | for links_of_job in scrape_jobs: 37 | links_of_jobs.append(links_of_job.get('href')) 38 | 39 | total_jobs = zip(all_jobs, number_of_jobs, links_of_jobs) 40 | return list(total_jobs) 41 | 42 | def latest_goverment_jobs(self): 43 | #req = Request(self.main_url, headers={'User-Agent': 'Mozilla/5.0'}) 44 | #webpage = urlopen(req).read() 45 | #soup = BeautifulSoup(webpage, 'lxml') 46 | latest_jobs = [] 47 | aw = self.soup.find_all('a', target="_blank") 48 | 49 | for i in aw: 50 | latest_jobs.append(i.text) 51 | rez = [] 52 | for x in latest_jobs: 53 | rez.append(x.replace("\n", "")) 54 | 55 | while ("" in rez): 56 | rez.remove("") 57 | 58 | rez.pop(0) 59 | rez.pop(-1) 60 | rez.pop() 61 | zz = [] 62 | for iw in rez: 63 | zz.append(iw) 64 | 65 | aw_time = self.soup.find_all('span', class_="pull-right") 66 | # time_stamp 67 | time_stamp = [] 68 | ts = [] 69 | for i in aw_time: 70 | time_stamp.append(i.text) 71 | 72 | for ix in time_stamp: 73 | if not ix.isdigit() and ix != 'Today' and ix != 'Yesterday': 74 | ts.append(ix) 75 | 76 | # more info 77 | aw_more = self.soup.find_all('p', class_="no-marign") 78 | no_margin_text = [] 79 | no_margin_text_b = [] 80 | rex = [] 81 | for i in aw_more: 82 | no_margin_text.append(i.text) 83 | for y in no_margin_text: 84 | no_margin_text_b.append(y.replace("\t", "")) 85 | 86 | while ("" in no_margin_text_b): 87 | no_margin_text_b.remove("") 88 | 89 | ngrock_man = [] 90 | for ngrok in no_margin_text_b: 91 | ngrock_man.append(ngrok.strip()) 92 | 93 | # print(ngrock_man) 94 | return list(zip(zz, ts, ngrock_man)) 95 | 96 | def jobs_by_location(self): 97 | #req = Request(self.main_url, headers={'User-Agent': 'Mozilla/5.0'}) 98 | #webpage = urlopen(req).read() 99 | #soup = BeautifulSoup(webpage, 'lxml') 100 | catagory = [] 101 | catagory_jobs_numbers = [] 102 | aw = self.soup.find_all('td') 103 | for i in aw: 104 | try: 105 | catagory_jobs_numbers.append(i.a.span.text) 106 | catagory.append(i.a.h4.text) 107 | except AttributeError: 108 | pass 109 | return (list(zip(catagory, catagory_jobs_numbers))) 110 | 111 | def pyplot_job_by_location_basic(self): 112 | #req = Request(self.main_url, headers={'User-Agent': 'Mozilla/5.0'}) 113 | #webpage = urlopen(req).read() 114 | #soup = BeautifulSoup(webpage, 'lxml') 115 | catagory = [] 116 | catagory_jobs_numbers = [] 117 | plot_loction = [] 118 | aw = self.soup.find_all('td') 119 | for i in aw: 120 | try: 121 | catagory_jobs_numbers.append(i.a.span.text) 122 | catagory.append(i.a.h4.text) 123 | except AttributeError: 124 | pass 125 | for location in catagory: 126 | plot_loction.append(location.split('Jobs in ')[-1]) 127 | plot_loction.reverse() 128 | real_numbers = [int(i) for i in catagory_jobs_numbers] 129 | plt.ylabel('Locations') 130 | plt.xlabel('Number of Jobs') 131 | plt.title('Jobs By Loaction') 132 | plt.plot(real_numbers,plot_loction) 133 | plt.legend(f'{date.today().year}') 134 | return plt.show() 135 | def pyplot_job_by_location_bar(self): 136 | #req = Request(self.main_url, headers={'User-Agent': 'Mozilla/5.0'}) 137 | #webpage = urlopen(req).read() 138 | #soup = BeautifulSoup(webpage, 'lxml') 139 | catagory = [] 140 | catagory_jobs_numbers = [] 141 | plot_loction = [] 142 | aw = self.soup.find_all('td') 143 | for i in aw: 144 | try: 145 | catagory_jobs_numbers.append(i.a.span.text) 146 | catagory.append(i.a.h4.text) 147 | except AttributeError: 148 | pass 149 | for location in catagory: 150 | plot_loction.append(location.split('Jobs in ')[-1]) 151 | plot_loction.reverse() 152 | real_numbers = [int(i) for i in catagory_jobs_numbers] 153 | plt.ylabel('Locations') 154 | plt.xlabel('Number of Jobs') 155 | plt.title('Jobs By Loaction') 156 | #plt.figure(figsize=(17, 7)) 157 | plt.bar(real_numbers, plot_loction) 158 | plt.legend(f'{date.today().year}') 159 | return plt.show() 160 | 161 | def pyplot_job_by_location_pie(self): 162 | #req = Request(self.main_url, headers={'User-Agent': 'Mozilla/5.0'}) 163 | #webpage = urlopen(req).read() 164 | #soup = BeautifulSoup(webpage, 'lxml') 165 | catagory = [] 166 | catagory_jobs_numbers = [] 167 | plot_loction = [] 168 | aw = self.soup.find_all('td') 169 | for i in aw: 170 | try: 171 | catagory_jobs_numbers.append(i.a.span.text) 172 | catagory.append(i.a.h4.text) 173 | except AttributeError: 174 | pass 175 | for location in catagory: 176 | plot_loction.append(location.split('Jobs in ')[-1]) 177 | 178 | real_numbers = [int(i) for i in catagory_jobs_numbers] 179 | plt.title('Jobs By Loaction') 180 | plt.pie(real_numbers,labels=plot_loction,radius = 100000, frame = True,shadow = True) 181 | plt.legend() 182 | return plt.show() 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | -------------------------------------------------------------------------------- /idea/workspace.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 58 | 59 | 60 | 79 | 80 | 81 | 100 | 101 | 102 | 121 | 122 | 123 | 142 | 143 | 144 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 1638263433494 178 | 182 | 183 | 184 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | ''' 2 | Easy start 3 | ''' 4 | from Ethio_jobs.ethio_jobs import EthioJobs 5 | from Ethio_jobs.deeptable import TableData 6 | from Proxy import proxies 7 | from pprint import pprint 8 | 9 | #uses 10 | 11 | # to search how many jobs are available in ethio jobs 12 | #create an instance of EthioJobs form EthioJobs class 13 | #my_job = EthioJobs('manager') 14 | # to get the title of all available mangment jobs 15 | #pprint(my_job.scraped_jobs_title()) 16 | ''' 17 | out put should be list of all job titles 18 | ['ACCOUNTANT ', 19 | 'Accountant ( COST ACCOUNTANT ; FACTORY EXP MUST) ', 20 | 'Marketing Department Manger ', 21 | 'Project Director ', 22 | 'Manager - ERP Management and Support ', 23 | 'Import and Export Coordinator ', 24 | 'Hygiene & Sanitation Officer ', 25 | 'Tender Division Manager ', 26 | 'WASH Project Coordinator ', 27 | 'Immediate Vacancy - Program Officer – Operation '] 28 | 29 | ''' 30 | # To get the campany names only 31 | my_job = EthioJobs('manager') 32 | pprint(my_job.scraped_campany_names(),indent=3) 33 | ''' 34 | out put shoud be 35 | ['Abays Trading PLC', 36 | 'Abays Trading PLC', 37 | 'Abays Trading PLC', 38 | 'Abays Trading PLC', 39 | 'Gift Real Estate P.L.C', 40 | 'Gift Real Estate P.L.C', 41 | 'Geneva Global', 42 | 'Geneva Global', 43 | 'Safaricom Telecommunications Ethiopia PLC', 44 | 'Safaricom Telecommunications Ethiopia PLC', 45 | 'Senselet Food Processing PLC', 46 | 'Senselet Food Processing PLC', 47 | 'The Lutheran World Federation World Service - Ethiopia', 48 | 'The Lutheran World Federation World Service - Ethiopia', 49 | 'Gift Real Estate P.L.C', 50 | 'Gift Real Estate P.L.C', 51 | 'Plan International Ethiopia', 52 | 'Plan International Ethiopia', 53 | 'Cuso International', 54 | 'Cuso International'] 55 | ''' 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | #my_job = EthioJobs('manager') 71 | #pprint(my_job.scraped_campany_jobs_dead_line()) 72 | ''' 73 | ['Dec 14, 2021', 74 | 'Dec 14, 2021', 75 | 'Dec 11, 2021', 76 | 'Dec 13, 2021', 77 | 'Dec 10, 2021', 78 | 'Dec 13, 2021', 79 | 'Dec 13, 2021', 80 | 'Dec 11, 2021', 81 | 'Dec 10, 2021', 82 | 'Dec 14, 2021'] 83 | 84 | ''' 85 | #my_job = EthioJobs('manager') 86 | #pprint(my_job.scraped_campany_jobs_info()) 87 | ''' 88 | [' Summary of Role and Responsibilities Will be responsible for all ' 89 | 'financial and of the company and will report to and work closely with, the ' 90 | 'company management team. Finance Management Overall responsibility ' 91 | 'for all aspects of financial management and control. Effective financial ' 92 | 'reporting for the company, in a timely, accurate, relevant manner. ' 93 | 'Maintaining accounts general...', 94 | '', 95 | ' About Geneva Global Geneva Global is an international philanthropy ' 96 | 'advising company that provides strategic advice, independent research, ' 97 | 'active program and grant management, and impact measurement to individuals, ' 98 | 'foundations, companies, and other organizations. The company is a subsidiary ' 99 | 'of Global Impact, a trusted advisor, intermediary, and implementing partner ' 100 | 'in the international...', 101 | ' About Us Safaricom Telecommunications Ethiopia Plc is a company ' 102 | 'supporting Ethiopia’s digital transformation. As a member of the Vodacom ' 103 | 'family, we have a wealth of experience connecting over 334 million people ' 104 | 'globally and over 180 million people in Africa across our network. We look ' 105 | 'forward to partnering with Ethiopians as we build a new network in ' 106 | 'Ethiopia. We are setting the...', 107 | ' Introduction : Senselet imports some raw materials, spare parts, ' 108 | 'production consumables and specific equipment or vehicles for projects .The ' 109 | 'import and export coordinator is responsible for managing the import and the ' 110 | 'export of the company, in particular the follow up of all imported and ' 111 | 'exported items, working together with procurement coordinator, Manage the ' 112 | 'customs cleaning process with...', 113 | ' Lutheran World Federation World Service Ethiopia is a registered foreign ' 114 | 'charity which has been operating in Ethiopia since 1973 implementing various ' 115 | 'development and humanitarian projects in different parts of Ethiopia. LWF ' 116 | 'Ethiopia works closely with the Ethiopian Evangelical Church Mekane Yesus ' 117 | '(EECMY), the Ethiopian Government, UN organizations and other funding ' 118 | 'partners.xa0 Its thematic...', 119 | '', 120 | ' Plan International is an independent child rights and humanitarian ' 121 | 'organisation committed to children living a life free of poverty, violence ' 122 | 'and injustice. We actively unite children, communities and other people ' 123 | 'who share our mission to make positive lasting changes in children’s and ' 124 | 'young people’s lives. We support children to gain the skills, knowledge and ' 125 | 'confidence they need to claim...', 126 | ' Summary Cuso International is a Canadian development non-profit ' 127 | 'organisation that works to reduce poverty and inequality through the efforts ' 128 | 'of highly skilled volunteers, collaborative partnerships and compassionate ' 129 | 'donors.xa0 Cuso International main areas of interventions are (i) ' 130 | 'harnessing the power of volunteerism to achieve the SDGs; (ii) advancing ' 131 | 'gender equality and the...'] 132 | ''' 133 | 134 | #to get over all information about your query 135 | #my_job = EthioJobs('manager') 136 | #pprint(my_job.job_over_all()) 137 | ''' 138 | ['Today', 139 | 'Dec 14, 2021', 140 | 'Abays Trading PLC', 141 | 'Addis Ababa', 142 | 'Senior Level (5+ years experience)', 143 | 'Dec 14, 2021', 144 | 'Today', 145 | 'Dec 14, 2021', 146 | 'Abays Trading PLC', 147 | 'sululta, Oromia', 148 | 'Mid Level ( 2+ - 5 years experience)', 149 | 'Dec 14, 2021', 150 | 'Yesterday', 151 | 'Dec 11, 2021', 152 | 'Gift Real Estate P.L.C', 153 | 'Addis ababa, Addis Ababa', 154 | 'Managerial Level (Manager, Supervisor, Director)', 155 | 'Dec 11, 2021', 156 | 'Yesterday', 157 | 'Dec 13, 2021', 158 | 'Geneva Global', 159 | 'Addis Ababa', 160 | 'Managerial Level (Manager, Supervisor, Director)', 161 | 'Dec 13, 2021', 162 | '2 days ago', 163 | 'Dec 10, 2021', 164 | 'Safaricom Telecommunications Ethiopia PLC', 165 | 'Addis Ababa', 166 | 'Managerial Level (Manager, Supervisor, Director)', 167 | 'Dec 10, 2021', 168 | '2 days ago', 169 | 'Dec 13, 2021', 170 | 'Senselet Food Processing PLC', 171 | 'Addis Ababa', 172 | 'Senior Level (5+ years experience)', 173 | 'Dec 13, 2021', 174 | '2 days ago', 175 | 'Dec 13, 2021', 176 | 'The Lutheran World Federation World Service - Ethiopia', 177 | 'Amhara region, Amhara', 178 | 'Mid Level ( 2+ - 5 years experience)', 179 | 'Dec 13, 2021', 180 | '2 days ago', 181 | 'Dec 11, 2021', 182 | 'Gift Real Estate P.L.C', 183 | 'addis ababa, Addis Ababa', 184 | 'Managerial Level (Manager, Supervisor, Director)', 185 | 'Dec 11, 2021', 186 | '2 days ago', 187 | 'Dec 10, 2021', 188 | 'Plan International Ethiopia', 189 | 'Gambela', 190 | 'Mid Level ( 2+ - 5 years experience)', 191 | 'Dec 10, 2021', 192 | '2 days ago', 193 | 'Dec 14, 2021', 194 | 'Cuso International', 195 | 'Addis Ababa', 196 | 'Senior Level (5+ years experience)', 197 | 'Dec 14, 2021'] 198 | ''' 199 | # to see new job by catagory 200 | #job = TableData() 201 | #pprint(job.jobs_by_catagory()) 202 | ''' 203 | [('Accounting and Finance Jobs', 204 | '53', 205 | 'https://www.ethiojobs.net/browse-by-category/Accounting%20and%20Finance/'), 206 | ('Admin, Secretarial and Cl... Jobs', 207 | '8', 208 | 'https://www.ethiojobs.net/browse-by-category/Admin%2C%20Secretarial%20and%20Clerical/'), 209 | ('Agriculture Jobs', 210 | '12', 211 | 'https://www.ethiojobs.net/browse-by-category/Agriculture/'), 212 | ('Architecture and Construc... Jobs', 213 | '1', 214 | 'https://www.ethiojobs.net/browse-by-category/Architecture%20and%20Construction/'), 215 | ('Automotive Jobs', 216 | '1', 217 | 'https://www.ethiojobs.net/browse-by-category/Automotive/'), 218 | ('Banking and Insurance Jobs', 219 | '8', 220 | 'https://www.ethiojobs.net/browse-by-category/Banking%20and%20Insurance/'), 221 | ('Business Development Jobs', 222 | '13', 223 | 'https://www.ethiojobs.net/browse-by-category/Business%20Development/'), 224 | ('Business and Administration Jobs', 225 | '35', 226 | 'https://www.ethiojobs.net/browse-by-category/Business%20and%20Administration/'), 227 | ('Communications, PR and Jo... Jobs', 228 | '3', 229 | 'https://www.ethiojobs.net/browse-by-category/Communications%2C%20PR%20and%20Journalism/'), 230 | ('Community Service Jobs', 231 | '5', 232 | 'https://www.ethiojobs.net/browse-by-category/Community%20Service/'), 233 | ('Consultancy and Training Jobs', 234 | '19', 235 | 'https://www.ethiojobs.net/browse-by-category/Consultancy%20and%20Training/'), 236 | ('Creative Arts Jobs', 237 | '1', 238 | 'https://www.ethiojobs.net/browse-by-category/Creative%20Arts/'), 239 | ('Customer Service Jobs', 240 | '1', 241 | 'https://www.ethiojobs.net/browse-by-category/Customer%20Service/'), 242 | ('Development and Project M... Jobs', 243 | '33', 244 | 'https://www.ethiojobs.net/browse-by-category/Development%20and%20Project%20Management/'), 245 | ('Economics Jobs', 246 | '16', 247 | 'https://www.ethiojobs.net/browse-by-category/Economics/'), 248 | ('Education Jobs', 249 | '8', 250 | 'https://www.ethiojobs.net/browse-by-category/Education/'), 251 | ('Engineering Jobs', 252 | '10', 253 | 'https://www.ethiojobs.net/browse-by-category/Engineering/'), 254 | ('Environment and Natural R... Jobs', 255 | '5', 256 | 'https://www.ethiojobs.net/browse-by-category/Environment%20and%20Natural%20Resource/'), 257 | ('Health Care Jobs', 258 | '27', 259 | 'https://www.ethiojobs.net/browse-by-category/Health%20Care/'), 260 | ('Hotel and Hospitality Jobs', 261 | '2', 262 | 'https://www.ethiojobs.net/browse-by-category/Hotel%20and%20Hospitality/'), 263 | ('Human Resource and Recrui... Jobs', 264 | '7', 265 | 'https://www.ethiojobs.net/browse-by-category/Human%20Resource%20and%20Recruitment/'), 266 | ('Information Technology Jobs', 267 | '7', 268 | 'https://www.ethiojobs.net/browse-by-category/Information%20Technology/'), 269 | ('Languages Jobs', 270 | '1', 271 | 'https://www.ethiojobs.net/browse-by-category/Languages/'), 272 | ('Legal Jobs', '6', 'https://www.ethiojobs.net/browse-by-category/Legal/'), 273 | ('Logistics, Transport and ... Jobs', 274 | '10', 275 | 'https://www.ethiojobs.net/browse-by-category/Logistics%2C%20Transport%20and%20Supply%20Chain/'), 276 | ('Management Jobs', 277 | '21', 278 | 'https://www.ethiojobs.net/browse-by-category/Management/'), 279 | ('Manufacturing Jobs', 280 | '2', 281 | 'https://www.ethiojobs.net/browse-by-category/Manufacturing/'), 282 | ('Media and Journalism Jobs', 283 | '1', 284 | 'https://www.ethiojobs.net/browse-by-category/Media%20and%20Journalism/'), 285 | ('Natural Sciences Jobs', 286 | '7', 287 | 'https://www.ethiojobs.net/browse-by-category/Natural%20Sciences/'), 288 | ('Pharmaceutical Jobs', 289 | '3', 290 | 'https://www.ethiojobs.net/browse-by-category/Pharmaceutical/'), 291 | ('Purchasing and Procurement Jobs', 292 | '2', 293 | 'https://www.ethiojobs.net/browse-by-category/Purchasing%20and%20Procurement/'), 294 | ('Research and Development Jobs', 295 | '4', 296 | 'https://www.ethiojobs.net/browse-by-category/Research%20and%20Development/'), 297 | ('Retail, Wholesale and Dis... Jobs', 298 | '4', 299 | 'https://www.ethiojobs.net/browse-by-category/Retail%2C%20Wholesale%20and%20Distribution/'), 300 | ('Sales and Marketing Jobs', 301 | '17', 302 | 'https://www.ethiojobs.net/browse-by-category/Sales%20and%20Marketing/'), 303 | ('Science and Technology Jobs', 304 | '3', 305 | 'https://www.ethiojobs.net/browse-by-category/Science%20and%20Technology/'), 306 | ('Security Jobs', 307 | '5', 308 | 'https://www.ethiojobs.net/browse-by-category/Security/'), 309 | ('Social Sciences and Commu... Jobs', 310 | '39', 311 | 'https://www.ethiojobs.net/browse-by-category/Social%20Sciences%20and%20Community/'), 312 | ('Telecommunications Jobs', 313 | '1', 314 | 'https://www.ethiojobs.net/browse-by-category/Telecommunications/'), 315 | ('Veterinary Services Jobs', 316 | '2', 317 | 'https://www.ethiojobs.net/browse-by-category/Veterinary%20Services/'), 318 | ('Warehouse, Supply Chain a... Jobs', 319 | '10', 320 | 'https://www.ethiojobs.net/browse-by-category/Warehouse%2C%20Supply%20Chain%20and%20Distribution/'), 321 | ('Water and Sanitation Jobs', 322 | '5', 323 | 'https://www.ethiojobs.net/browse-by-category/Water%20and%20Sanitation/')] 324 | 325 | ''' 326 | 327 | 328 | 329 | 330 | # if you want to see latest available goverment jobs 331 | #job = TableData() 332 | #pprint(job.latest_goverment_jobs()) 333 | ''' 334 | [('Purchase Expert', 335 | ' 3 days ago', 336 | 'Ethiopian Trade Business Corporation Fruit and...'), 337 | ('Technical Assistant', ' 4 days ago', 'Wachemo University'), 338 | ('Technical Assistant', ' 4 days ago', 'Wachemo University'), 339 | ('Lecturer and Above', ' 4 days ago', 'Wachemo University'), 340 | ('Senior Technical Assistant', ' 4 days ago', 'Wachemo University'), 341 | ('Lecturer and Above', ' 4 days ago', 'Wachemo University'), 342 | ('Lecturer and Above', ' 4 days ago', 'Wachemo University'), 343 | ('Lecturer and Above', ' 4 days ago', 'Wachemo University'), 344 | ('Lecturer and Above', ' 4 days ago', 'Wachemo University'), 345 | ('Lecturer and Above', ' 4 days ago', 'Wachemo University')] 346 | ''' 347 | # available jobs by location 348 | #job = TableData() 349 | #pprint(job.jobs_by_location()) 350 | ''' 351 | [('Jobs in Addis Ababa', '132'), 352 | ('Jobs in Afar', '2'), 353 | ('Jobs in Amhara', '17'), 354 | ('Jobs in Benishangul Gumuz', '1'), 355 | ('Jobs in Dire Dawa', '2'), 356 | ('Jobs in Gambela', '5'), 357 | ('Jobs in Harari', '1'), 358 | ('Jobs in Oromia', '12'), 359 | ('Jobs in Sidama', '2'), 360 | ('Jobs in Somali', '4'), 361 | ('Jobs in SNNPR', '2'), 362 | ('Jobs in Tigray', '4')] 363 | ''' 364 | 365 | #to view pie plot graph in new avalible jobs by location 366 | job = TableData() 367 | pprint(job.pyplot_job_by_location_pie()) 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | ✨ EthioJobs✨ 3 |

4 |

5 | Search and Find Jobs in Ethiopia 6 |

7 |

8 | 9 | made-with-python 10 | 11 |

12 | Easy start 13 | 14 | 15 |

16 | 17 | ```yaml 18 | when you want to use this module always import those stuffs and use pprint function instend instead of defualt print fucntion. 19 | 20 | 21 | from Ethio_jobs.ethio_jobs import EthioJobs 22 | from Ethio_jobs.deeptable import TableData 23 | from Proxy import proxies 24 | from pprint import pprint 25 | ``` 26 | input code 27 | ```yaml 28 | uses 29 | 30 | To search how many jobs are available in ethio jobs 31 | create an instance of EthioJobs form EthioJobs class 32 | my_job = EthioJobs('manager') 33 | pprint(my_job.numberofjobs()) 34 | ``` 35 | output 36 | ```console 37 | 132 manager jobs has been found! 38 | ``` 39 | input code 40 | ```yaml 41 | To get the title of all available mangment jobs 42 | pprint(my_job.scraped_jobs_title(),indent=3) 43 | ``` 44 | output 45 | ```console 46 | ['ACCOUNTANT ','Accountant ( COST ACCOUNTANT ; FACTORY EXP MUST) ','Marketing Department Manger ', 47 | 'Project Director ','Manager - ERP Management and Support ','Import and Export Coordinator ', 48 | 'Hygiene & Sanitation Officer ','Tender Division Manager ','WASH Project Coordinator ', 49 | 'Immediate Vacancy - Program Officer – Operation '] 50 | ``` 51 | input code 52 | ```yaml 53 | To get the campany names only 54 | 55 | my_job = EthioJobs('manager') 56 | pprint(my_job.scraped_campany_names(),indent=3) 57 | ``` 58 | output 59 | ```console 60 | ['Abays Trading PLC','Abays Trading PLC','Abays Trading PLC', 61 | 'Abays Trading PLC','Gift Real Estate P.L.C','Gift Real Estate P.L.C', 62 | 'Geneva Global','Geneva Global','Safaricom Telecommunications Ethiopia PLC', 63 | 'Safaricom Telecommunications Ethiopia PLC','Senselet Food Processing PLC','Senselet Food Processing PLC', 64 | 'The Lutheran World Federation World Service - Ethiopia','The Lutheran World Federation World Service - Ethiopia', 65 | 'Gift Real Estate P.L.C','Gift Real Estate P.L.C','Plan International Ethiopia', 66 | 'Plan International Ethiopia','Cuso International','Cuso International'] 67 | ``` 68 | input code 69 | ```yaml 70 | To get dead line dates for query job 71 | N.B returns only dead link like a list object 72 | my_job = EthioJobs('manager') 73 | pprint(my_job.scraped_campany_jobs_dead_line(),indent=3) 74 | ``` 75 | 76 | output 77 | 78 | ```console 79 | ['Dec 14, 2021','Dec 14, 2021','Dec 11, 2021', 80 | 'Dec 13, 2021','Dec 10, 2021','Dec 13, 2021', 81 | 'Dec 13, 2021','Dec 11, 2021','Dec 10, 2021', 82 | 'Dec 14, 2021'] 83 | ``` 84 | input code 85 | ```yaml 86 | To get query campany jobs info 87 | 88 | my_job = EthioJobs('manager') 89 | pprint(my_job.scraped_campany_jobs_info()) 90 | ``` 91 | 92 | output 93 | ```console 94 | [' Summary of Role and Responsibilities Will be responsible for all ' 95 | 'financial and of the company and will report to and work closely with, the ' 96 | 'company management team. Finance Management Overall responsibility ' 97 | 'for all aspects of financial management and control. Effective financial ' 98 | 'reporting for the company, in a timely, accurate, relevant manner. ' 99 | 'Maintaining accounts general...', 100 | '', 101 | ' About Geneva Global Geneva Global is an international philanthropy ' 102 | 'advising company that provides strategic advice, independent research, ' 103 | 'active program and grant management, and impact measurement to individuals, ' 104 | 'foundations, companies, and other organizations. The company is a subsidiary ' 105 | 'of Global Impact, a trusted advisor, intermediary, and implementing partner ' 106 | 'in the international...', 107 | ' About Us Safaricom Telecommunications Ethiopia Plc is a company ' 108 | 'supporting Ethiopia’s digital transformation. As a member of the Vodacom ' 109 | 'family, we have a wealth of experience connecting over 334 million people ' 110 | 'globally and over 180 million people in Africa across our network. We look ' 111 | 'forward to partnering with Ethiopians as we build a new network in ' 112 | 'Ethiopia. We are setting the...', 113 | ' Introduction : Senselet imports some raw materials, spare parts, ' 114 | 'production consumables and specific equipment or vehicles for projects .The ' 115 | 'import and export coordinator is responsible for managing the import and the ' 116 | 'export of the company, in particular the follow up of all imported and ' 117 | 'exported items, working together with procurement coordinator, Manage the ' 118 | 'customs cleaning process with...', 119 | ' Lutheran World Federation World Service Ethiopia is a registered foreign ' 120 | 'charity which has been operating in Ethiopia since 1973 implementing various ' 121 | 'development and humanitarian projects in different parts of Ethiopia. LWF ' 122 | 'Ethiopia works closely with the Ethiopian Evangelical Church Mekane Yesus ' 123 | '(EECMY), the Ethiopian Government, UN organizations and other funding ' 124 | 'partners.xa0 Its thematic...', 125 | '', 126 | ' Plan International is an independent child rights and humanitarian ' 127 | 'organisation committed to children living a life free of poverty, violence ' 128 | 'and injustice. We actively unite children, communities and other people ' 129 | 'who share our mission to make positive lasting changes in children’s and ' 130 | 'young people’s lives. We support children to gain the skills, knowledge and ' 131 | 'confidence they need to claim...', 132 | ' Summary Cuso International is a Canadian development non-profit ' 133 | 'organisation that works to reduce poverty and inequality through the efforts ' 134 | 'of highly skilled volunteers, collaborative partnerships and compassionate ' 135 | 'donors.xa0 Cuso International main areas of interventions are (i) ' 136 | 'harnessing the power of volunteerism to achieve the SDGs; (ii) advancing ' 137 | 'gender equality and the...'] 138 | ``` 139 | input code 140 | ```yaml 141 | To get over all information about your query 142 | my_job = EthioJobs('manager') 143 | pprint(my_job.job_over_all(),indent=5) 144 | ``` 145 | output 146 | ```console 147 | ['Today','Dec 14, 2021','Abays Trading PLC','Addis Ababa','Senior Level (5+ years experience)','Dec 14, 2021', 148 | 'Today','Dec 14, 2021','Abays Trading PLC','sululta, Oromia','Mid Level ( 2+ - 5 years experience)','Dec 14, 2021', 149 | 'Yesterday','Dec 11, 2021','Gift Real Estate P.L.C','Addis ababa, Addis Ababa','Managerial Level (Manager, Supervisor, Director)','Dec 11, 2021', 150 | 'Yesterday','Dec 13, 2021','Geneva Global','Addis Ababa','Managerial Level (Manager, Supervisor, Director)','Dec 13, 2021', 151 | '2 days ago','Dec 10, 2021',,'Safaricom Telecommunications Ethiopia PLC',Addis Ababa','Managerial Level (Manager, Supervisor, Director)','Dec 10, 2021' 152 | '2 days ago','Dec 13, 2021','Senselet Food Processing PLC','Addis Ababa','Senior Level (5+ years experience)','Dec 13, 2021', 153 | '2 days ago','Dec 13, 2021','The Lutheran World Federation World Service - Ethiopia','Amhara region, Amhara','Mid Level ( 2+ - 5 years experience)','Dec 13, 2021', 154 | '2 days ago','Dec 11, 2021','Gift Real Estate P.L.C','addis ababa, Addis Ababa','Managerial Level (Manager, Supervisor, Director)','Dec 11, 2021', 155 | '2 days ago','Dec 10, 2021','Plan International Ethiopia','Gambela','Mid Level ( 2+ - 5 years experience)','Dec 10, 2021', 156 | '2 days ago','Dec 14, 2021','Cuso International','Addis Ababa','Senior Level (5+ years experience)','Dec 14, 2021'] 157 | 158 | 159 | ``` 160 | input code 161 | ```yaml 162 | To see new job by catagory 163 | job = TableData() 164 | pprint(job.jobs_by_catagory()) 165 | ``` 166 | output 167 | ```console 168 | [('Accounting and Finance Jobs', 169 | '53', 170 | 'https://www.ethiojobs.net/browse-by-category/Accounting%20and%20Finance/'), 171 | ('Admin, Secretarial and Cl... Jobs', 172 | '8', 173 | 'https://www.ethiojobs.net/browse-by-category/Admin%2C%20Secretarial%20and%20Clerical/'), 174 | ('Agriculture Jobs', 175 | '12', 176 | 'https://www.ethiojobs.net/browse-by-category/Agriculture/'), 177 | ('Architecture and Construc... Jobs', 178 | '1', 179 | 'https://www.ethiojobs.net/browse-by-category/Architecture%20and%20Construction/'), 180 | ('Automotive Jobs', 181 | '1', 182 | 'https://www.ethiojobs.net/browse-by-category/Automotive/'), 183 | ('Banking and Insurance Jobs', 184 | '8', 185 | 'https://www.ethiojobs.net/browse-by-category/Banking%20and%20Insurance/'), 186 | ('Business Development Jobs', 187 | '13', 188 | 'https://www.ethiojobs.net/browse-by-category/Business%20Development/'), 189 | ('Business and Administration Jobs', 190 | '35', 191 | 'https://www.ethiojobs.net/browse-by-category/Business%20and%20Administration/'), 192 | ('Communications, PR and Jo... Jobs', 193 | '3', 194 | 'https://www.ethiojobs.net/browse-by-category/Communications%2C%20PR%20and%20Journalism/'), 195 | ('Community Service Jobs', 196 | '5', 197 | 'https://www.ethiojobs.net/browse-by-category/Community%20Service/'), 198 | ('Consultancy and Training Jobs', 199 | '19', 200 | 'https://www.ethiojobs.net/browse-by-category/Consultancy%20and%20Training/'), 201 | ('Creative Arts Jobs', 202 | '1', 203 | 'https://www.ethiojobs.net/browse-by-category/Creative%20Arts/'), 204 | ('Customer Service Jobs', 205 | '1', 206 | 'https://www.ethiojobs.net/browse-by-category/Customer%20Service/'), 207 | ('Development and Project M... Jobs', 208 | '33', 209 | 'https://www.ethiojobs.net/browse-by-category/Development%20and%20Project%20Management/'), 210 | ('Economics Jobs', 211 | '16', 212 | 'https://www.ethiojobs.net/browse-by-category/Economics/'), 213 | ('Education Jobs', 214 | '8', 215 | 'https://www.ethiojobs.net/browse-by-category/Education/'), 216 | ('Engineering Jobs', 217 | '10', 218 | 'https://www.ethiojobs.net/browse-by-category/Engineering/'), 219 | ('Environment and Natural R... Jobs', 220 | '5', 221 | 'https://www.ethiojobs.net/browse-by-category/Environment%20and%20Natural%20Resource/'), 222 | ('Health Care Jobs', 223 | '27', 224 | 'https://www.ethiojobs.net/browse-by-category/Health%20Care/'), 225 | ('Hotel and Hospitality Jobs', 226 | '2', 227 | 'https://www.ethiojobs.net/browse-by-category/Hotel%20and%20Hospitality/'), 228 | ('Human Resource and Recrui... Jobs', 229 | '7', 230 | 'https://www.ethiojobs.net/browse-by-category/Human%20Resource%20and%20Recruitment/'), 231 | ('Information Technology Jobs', 232 | '7', 233 | 'https://www.ethiojobs.net/browse-by-category/Information%20Technology/'), 234 | ('Languages Jobs', 235 | '1', 236 | 'https://www.ethiojobs.net/browse-by-category/Languages/'), 237 | ('Legal Jobs', '6', 'https://www.ethiojobs.net/browse-by-category/Legal/'), 238 | ('Logistics, Transport and ... Jobs', 239 | '10', 240 | 'https://www.ethiojobs.net/browse-by-category/Logistics%2C%20Transport%20and%20Supply%20Chain/'), 241 | ('Management Jobs', 242 | '21', 243 | 'https://www.ethiojobs.net/browse-by-category/Management/'), 244 | ('Manufacturing Jobs', 245 | '2', 246 | 'https://www.ethiojobs.net/browse-by-category/Manufacturing/'), 247 | ('Media and Journalism Jobs', 248 | '1', 249 | 'https://www.ethiojobs.net/browse-by-category/Media%20and%20Journalism/'), 250 | ('Natural Sciences Jobs', 251 | '7', 252 | 'https://www.ethiojobs.net/browse-by-category/Natural%20Sciences/'), 253 | ('Pharmaceutical Jobs', 254 | '3', 255 | 'https://www.ethiojobs.net/browse-by-category/Pharmaceutical/'), 256 | ('Purchasing and Procurement Jobs', 257 | '2', 258 | 'https://www.ethiojobs.net/browse-by-category/Purchasing%20and%20Procurement/'), 259 | ('Research and Development Jobs', 260 | '4', 261 | 'https://www.ethiojobs.net/browse-by-category/Research%20and%20Development/'), 262 | ('Retail, Wholesale and Dis... Jobs', 263 | '4', 264 | 'https://www.ethiojobs.net/browse-by-category/Retail%2C%20Wholesale%20and%20Distribution/'), 265 | ('Sales and Marketing Jobs', 266 | '17', 267 | 'https://www.ethiojobs.net/browse-by-category/Sales%20and%20Marketing/'), 268 | ('Science and Technology Jobs', 269 | '3', 270 | 'https://www.ethiojobs.net/browse-by-category/Science%20and%20Technology/'), 271 | ('Security Jobs', 272 | '5', 273 | 'https://www.ethiojobs.net/browse-by-category/Security/'), 274 | ('Social Sciences and Commu... Jobs', 275 | '39', 276 | 'https://www.ethiojobs.net/browse-by-category/Social%20Sciences%20and%20Community/'), 277 | ('Telecommunications Jobs', 278 | '1', 279 | 'https://www.ethiojobs.net/browse-by-category/Telecommunications/'), 280 | ('Veterinary Services Jobs', 281 | '2', 282 | 'https://www.ethiojobs.net/browse-by-category/Veterinary%20Services/'), 283 | ('Warehouse, Supply Chain a... Jobs', 284 | '10', 285 | 'https://www.ethiojobs.net/browse-by-category/Warehouse%2C%20Supply%20Chain%20and%20Distribution/'), 286 | ('Water and Sanitation Jobs', 287 | '5', 288 | 'https://www.ethiojobs.net/browse-by-category/Water%20and%20Sanitation/')] 289 | ``` 290 | 291 | input code 292 | ```yaml 293 | To get latest available goverment jobs 294 | job = TableData() 295 | pprint(job.latest_goverment_jobs()) 296 | ``` 297 | output 298 | ```console 299 | [('Purchase Expert', 300 | ' 3 days ago', 301 | 'Ethiopian Trade Business Corporation Fruit and...'), 302 | ('Technical Assistant', ' 4 days ago', 'Wachemo University'), 303 | ('Technical Assistant', ' 4 days ago', 'Wachemo University'), 304 | ('Lecturer and Above', ' 4 days ago', 'Wachemo University'), 305 | ('Senior Technical Assistant', ' 4 days ago', 'Wachemo University'), 306 | ('Lecturer and Above', ' 4 days ago', 'Wachemo University'), 307 | ('Lecturer and Above', ' 4 days ago', 'Wachemo University'), 308 | ('Lecturer and Above', ' 4 days ago', 'Wachemo University'), 309 | ('Lecturer and Above', ' 4 days ago', 'Wachemo University'), 310 | ('Lecturer and Above', ' 4 days ago', 'Wachemo University')] 311 | ``` 312 | input code 313 | ```yaml 314 | To get available jobs by location 315 | job = TableData() 316 | pprint(job.jobs_by_location()) 317 | ``` 318 | ```console 319 | [('Jobs in Addis Ababa', '132'), 320 | ('Jobs in Afar', '2'), 321 | ('Jobs in Amhara', '17'), 322 | ('Jobs in Benishangul Gumuz', '1'), 323 | ('Jobs in Dire Dawa', '2'), 324 | ('Jobs in Gambela', '5'), 325 | ('Jobs in Harari', '1'), 326 | ('Jobs in Oromia', '12'), 327 | ('Jobs in Sidama', '2'), 328 | ('Jobs in Somali', '4'), 329 | ('Jobs in SNNPR', '2'), 330 | ('Jobs in Tigray', '4')] 331 | ``` 332 | 333 |

welcome to the intersting part live graph using matplotlib

334 | 335 | input code 336 | 337 | ```yaml 338 | To view pie plot graph in new avalible jobs by location 339 | job = TableData() 340 | pprint(job.pyplot_job_by_location_pie()) 341 | ``` 342 | output 343 | ```console 344 | None 345 | ``` 346 |

347 | 348 | made-with-python 349 | 350 | --------------------------------------------------------------------------------