diff --git a/IMDBQuerier/.gitignore b/IMDBQuerier/.gitignore
new file mode 100644
index 0000000..894a44c
--- /dev/null
+++ b/IMDBQuerier/.gitignore
@@ -0,0 +1,104 @@
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+MANIFEST
+
+# PyInstaller
+# Usually these files are written by a python script from a template
+# before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+.hypothesis/
+.pytest_cache/
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+local_settings.py
+db.sqlite3
+
+# Flask stuff:
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+target/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# pyenv
+.python-version
+
+# celery beat schedule file
+celerybeat-schedule
+
+# SageMath parsed files
+*.sage.py
+
+# Environments
+.env
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
diff --git a/IMDBQuerier/ClassFilm.py b/IMDBQuerier/ClassFilm.py
new file mode 100644
index 0000000..9bd9e13
--- /dev/null
+++ b/IMDBQuerier/ClassFilm.py
@@ -0,0 +1,40 @@
+"""
+Represents the film objects in the list.
+"""
+
+class Film(object):
+ def __init__(self, f_name, f_year, f_rating, f_genres,
+ f_runtime, f_storyline, f_type, f_img_source, f_link):
+ self.name = f_name
+ self.year = f_year
+ self.rating = f_rating
+ self.genres = f_genres
+ self.runtime = f_runtime
+ self.storyline = f_storyline
+ self.type = f_type
+ self.image_source = f_img_source
+ self.imdb_link = f_link
+
+
+ def print_film(self):
+ print("Film, ", self.name)
+ print("Year ", self.year)
+ print('Rating', self.rating)
+ print("Genres", self.genres)
+ print('Runtime', self.runtime)
+ print('Storyline', self.storyline)
+ print('Type,', self.type)
+
+ def get_genres_string(self):
+ sep = ', '
+ return sep.join(self.genres)
+
+ def get_image_html(self):
+ return ' ' % (self.imdb_link, self.name, self.image_source)
+
+ def get_title(self):
+ return ' %s
' % (self.imdb_link, self.name)
+
+
+ def get_rating(self):
+ return ' ' % str((self.rating / 10))
diff --git a/IMDBQuerier/README.md b/IMDBQuerier/README.md
new file mode 100644
index 0000000..baa89d7
--- /dev/null
+++ b/IMDBQuerier/README.md
@@ -0,0 +1,43 @@
+# IMDBQuerier
+
+This project is written to parsing films from IMDB user lists based on some attributes. It uses Selenium and BeautifulSoup to obtain and parse the film data.
+
+Until now, the project can parse films based on their:
+
+* Runtime
+* Score
+* Year
+* Genre
+* Type (TV show or film)
+
+Currently, one can make the exact queries on the refine section at the bottom of each user list. However, it is hard to apply your selections to all lists.
+
+Checkout [original repo](https://github.com/Bekci/IMDBQuerier) for the latest version.
+## Requirements
+
+Selenium and BeautifulSoup modules are necessary for the project. Other than that, you will need a WebDriver. The project is using ChromeDriver but you can change it to the other supported browsers easily.
+
+If you have changed the driver, make sure to change the below code accordingly.
+
+```
+# main.py line 16
+driver = webdriver.Chrome()
+```
+
+[Here is a link for the Firefox driver.](https://github.com/mozilla/geckodriver/releases)
+
+## Usage
+
+First of all, change the values in the `parse_options` dictionary in the [parser_config.py](parser_config.py).
+
+Then, change the value of `list_url` variable in the [main.py](main.py) code to the list wanted to be parsed.
+
+ Run the code, the output html will apear in list_htmls folder.
+
+## Common Driver Error
+
+The used version of the browser driver can be out-dated. Always use the latest version in case of an error.
+
+[Firefox Driver](https://github.com/mozilla/geckodriver/releases)
+
+[Chrome Driver](https://chromedriver.chromium.org/)
\ No newline at end of file
diff --git a/IMDBQuerier/chromedriver.exe b/IMDBQuerier/chromedriver.exe
new file mode 100644
index 0000000..c0efae8
Binary files /dev/null and b/IMDBQuerier/chromedriver.exe differ
diff --git a/IMDBQuerier/css/list_style.css b/IMDBQuerier/css/list_style.css
new file mode 100644
index 0000000..cfcdf0f
--- /dev/null
+++ b/IMDBQuerier/css/list_style.css
@@ -0,0 +1,15 @@
+li {
+ list-style-type: none;
+ text-align: center;
+ max-width: 50%;
+ background-color: #EEEEEE;
+}
+
+span.rating {
+ color: #D9AA00;
+}
+
+
+span.list_title{
+ font-weight: bold;
+}
diff --git a/IMDBQuerier/film_content_parser.py b/IMDBQuerier/film_content_parser.py
new file mode 100644
index 0000000..d533e67
--- /dev/null
+++ b/IMDBQuerier/film_content_parser.py
@@ -0,0 +1,113 @@
+"""
+Parse strings obtained from the html to get the film metadata.
+Fix metadata and create an film object to be use it later.
+"""
+
+from ClassFilm import Film
+import re
+
+"""
+Eliminate parenthesis from the text.
+'(2019)' -> '2019'
+"""
+def parse_film_year(year_text):
+ found_numbers = re.findall("[0-9]", year_text)
+ return ''.join(found_numbers[0:4])
+
+
+"""
+Obtain decimal value of the score from its text.
+'7' -> 70
+'7,9'-> 79
+"""
+def parse_imdb_score(score_text):
+ units_digit = 0
+ if ',' in score_text:
+ tens_digit, units_digit = score_text.split(',')
+ else:
+ tens_digit = score_text.split(',')[0]
+ return int(tens_digit) * 10 + int(units_digit)
+
+
+"""
+Parse runtime in minutes from runtime text.
+"134 min" -> 134
+"""
+def parse_runtime(runtime_text):
+ return runtime_text.split(' ')[0]
+
+
+"""
+From the string of genres, obtain the genres list.
+Remove extra spaces and new line characters.
+Return genres in a list.
+"""
+def obtain_all_genres(genres_text):
+ obtained_genres = []
+ for genre in genres_text.split(','):
+ obtained_genres.append(genre.replace('\n', '').replace(' ', ''))
+ return obtained_genres
+
+
+"""
+Storyline obtained as text from the html yet some characters must be deleted
+from it.
+"""
+def obtain_story_line(story_text):
+ return story_text.replace('\n', '')
+
+"""
+Determine the film type from the year text.
+A TV-series will include '-' but a film will not include.
+"""
+def determine_film_type(year_text):
+ if '–' in year_text:
+ return 'tv-series'
+ return 'film'
+
+"""
+Sometimes images cannot be loaded and its src will be a placeholder.
+For such cases, loadlate tag will be the real source.
+"""
+def obtain_image_source(img_html):
+ if 'loadlate' in img_html.attrs:
+ return img_html['loadlate']
+ else:
+ return img_html['src']
+
+
+"""
+Take a html block representing the film item
+Apply parsing and return film object
+"""
+def obtain_film_object(content, image_raw):
+ # Runtime and score of a film might not given in the list item.
+ runtime = "unknown"
+ point = "unknown"
+
+ raw_name_with_link = content.find('a')
+ raw_name = raw_name_with_link.text
+ film_imdb_link = raw_name_with_link['href']
+ raw_year = content.find("span", class_="lister-item-year text-muted unbold").text
+ raw_runtime = content.find("span", class_="runtime")
+
+ if raw_runtime is not None:
+ raw_runtime = raw_runtime.text
+ runtime = int(parse_runtime(raw_runtime))
+
+ raw_genre = content.find("span", class_="genre").text
+ raw_point = content.find("span", class_="ipl-rating-star__rating")
+
+ if raw_point is not None:
+ raw_point = raw_point.text
+ point = int(parse_imdb_score(raw_point))
+
+ raw_storyline = content.find("p", class_="").text
+
+ year = parse_film_year(raw_year)
+ genre_list = obtain_all_genres(raw_genre)
+ storyline = obtain_story_line(raw_storyline)
+ f_type = determine_film_type(year)
+ image_source = obtain_image_source(image_raw)
+
+ return Film(raw_name, year, point, genre_list, runtime, storyline, f_type, image_source, film_imdb_link)
diff --git a/IMDBQuerier/html_creator.py b/IMDBQuerier/html_creator.py
new file mode 100644
index 0000000..cc74ea7
--- /dev/null
+++ b/IMDBQuerier/html_creator.py
@@ -0,0 +1,68 @@
+"""
+Create a new html file from selected films.
+Save the file under lists directory.
+"""
+import os
+HTML_DIRS = 'list_htmls'
+
+def crete_directory():
+ if not os.path.exists(HTML_DIRS):
+ os.mkdir(HTML_DIRS)
+
+def start_html(list_name):
+ return """
+
+
+
%s | +%s | +||
Year: %s | +|||
%s mins | +%s | +IMDB Rating: %s | +|
%s | +