Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 9ab85c0

Browse files
authoredMay 30, 2024
Merge pull request #386 from asibhossen897/main
Add Web Scraping Script for scraping jobs from devjobsscanner.com
2 parents 31dc911 + 13d14b8 commit 9ab85c0

9 files changed

+1003
-0
lines changed
 
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2024 Asib Hossen
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
# devJobScanner Job Scraper
2+
3+
## Description
4+
This repository contains two scripts designed to scrape job listings from a specified website. Users can input their desired job title, remote work preference, sorting preference, and choose how to save the output (CSV, TXT, or both).
5+
6+
## Scripts
7+
8+
### Script 1: `job_scraper_static.py`
9+
- Scrapes job listings using the `requests` library and `BeautifulSoup`.
10+
- Displays job details in the console.
11+
- Saves job details in CSV and/or TXT format.
12+
- Suitable for static page scraping.
13+
14+
### Script 2: `job_scraper_dynamic.py`
15+
- Enhanced to use `SeleniumBase` for dynamic page interaction.
16+
- Supports infinite scrolling to load more job listings.
17+
- Users can specify the number of job listings to scrape.
18+
- More robust handling of dynamically loaded content.
19+
20+
## Requirements
21+
22+
### Common Requirements
23+
- Python 3.x
24+
- `beautifulsoup4` library
25+
- `requests` library
26+
27+
### Dynamic Script Additional Requirements
28+
- `seleniumbase` library
29+
- WebDriver for your browser (e.g., ChromeDriver for Chrome)
30+
31+
## Installation
32+
1. Clone the repository:
33+
```bash
34+
git clone https://github.com/asibhossen897/devJobsScanner-job-scraper.git
35+
cd devJobsScanner-job-scraper
36+
```
37+
38+
2. Install the required libraries:
39+
```bash
40+
pip install -r requirements.txt
41+
```
42+
43+
3. For `job_scraper_dynamic.py`, ensure you have the appropriate WebDriver installed and available in your PATH.
44+
45+
## Usage
46+
47+
### Static Scraper (`job_scraper_static.py`)
48+
1. Run the script:
49+
```bash
50+
python job_scraper_static.py
51+
```
52+
(**If ```python``` does not work, use ```python3```**)
53+
54+
2. Follow the prompts to input your job search criteria and preferences.
55+
56+
### Dynamic Scraper (`job_scraper_dynamic.py`)
57+
1. Run the script:
58+
```bash
59+
python job_scraper_dynamic.py
60+
```
61+
(**If ```python``` does not work, use ```python3```**)
62+
63+
2. Follow the prompts to input your job search criteria, number of jobs to scrape, and preferences.
64+
65+
## File Structure
66+
- `job_scraper_static.py`: Script for static job scraping.
67+
- `job_scraper_dynamic.py`: Script for dynamic job scraping with SeleniumBase.
68+
- `requirements.txt`: List of required Python libraries.
69+
- `outputFiles/`: Directory where output files (CSV, TXT) are saved.
70+
71+
## Disclaimer
72+
These scripts are for educational and personal use only. Scraping websites can be against the terms of service of the website being scraped. Always check the website’s terms and conditions before scraping any content. The author is not responsible for any misuse of these scripts. Use at your own risk.
73+
74+
## License
75+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
76+
77+
## Author
78+
Asib Hossen
79+
80+
## Date
81+
May 21, 2024
Lines changed: 184 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,184 @@
1+
# Author: Asib Hossen
2+
# Date: May 21, 2024
3+
# Description: This script scrapes job listings from https://www.devjobsscanner.com/ based on user input, displays the job details, and optionally saves them as CSV and/or TXT files.
4+
# Version: 1.1
5+
6+
7+
import os
8+
import re
9+
import csv
10+
import time
11+
from seleniumbase import Driver
12+
from bs4 import BeautifulSoup
13+
14+
def get_user_input():
15+
"""
16+
Prompt user for job title, remote job preference, number of jobs to scrape,
17+
sorting preference, and save option.
18+
19+
Returns:
20+
tuple: A tuple containing job title (str), remote job preference (bool),
21+
number of jobs to scrape (int), save option (str), and sorting preference (str).
22+
"""
23+
job = input("Enter the job title: ")
24+
remote = input("Do you want remote jobs only? (yes/no): ").lower() == 'yes'
25+
num_jobs = int(input("Enter the number of jobs you want to scrape: "))
26+
sort_options = ['matches', 'newest', 'salary']
27+
print(f"Sort options: {sort_options}")
28+
sort_by = input("Enter the sorting preference (matches/newest/salary): ")
29+
save_option = input("Do you want to save the output as CSV, TXT, or both of them? (csv/txt/both): ").lower()
30+
return job, remote, num_jobs, save_option, sort_by
31+
32+
def construct_url(job, remote, sort_by):
33+
"""
34+
Construct the URL based on the job title, remote preference, and sorting preference.
35+
36+
Args:
37+
job (str): The job title.
38+
remote (bool): True if user wants remote jobs only, False otherwise.
39+
sort_by (str): The sorting preference.
40+
41+
Returns:
42+
str: The constructed URL.
43+
"""
44+
base_url = "https://www.devjobsscanner.com/search/"
45+
search_params = f"?search={job}"
46+
if remote is not None:
47+
search_params += f"&remote={str(remote).lower()}"
48+
if sort_by is not None:
49+
search_params += f"&sort={sort_by}"
50+
url = base_url + search_params
51+
return url
52+
53+
def scrape_jobs(url, num_jobs):
54+
"""
55+
Scrape job listings from the provided URL using SeleniumBase.
56+
57+
Args:
58+
url (str): The URL to scrape job listings from.
59+
num_jobs (int): The number of jobs to scrape.
60+
61+
Returns:
62+
list: A list of dictionaries containing job details.
63+
"""
64+
jobs = []
65+
try:
66+
driver = Driver(browser="Firefox", headless=False)
67+
driver.get(url)
68+
time.sleep(5) # Initial wait for page load
69+
70+
while len(jobs) < num_jobs:
71+
soup = BeautifulSoup(driver.page_source, 'html.parser')
72+
job_divs = soup.find_all('div', class_='flex p-3 rounded group relative overflow-hidden')
73+
74+
for job_div in job_divs:
75+
if len(jobs) >= num_jobs:
76+
break
77+
title = job_div.find('h2').text.strip()
78+
company = job_div.find('div', class_='jbs-dot-separeted-list').find('a').text.strip()
79+
tags = [tag.text.strip() for tag in job_div.find_all('a', class_='tag')]
80+
date_posted = job_div.find('span', class_='text-primary-text').text.strip()
81+
salary = job_div.find('span', class_='text-gray-text').text.strip()
82+
83+
# Check if the salary contains at least two digits
84+
if not re.search(r'\d{2}', salary):
85+
salary = "Not mentioned"
86+
87+
job_url = job_div.find('a', class_='jbs-text-hover-link')['href']
88+
89+
jobs.append({
90+
'title': title,
91+
'company': company,
92+
'company_url': f"https://www.devjobsscanner.com/company/{company.lower()}",
93+
'tags': tags,
94+
'date_posted': date_posted,
95+
'salary': salary,
96+
'job_url': job_url
97+
})
98+
99+
# Scroll down to load more jobs
100+
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
101+
time.sleep(5) # Wait for new jobs to load
102+
103+
driver.quit()
104+
return jobs[:num_jobs]
105+
except Exception as e:
106+
print("Error scraping jobs:", e)
107+
return []
108+
109+
def display_jobs(jobs):
110+
"""
111+
Display job details to the console.
112+
113+
Args:
114+
jobs (list): A list of dictionaries containing job details.
115+
"""
116+
for job in jobs:
117+
print(f"Title: {job['title']}")
118+
print(f"Company: {job['company']}")
119+
print(f"Company URL: {job['company_url']}")
120+
print(f"Tags: {', '.join(job['tags'])}")
121+
print(f"Date Posted: {job['date_posted']}")
122+
print(f"Salary: {job['salary']}")
123+
print(f"Job URL: {job['job_url']}")
124+
print("-" * 40)
125+
126+
def save_as_csv(jobs, filename):
127+
"""
128+
Save job details as CSV file.
129+
130+
Args:
131+
jobs (list): A list of dictionaries containing job details.
132+
filename (str): The name of the CSV file to save.
133+
"""
134+
output_dir = os.path.join(os.getcwd(), "outputFiles")
135+
os.makedirs(output_dir, exist_ok=True)
136+
keys = jobs[0].keys()
137+
try:
138+
with open(filename, 'w', newline='', encoding='utf-8') as output_file:
139+
dict_writer = csv.DictWriter(output_file, fieldnames=keys)
140+
dict_writer.writeheader()
141+
dict_writer.writerows(jobs)
142+
except IOError as e:
143+
print("Error saving as CSV:", e)
144+
145+
def save_as_txt(jobs, filename):
146+
"""
147+
Save job details as text file.
148+
149+
Args:
150+
jobs (list): A list of dictionaries containing job details.
151+
filename (str): The name of the text file to save.
152+
"""
153+
try:
154+
with open(filename, 'w', encoding='utf-8') as output_file:
155+
for job in jobs:
156+
output_file.write(f"Title: {job['title']}\n")
157+
output_file.write(f"Company: {job['company']}\n")
158+
output_file.write(f"Company URL: {job['company_url']}\n")
159+
output_file.write(f"Tags: {', '.join(job['tags'])}\n")
160+
output_file.write(f"Date Posted: {job['date_posted']}\n")
161+
output_file.write(f"Salary: {job['salary']}\n")
162+
output_file.write(f"Job URL: {job['job_url']}\n")
163+
output_file.write("-" * 40 + "\n")
164+
except IOError as e:
165+
print("Error saving as TXT:", e)
166+
167+
if __name__ == '__main__':
168+
job, remote, num_jobs, save_option, sort_by = get_user_input()
169+
url = construct_url(job, remote, sort_by)
170+
print(f"Scraping URL: {url}")
171+
jobs = scrape_jobs(url, num_jobs)
172+
if jobs:
173+
display_jobs(jobs)
174+
fileName = f"./outputFiles/{job}_jobs_remote_{str(remote).lower()}_sorted_by_{sort_by}"
175+
if save_option == 'csv':
176+
save_as_csv(jobs, f"{fileName}.csv")
177+
elif save_option == 'txt':
178+
save_as_txt(jobs, f"{fileName}.txt")
179+
elif save_option == 'both':
180+
save_as_csv(jobs, f"{fileName}.csv")
181+
save_as_txt(jobs, f"{fileName}.txt")
182+
print(f"Jobs saved as {save_option.upper()} file(s).")
183+
else:
184+
print("No jobs found. Exiting.")
Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
# Author: Asib Hossen
2+
# Date: May 21, 2024
3+
# Description: This script scrapes job listings from https://www.devjobsscanner.com/ based on user input, displays the job details, and optionally saves them as CSV and/or TXT files.
4+
# Version: 1.1
5+
6+
7+
import os
8+
import re
9+
import csv
10+
import time
11+
import requests
12+
from bs4 import BeautifulSoup
13+
14+
def get_user_input():
15+
"""
16+
Prompt user for job title, remote job preference, sorting preference,
17+
and save option.
18+
19+
Returns:
20+
tuple: A tuple containing job title (str), remote job preference (bool),
21+
save option (str), and sorting preference (str).
22+
"""
23+
job = input("Enter the job title: ")
24+
remote = input("Do you want remote jobs only? (yes/no): ").lower() == 'yes'
25+
sort_options = ['matches', 'newest', 'salary']
26+
print(f"Sort options: {sort_options}")
27+
sort_by = input("Enter the sorting preference (matches/newest/salary): ")
28+
save_option = input("Do you want to save the output as CSV, TXT, or both of them? (csv/txt/both): ").lower()
29+
return job, remote, save_option, sort_by
30+
31+
def construct_url(job, remote, sort_by):
32+
"""
33+
Construct the URL based on the job title, remote preference, and sorting preference.
34+
35+
Args:
36+
job (str): The job title.
37+
remote (bool): True if user wants remote jobs only, False otherwise.
38+
sort_by (str): The sorting preference.
39+
40+
Returns:
41+
str: The constructed URL.
42+
"""
43+
base_url = "https://www.devjobsscanner.com/search/"
44+
search_params = f"?search={job}"
45+
if remote is not None:
46+
search_params += f"&remote={str(remote).lower()}"
47+
if sort_by is not None:
48+
search_params += f"&sort={sort_by}"
49+
url = base_url + search_params
50+
return url
51+
52+
def scrape_jobs(url):
53+
"""
54+
Scrape job listings from the provided URL.
55+
56+
Args:
57+
url (str): The URL to scrape job listings from.
58+
59+
Returns:
60+
list: A list of dictionaries containing job details.
61+
"""
62+
try:
63+
response = requests.get(url)
64+
response.raise_for_status() # Raise an exception for HTTP errors
65+
time.sleep(5) # Delay to avoid hitting the server too frequently
66+
soup = BeautifulSoup(response.content, 'html.parser')
67+
68+
job_divs = soup.find_all('div', class_='flex p-3 rounded group relative overflow-hidden')
69+
jobs = []
70+
for job_div in job_divs:
71+
title = job_div.find('h2').text.strip()
72+
company = job_div.find('div', class_='jbs-dot-separeted-list').find('a').text.strip()
73+
tags = [tag.text.strip() for tag in job_div.find_all('a', class_='tag')]
74+
date_posted = job_div.find('span', class_='text-primary-text').text.strip()
75+
salary = job_div.find('span', class_='text-gray-text').text.strip()
76+
77+
# Check if the salary contains at least two digits
78+
if not re.search(r'\d{2}', salary):
79+
salary = "Not mentioned"
80+
81+
job_url = job_div.find('a', class_='jbs-text-hover-link')['href']
82+
83+
jobs.append({
84+
'title': title,
85+
'company': company,
86+
'company_url': f"https://www.devjobsscanner.com/company/{company.lower()}",
87+
'tags': tags,
88+
'date_posted': date_posted,
89+
'salary': salary,
90+
'job_url': job_url
91+
})
92+
return jobs
93+
except requests.RequestException as e:
94+
print("Error scraping jobs:", e)
95+
return []
96+
97+
def display_jobs(jobs):
98+
"""
99+
Display job details to the console.
100+
101+
Args:
102+
jobs (list): A list of dictionaries containing job details.
103+
"""
104+
for job in jobs:
105+
print(f"Title: {job['title']}")
106+
print(f"Company: {job['company']}")
107+
print(f"Company URL: {job['company_url']}")
108+
print(f"Tags: {', '.join(job['tags'])}")
109+
print(f"Date Posted: {job['date_posted']}")
110+
print(f"Salary: {job['salary']}")
111+
print(f"Job URL: {job['job_url']}")
112+
print("-" * 40)
113+
114+
def save_as_csv(jobs, filename):
115+
"""
116+
Save job details as CSV file.
117+
118+
Args:
119+
jobs (list): A list of dictionaries containing job details.
120+
filename (str): The name of the CSV file to save.
121+
"""
122+
output_dir = os.path.join(os.getcwd(), "outputFiles")
123+
os.makedirs(output_dir, exist_ok=True)
124+
keys = jobs[0].keys()
125+
try:
126+
with open(filename, 'w', newline='', encoding='utf-8') as output_file:
127+
dict_writer = csv.DictWriter(output_file, fieldnames=keys)
128+
dict_writer.writeheader()
129+
dict_writer.writerows(jobs)
130+
except IOError as e:
131+
print("Error saving as CSV:", e)
132+
133+
def save_as_txt(jobs, filename):
134+
"""
135+
Save job details as text file.
136+
137+
Args:
138+
jobs (list): A list of dictionaries containing job details.
139+
filename (str): The name of the text file to save.
140+
"""
141+
try:
142+
with open(filename, 'w', encoding='utf-8') as output_file:
143+
for job in jobs:
144+
output_file.write(f"Title: {job['title']}\n")
145+
output_file.write(f"Company: {job['company']}\n")
146+
output_file.write(f"Company URL: {job['company_url']}\n")
147+
output_file.write(f"Tags: {', '.join(job['tags'])}\n")
148+
output_file.write(f"Date Posted: {job['date_posted']}\n")
149+
output_file.write(f"Salary: {job['salary']}\n")
150+
output_file.write(f"Job URL: {job['job_url']}\n")
151+
output_file.write("-" * 40 + "\n")
152+
except IOError as e:
153+
print("Error saving as TXT:", e)
154+
155+
if __name__ == '__main__':
156+
job, remote, save_option, sort_by = get_user_input()
157+
url = construct_url(job, remote, sort_by)
158+
print(f"Scraping URL: {url}")
159+
jobs = scrape_jobs(url)
160+
if jobs:
161+
display_jobs(jobs)
162+
fileName = f"./outputFiles/{job}_jobs_remote_{str(remote).lower()}_sorted_by_{sort_by}"
163+
if save_option == 'csv':
164+
save_as_csv(jobs, f"{fileName}.csv")
165+
elif save_option == 'txt':
166+
save_as_txt(jobs, f"{fileName}.txt")
167+
elif save_option == 'both':
168+
save_as_csv(jobs, f"{fileName}.csv")
169+
save_as_txt(jobs, f"{fileName}.txt")
170+
print(f"Jobs saved as {save_option.upper()} file(s).")
171+
else:
172+
print("No jobs found. Exiting.")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
title,company,company_url,tags,date_posted,salary,job_url
2+
Junior Python Developer - Fully Remote,INDI Staffing Services,https://www.devjobsscanner.com/company/indi staffing services,['python'],4 weeks ago,Not mentioned,https://br.linkedin.com/jobs/view/junior-python-developer-fully-remote-at-indi-staffing-services-3905557993?refId=CIi7kPgOLtsBQ2GdsSUZ6A%3D%3D&trackingId=HjTjhxuOXesYMFynnjZ3sA%3D%3D&position=23&pageNum=15&trk=public_jobs_jserp-result_search-card
3+
Junior Python Developer - Fully Remote,INDI Staffing Services,https://www.devjobsscanner.com/company/indi staffing services,['python'],4 weeks ago,Not mentioned,https://br.linkedin.com/jobs/view/junior-python-developer-fully-remote-at-indi-staffing-services-3905559533?refId=24YIlA6nBIXWZAw2pp8YIQ%3D%3D&trackingId=K0RNbyZF8P1NVP8jSDTZxg%3D%3D&position=14&pageNum=4&trk=public_jobs_jserp-result_search-card
4+
Junior Python Developer - Fully Remote,INDI Staffing Services,https://www.devjobsscanner.com/company/indi staffing services,['python'],4 weeks ago,Not mentioned,https://br.linkedin.com/jobs/view/junior-python-developer-fully-remote-at-indi-staffing-services-3905558971?position=4&pageNum=50&refId=f%2FMDbLRF9jpyu1FP2qKzBA%3D%3D&trackingId=3b3MyV8heftivJ1yAEGDSA%3D%3D&trk=public_jobs_jserp-result_search-card
5+
Junior Python Developer - Fully Remote,INDI Staffing Services,https://www.devjobsscanner.com/company/indi staffing services,['python'],4 weeks ago,Not mentioned,https://br.linkedin.com/jobs/view/junior-python-developer-fully-remote-at-indi-staffing-services-3905564228?position=9&pageNum=25&refId=3vjg%2F7Apk5o3blJ1SV4Trg%3D%3D&trackingId=YQovs1pUWZwPBsIsc%2F%2FeNA%3D%3D&trk=public_jobs_jserp-result_search-card
6+
Junior Python Developer - Fully Remote,INDI Staffing Services,https://www.devjobsscanner.com/company/indi staffing services,['python'],4 weeks ago,Not mentioned,https://co.linkedin.com/jobs/view/junior-python-developer-fully-remote-at-indi-staffing-services-3905560503?position=3&pageNum=2&refId=n%2BIMuq%2BFPiZWMUAdjPElDQ%3D%3D&trackingId=CL5eC5WRkvm518gLzpcuXA%3D%3D&trk=public_jobs_jserp-result_search-card
7+
Junior Python Developer - Fully Remote,INDI Staffing Services,https://www.devjobsscanner.com/company/indi staffing services,['python'],4 weeks ago,Not mentioned,https://co.linkedin.com/jobs/view/junior-python-developer-fully-remote-at-indi-staffing-services-3905560484?position=4&pageNum=2&refId=n%2BIMuq%2BFPiZWMUAdjPElDQ%3D%3D&trackingId=Ns2Q8YkzKL8BpD1ymz7nZw%3D%3D&trk=public_jobs_jserp-result_search-card
8+
Junior Python Developer - Fully Remote,INDI Staffing Services,https://www.devjobsscanner.com/company/indi staffing services,['python'],4 weeks ago,Not mentioned,https://br.linkedin.com/jobs/view/junior-python-developer-fully-remote-at-indi-staffing-services-3905563257?position=2&pageNum=2&refId=bUQQZsGdjsbzIyYszLfYAA%3D%3D&trackingId=BsQara%2F7D3fS3KbgT8qvng%3D%3D&trk=public_jobs_jserp-result_search-card
9+
Junior Python Developer - Fully Remote,INDI Staffing Services,https://www.devjobsscanner.com/company/indi staffing services,['python'],4 weeks ago,Not mentioned,https://br.linkedin.com/jobs/view/junior-python-developer-fully-remote-at-indi-staffing-services-3905564224?position=1&pageNum=97&refId=%2BqnXHLbBBntROtlrbSJwyg%3D%3D&trackingId=NizLf2pvyn21xhEur7DC5g%3D%3D&trk=public_jobs_jserp-result_search-card
10+
Junior Python Developer,Remote,https://www.devjobsscanner.com/company/remote,['python'],3 weeks ago,360K-420K INR,https://www.glassdoor.com/partner/jobListing.htm?pos=110&ao=1136043&tgt=APPLY_START&s=58&guid=0000018f6ee9aef3b4d180f3e6156037&src=GD_JOB_VIEW&t=SR&vt=w&ea=1&cs=1_90bec054&cb=1715552759939&jobListingId=1009261935030&jrtk=5-yul1-0-1htnejbpehdht800-4608d5f7f2223d74
11+
Python/Django Developer (Junior/Mid level),Remote,https://www.devjobsscanner.com/company/remote,"['python', 'django']",3 weeks ago,$83K-104K,https://www.glassdoor.com/partner/jobListing.htm?pos=1535&ao=1136043&tgt=APPLY_START&s=58&guid=0000018f6afd4e1790ebc43a68a229b4&src=GD_JOB_VIEW&t=SR&vt=w&ea=1&cs=1_c4a3bb53&cb=1715486937283&jobListingId=1009258237173&jrtk=5-yul1-0-1htlfqjioir0k800-8ef82aa48f33eb1f
12+
"Full Stack Developer 80-100% (f/m/x), fully remote",comparis.ch AG,https://www.devjobsscanner.com/company/comparis.ch ag,"['JavaScript', 'TypeScript', 'React', 'Next.js is a must']",2 weeks ago,$50K-60K,https://www.comparis.ch/people/jobs/detail/1483471
13+
Junior Python Developer,Remote,https://www.devjobsscanner.com/company/remote,['python'],1 month ago,200K-600K INR,https://www.glassdoor.com/partner/jobListing.htm?pos=1007&ao=1136043&tgt=APPLY_START&s=58&guid=0000018f050f36598d01f2ccbf6c4a0c&src=GD_JOB_VIEW&t=SR&vt=w&ea=1&cs=1_ee5c1cb4&cb=1713776834633&jobListingId=1009236729692&jrtk=5-yul1-0-1hs2gudkok7rv807-fc64d05e0d0ad0b8
14+
Remote Junior AI Developer (Python),Capital Certainty,https://www.devjobsscanner.com/company/capital certainty,['python'],1 month ago,Not mentioned,https://mx.linkedin.com/jobs/view/remote-junior-ai-developer-python-at-capital-certainty-3903420724?position=1&pageNum=40&refId=GrzP6Ij8MHMJSeEX7POvZg%3D%3D&trackingId=tul63IYKsaIJgCMpBs8E8A%3D%3D&trk=public_jobs_jserp-result_search-card
15+
Remote Junior AI Developer (Python),Capital Certainty,https://www.devjobsscanner.com/company/capital certainty,['python'],1 month ago,Not mentioned,https://co.linkedin.com/jobs/view/remote-junior-ai-developer-python-at-capital-certainty-3903424707?position=2&pageNum=25&refId=9jXnRE8TnaMjCU9ULDZnFg%3D%3D&trackingId=a2cdthbZLKym%2FrjOau2ixw%3D%3D&trk=public_jobs_jserp-result_search-card
16+
Junior Python Automation Engineer - Remote,HireMeFast LLC,https://www.devjobsscanner.com/company/hiremefast llc,"['python', 'automation']",4 weeks ago,Not mentioned,https://www.linkedin.com/jobs/view/junior-python-automation-engineer-remote-at-hiremefast-llc-3911597343?refId=153raRUvsXB3eCH6JeOXdQ%3D%3D&trackingId=rqvfYQhC%2FjOGJKCliF6eTg%3D%3D&position=20&pageNum=3&trk=public_jobs_jserp-result_search-card
17+
Junior Python Automation Engineer - Remote,HireMeFast LLC,https://www.devjobsscanner.com/company/hiremefast llc,"['python', 'automation']",3 weeks ago,Not mentioned,https://www.linkedin.com/jobs/view/junior-python-automation-engineer-remote-at-hiremefast-llc-3913083195?refId=jRHwmdZSYrD1hTxFj57UvA%3D%3D&trackingId=EonPhC0mP6MG%2BVNmkjwcvA%3D%3D&position=13&pageNum=1&trk=public_jobs_jserp-result_search-card
18+
Junior Python Automation Engineer - Remote,HireMeFast LLC,https://www.devjobsscanner.com/company/hiremefast llc,"['python', 'automation']",3 weeks ago,Not mentioned,https://www.linkedin.com/jobs/view/junior-python-automation-engineer-remote-at-hiremefast-llc-3913727649?refId=Rv6T5COZxcDrHwk3jw8cRQ%3D%3D&trackingId=kr7fAONQKUm%2FJvt4WMPFvg%3D%3D&position=5&pageNum=30&trk=public_jobs_jserp-result_search-card
19+
Junior Python Automation Engineer - Remote,HireMeFast LLC,https://www.devjobsscanner.com/company/hiremefast llc,"['python', 'automation']",3 weeks ago,Not mentioned,https://www.linkedin.com/jobs/view/junior-python-automation-engineer-remote-at-hiremefast-llc-3914226121?refId=MSdQMFwE%2F3S%2BUcrDpBSA7w%3D%3D&trackingId=GhJ3LvB0hWSAn3CrkHTNKQ%3D%3D&position=20&pageNum=38&trk=public_jobs_jserp-result_search-card
20+
Junior Python Automation Engineer - Remote,HireMeFast LLC,https://www.devjobsscanner.com/company/hiremefast llc,"['python', 'automation']",2 weeks ago,Not mentioned,https://www.linkedin.com/jobs/view/junior-python-automation-engineer-remote-at-hiremefast-llc-3917915478?position=9&pageNum=87&refId=6OvZjHtktNkp3%2FtdijaA2g%3D%3D&trackingId=HBgQCPVN%2FlVJb8JEHXNqvw%3D%3D&trk=public_jobs_jserp-result_search-card
21+
Junior Python Automation Engineer - Remote,HireMeFast LLC,https://www.devjobsscanner.com/company/hiremefast llc,"['python', 'automation']",2 weeks ago,Not mentioned,https://www.linkedin.com/jobs/view/junior-python-automation-engineer-remote-at-hiremefast-llc-3918715725?position=8&pageNum=2&refId=lKPDTgHL55I1EMZcazybag%3D%3D&trackingId=4UEgu8DCO4otvbIw2kr31w%3D%3D&trk=public_jobs_jserp-result_search-card
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
Title: Junior Python Developer - Fully Remote
2+
Company: INDI Staffing Services
3+
Company URL: https://www.devjobsscanner.com/company/indi staffing services
4+
Tags: python
5+
Date Posted: 4 weeks ago
6+
Salary: Not mentioned
7+
Job URL: https://br.linkedin.com/jobs/view/junior-python-developer-fully-remote-at-indi-staffing-services-3905557993?refId=CIi7kPgOLtsBQ2GdsSUZ6A%3D%3D&trackingId=HjTjhxuOXesYMFynnjZ3sA%3D%3D&position=23&pageNum=15&trk=public_jobs_jserp-result_search-card
8+
----------------------------------------
9+
Title: Junior Python Developer - Fully Remote
10+
Company: INDI Staffing Services
11+
Company URL: https://www.devjobsscanner.com/company/indi staffing services
12+
Tags: python
13+
Date Posted: 4 weeks ago
14+
Salary: Not mentioned
15+
Job URL: https://br.linkedin.com/jobs/view/junior-python-developer-fully-remote-at-indi-staffing-services-3905559533?refId=24YIlA6nBIXWZAw2pp8YIQ%3D%3D&trackingId=K0RNbyZF8P1NVP8jSDTZxg%3D%3D&position=14&pageNum=4&trk=public_jobs_jserp-result_search-card
16+
----------------------------------------
17+
Title: Junior Python Developer - Fully Remote
18+
Company: INDI Staffing Services
19+
Company URL: https://www.devjobsscanner.com/company/indi staffing services
20+
Tags: python
21+
Date Posted: 4 weeks ago
22+
Salary: Not mentioned
23+
Job URL: https://br.linkedin.com/jobs/view/junior-python-developer-fully-remote-at-indi-staffing-services-3905558971?position=4&pageNum=50&refId=f%2FMDbLRF9jpyu1FP2qKzBA%3D%3D&trackingId=3b3MyV8heftivJ1yAEGDSA%3D%3D&trk=public_jobs_jserp-result_search-card
24+
----------------------------------------
25+
Title: Junior Python Developer - Fully Remote
26+
Company: INDI Staffing Services
27+
Company URL: https://www.devjobsscanner.com/company/indi staffing services
28+
Tags: python
29+
Date Posted: 4 weeks ago
30+
Salary: Not mentioned
31+
Job URL: https://br.linkedin.com/jobs/view/junior-python-developer-fully-remote-at-indi-staffing-services-3905564228?position=9&pageNum=25&refId=3vjg%2F7Apk5o3blJ1SV4Trg%3D%3D&trackingId=YQovs1pUWZwPBsIsc%2F%2FeNA%3D%3D&trk=public_jobs_jserp-result_search-card
32+
----------------------------------------
33+
Title: Junior Python Developer - Fully Remote
34+
Company: INDI Staffing Services
35+
Company URL: https://www.devjobsscanner.com/company/indi staffing services
36+
Tags: python
37+
Date Posted: 4 weeks ago
38+
Salary: Not mentioned
39+
Job URL: https://co.linkedin.com/jobs/view/junior-python-developer-fully-remote-at-indi-staffing-services-3905560503?position=3&pageNum=2&refId=n%2BIMuq%2BFPiZWMUAdjPElDQ%3D%3D&trackingId=CL5eC5WRkvm518gLzpcuXA%3D%3D&trk=public_jobs_jserp-result_search-card
40+
----------------------------------------
41+
Title: Junior Python Developer - Fully Remote
42+
Company: INDI Staffing Services
43+
Company URL: https://www.devjobsscanner.com/company/indi staffing services
44+
Tags: python
45+
Date Posted: 4 weeks ago
46+
Salary: Not mentioned
47+
Job URL: https://co.linkedin.com/jobs/view/junior-python-developer-fully-remote-at-indi-staffing-services-3905560484?position=4&pageNum=2&refId=n%2BIMuq%2BFPiZWMUAdjPElDQ%3D%3D&trackingId=Ns2Q8YkzKL8BpD1ymz7nZw%3D%3D&trk=public_jobs_jserp-result_search-card
48+
----------------------------------------
49+
Title: Junior Python Developer - Fully Remote
50+
Company: INDI Staffing Services
51+
Company URL: https://www.devjobsscanner.com/company/indi staffing services
52+
Tags: python
53+
Date Posted: 4 weeks ago
54+
Salary: Not mentioned
55+
Job URL: https://br.linkedin.com/jobs/view/junior-python-developer-fully-remote-at-indi-staffing-services-3905563257?position=2&pageNum=2&refId=bUQQZsGdjsbzIyYszLfYAA%3D%3D&trackingId=BsQara%2F7D3fS3KbgT8qvng%3D%3D&trk=public_jobs_jserp-result_search-card
56+
----------------------------------------
57+
Title: Junior Python Developer - Fully Remote
58+
Company: INDI Staffing Services
59+
Company URL: https://www.devjobsscanner.com/company/indi staffing services
60+
Tags: python
61+
Date Posted: 4 weeks ago
62+
Salary: Not mentioned
63+
Job URL: https://br.linkedin.com/jobs/view/junior-python-developer-fully-remote-at-indi-staffing-services-3905564224?position=1&pageNum=97&refId=%2BqnXHLbBBntROtlrbSJwyg%3D%3D&trackingId=NizLf2pvyn21xhEur7DC5g%3D%3D&trk=public_jobs_jserp-result_search-card
64+
----------------------------------------
65+
Title: Junior Python Developer
66+
Company: Remote
67+
Company URL: https://www.devjobsscanner.com/company/remote
68+
Tags: python
69+
Date Posted: 3 weeks ago
70+
Salary: 360K-420K INR
71+
Job URL: https://www.glassdoor.com/partner/jobListing.htm?pos=110&ao=1136043&tgt=APPLY_START&s=58&guid=0000018f6ee9aef3b4d180f3e6156037&src=GD_JOB_VIEW&t=SR&vt=w&ea=1&cs=1_90bec054&cb=1715552759939&jobListingId=1009261935030&jrtk=5-yul1-0-1htnejbpehdht800-4608d5f7f2223d74
72+
----------------------------------------
73+
Title: Python/Django Developer (Junior/Mid level)
74+
Company: Remote
75+
Company URL: https://www.devjobsscanner.com/company/remote
76+
Tags: python, django
77+
Date Posted: 3 weeks ago
78+
Salary: $83K-104K
79+
Job URL: https://www.glassdoor.com/partner/jobListing.htm?pos=1535&ao=1136043&tgt=APPLY_START&s=58&guid=0000018f6afd4e1790ebc43a68a229b4&src=GD_JOB_VIEW&t=SR&vt=w&ea=1&cs=1_c4a3bb53&cb=1715486937283&jobListingId=1009258237173&jrtk=5-yul1-0-1htlfqjioir0k800-8ef82aa48f33eb1f
80+
----------------------------------------
81+
Title: Full Stack Developer 80-100% (f/m/x), fully remote
82+
Company: comparis.ch AG
83+
Company URL: https://www.devjobsscanner.com/company/comparis.ch ag
84+
Tags: JavaScript, TypeScript, React, Next.js is a must
85+
Date Posted: 2 weeks ago
86+
Salary: $50K-60K
87+
Job URL: https://www.comparis.ch/people/jobs/detail/1483471
88+
----------------------------------------
89+
Title: Junior Python Developer
90+
Company: Remote
91+
Company URL: https://www.devjobsscanner.com/company/remote
92+
Tags: python
93+
Date Posted: 1 month ago
94+
Salary: 200K-600K INR
95+
Job URL: https://www.glassdoor.com/partner/jobListing.htm?pos=1007&ao=1136043&tgt=APPLY_START&s=58&guid=0000018f050f36598d01f2ccbf6c4a0c&src=GD_JOB_VIEW&t=SR&vt=w&ea=1&cs=1_ee5c1cb4&cb=1713776834633&jobListingId=1009236729692&jrtk=5-yul1-0-1hs2gudkok7rv807-fc64d05e0d0ad0b8
96+
----------------------------------------
97+
Title: Remote Junior AI Developer (Python)
98+
Company: Capital Certainty
99+
Company URL: https://www.devjobsscanner.com/company/capital certainty
100+
Tags: python
101+
Date Posted: 1 month ago
102+
Salary: Not mentioned
103+
Job URL: https://mx.linkedin.com/jobs/view/remote-junior-ai-developer-python-at-capital-certainty-3903420724?position=1&pageNum=40&refId=GrzP6Ij8MHMJSeEX7POvZg%3D%3D&trackingId=tul63IYKsaIJgCMpBs8E8A%3D%3D&trk=public_jobs_jserp-result_search-card
104+
----------------------------------------
105+
Title: Remote Junior AI Developer (Python)
106+
Company: Capital Certainty
107+
Company URL: https://www.devjobsscanner.com/company/capital certainty
108+
Tags: python
109+
Date Posted: 1 month ago
110+
Salary: Not mentioned
111+
Job URL: https://co.linkedin.com/jobs/view/remote-junior-ai-developer-python-at-capital-certainty-3903424707?position=2&pageNum=25&refId=9jXnRE8TnaMjCU9ULDZnFg%3D%3D&trackingId=a2cdthbZLKym%2FrjOau2ixw%3D%3D&trk=public_jobs_jserp-result_search-card
112+
----------------------------------------
113+
Title: Junior Python Automation Engineer - Remote
114+
Company: HireMeFast LLC
115+
Company URL: https://www.devjobsscanner.com/company/hiremefast llc
116+
Tags: python, automation
117+
Date Posted: 4 weeks ago
118+
Salary: Not mentioned
119+
Job URL: https://www.linkedin.com/jobs/view/junior-python-automation-engineer-remote-at-hiremefast-llc-3911597343?refId=153raRUvsXB3eCH6JeOXdQ%3D%3D&trackingId=rqvfYQhC%2FjOGJKCliF6eTg%3D%3D&position=20&pageNum=3&trk=public_jobs_jserp-result_search-card
120+
----------------------------------------
121+
Title: Junior Python Automation Engineer - Remote
122+
Company: HireMeFast LLC
123+
Company URL: https://www.devjobsscanner.com/company/hiremefast llc
124+
Tags: python, automation
125+
Date Posted: 3 weeks ago
126+
Salary: Not mentioned
127+
Job URL: https://www.linkedin.com/jobs/view/junior-python-automation-engineer-remote-at-hiremefast-llc-3913083195?refId=jRHwmdZSYrD1hTxFj57UvA%3D%3D&trackingId=EonPhC0mP6MG%2BVNmkjwcvA%3D%3D&position=13&pageNum=1&trk=public_jobs_jserp-result_search-card
128+
----------------------------------------
129+
Title: Junior Python Automation Engineer - Remote
130+
Company: HireMeFast LLC
131+
Company URL: https://www.devjobsscanner.com/company/hiremefast llc
132+
Tags: python, automation
133+
Date Posted: 3 weeks ago
134+
Salary: Not mentioned
135+
Job URL: https://www.linkedin.com/jobs/view/junior-python-automation-engineer-remote-at-hiremefast-llc-3913727649?refId=Rv6T5COZxcDrHwk3jw8cRQ%3D%3D&trackingId=kr7fAONQKUm%2FJvt4WMPFvg%3D%3D&position=5&pageNum=30&trk=public_jobs_jserp-result_search-card
136+
----------------------------------------
137+
Title: Junior Python Automation Engineer - Remote
138+
Company: HireMeFast LLC
139+
Company URL: https://www.devjobsscanner.com/company/hiremefast llc
140+
Tags: python, automation
141+
Date Posted: 3 weeks ago
142+
Salary: Not mentioned
143+
Job URL: https://www.linkedin.com/jobs/view/junior-python-automation-engineer-remote-at-hiremefast-llc-3914226121?refId=MSdQMFwE%2F3S%2BUcrDpBSA7w%3D%3D&trackingId=GhJ3LvB0hWSAn3CrkHTNKQ%3D%3D&position=20&pageNum=38&trk=public_jobs_jserp-result_search-card
144+
----------------------------------------
145+
Title: Junior Python Automation Engineer - Remote
146+
Company: HireMeFast LLC
147+
Company URL: https://www.devjobsscanner.com/company/hiremefast llc
148+
Tags: python, automation
149+
Date Posted: 2 weeks ago
150+
Salary: Not mentioned
151+
Job URL: https://www.linkedin.com/jobs/view/junior-python-automation-engineer-remote-at-hiremefast-llc-3917915478?position=9&pageNum=87&refId=6OvZjHtktNkp3%2FtdijaA2g%3D%3D&trackingId=HBgQCPVN%2FlVJb8JEHXNqvw%3D%3D&trk=public_jobs_jserp-result_search-card
152+
----------------------------------------
153+
Title: Junior Python Automation Engineer - Remote
154+
Company: HireMeFast LLC
155+
Company URL: https://www.devjobsscanner.com/company/hiremefast llc
156+
Tags: python, automation
157+
Date Posted: 2 weeks ago
158+
Salary: Not mentioned
159+
Job URL: https://www.linkedin.com/jobs/view/junior-python-automation-engineer-remote-at-hiremefast-llc-3918715725?position=8&pageNum=2&refId=lKPDTgHL55I1EMZcazybag%3D%3D&trackingId=4UEgu8DCO4otvbIw2kr31w%3D%3D&trk=public_jobs_jserp-result_search-card
160+
----------------------------------------

‎WEB SCRAPING/devJobsScanner_Scraper/outputFiles/Python Developer_jobs_remote_true_sorted_by_newest.csv

Lines changed: 41 additions & 0 deletions
Large diffs are not rendered by default.

‎WEB SCRAPING/devJobsScanner_Scraper/outputFiles/Python Developer_jobs_remote_true_sorted_by_newest.txt

Lines changed: 320 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
beautifulsoup4
2+
requests
3+
seleniumbase

0 commit comments

Comments
 (0)
Please sign in to comment.