├── .gitignore ├── CHANGELOG.md ├── LICENSE.md ├── README.md ├── example_output ├── csv │ ├── LBfilms-popular-this-month.csv │ ├── actor-anne-hathaway-films.csv │ ├── bjornbork-watchlist-decade-2020s.csv │ └── lb_top250.csv └── json │ ├── LBfilms-popular-year-2024.json │ ├── director-joel-coen-films.json │ └── lb_top250.json ├── listscraper ├── __init__.py ├── __main__.py ├── checkimport_functions.py ├── cli.py ├── instance_class.py ├── list_class.py ├── scrape_functions.py └── utility_functions.py ├── requirements.txt └── target_lists.txt /.gitignore: -------------------------------------------------------------------------------- 1 | Pip* 2 | *.ui 3 | .vscode 4 | __pycache__ 5 | .venv 6 | scraper_outputs 7 | .DS_Store -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | All notable changes to this project will be documented in this file. 3 | 4 | ## [2.2.0] - 2024-06-03 5 | 6 | ### Added 7 | 8 | - Functionality to scrape all films from a certain `role` (i.e. person) in Cast/Crew. The input links for these should follow the structure of `https://letterboxd.com/{role}/{name}/` (e.g. https://letterboxd.com/actor/anne-hathaway/). 9 | 10 | - A list of the currently available roles includes: 11 | ``` 12 | ROLES = [ 13 | "actor", 14 | "additional-directing", 15 | "additional-photography", 16 | "art-direction", 17 | "assistant-director", 18 | "camera-operator", 19 | "casting", 20 | "choreography", 21 | "cinematography", 22 | "co-director", 23 | "composer", 24 | "costume-design", 25 | "director", 26 | "editor", 27 | "executive-producer", 28 | "hairstyling", 29 | "lighting", 30 | "makeup", 31 | "original-writer", 32 | "producer", 33 | "production-design", 34 | "set-decoration", 35 | "songs", 36 | "sound", 37 | "special-effects", 38 | "story", 39 | "stunts", 40 | "title-design", 41 | "visual-effects", 42 | "writer", 43 | ] 44 | This feature was added by @jonathanhouge in [#13](https://github.com/L-Dot/Letterboxd-list-scraper/pull/13). 45 | 46 | 47 | - Functionality to scrape the description/synopsis of films, if available. The scraped text is written to the `Description` column. This change was inspired by @meanjoep92 in [#2](https://github.com/L-Dot/Letterboxd-list-scraper/issues/2). 48 | 49 | 50 | ## [2.1.0] - 2024-04-23 51 | 52 | ### Added 53 | - Functionality to export the lists to a JSON file. 54 | Added by @jonathanhouge in [#11](https://github.com/L-Dot/Letterboxd-list-scraper/issues/11). 55 | 56 | ### Fixed 57 | - A bug that caused incomplete writeout when the first film in the list was an unreleased film (see issue [#8](https://github.com/L-Dot/Letterboxd-list-scraper/issues/8) and issue [#12](https://github.com/L-Dot/Letterboxd-list-scraper/issues/12)). 58 | 59 | 60 | ## [2.0.0] - 2024-02-06 61 | 62 | ### Added 63 | - The program can now be run on the command line via `python -m listscraper `. This is the simplest case, but multiple optional flags were added for functionality. Some of these flags are: 64 | - `--pages` can be used to select specific pages. 65 | - `--output-name` can be used to give the output CSV(s) a user-specified name. 66 | - `--file` can be used to import a .txt file with multiple list URLs that should be scraped. Each URL can have its own optional `--pages` and/or `--output-name` flags. 67 | - `--output-path` can be used to write the output CSV(s) to the desired directory. 68 | - `--concat` will concatenate all films of the given lists and output them in a single CSV. 69 | 70 | See the full overview of all flags by running `python -m listscraper --help`. 71 | 72 | - More scrape data! For each film the program now also scrapes: 73 | - Fan count (rounded off to whole hundreds because of the 'K' notation LB uses). 74 | - Total ratings amount. 75 | - Rating count of all histogram bars (i.e. how many times people rated ½, ★, ★½, etc.). 76 | 77 | - Support for more URL types. The supported URL types now include: 78 | - Lists (e.g. `https://letterboxd.com/bjornbork/list/het-huis-anubis/`) 79 | - Watchlists (e.g. `https://letterboxd.com/joelhaver/watchlist/`) 80 | - User films (e.g. `https://letterboxd.com/mscorsese/films/`) 81 | - Generic Letterboxd films (e.g. `https://letterboxd.com/films/popular/this/week/genre/documentary/`) 82 | 83 | Besides these, each URL can be extended with additional selection criteria. You can thus for example provide the scraper with a list like `https://letterboxd.com/mscorsese/films/decade/1950s/genre/drama/` to obtain only the films Mr. Scorsese watched that are from the 1950s and fall under the 'drama' genre. This works for all URL types and is **required** when scraping generic Letterboxd film lists. 84 | 85 | - Program prints more detailed progress updates. 86 | 87 | ### Changed 88 | - Updated the README to reflect changes. 89 | 90 | - Changed some filenames (=>), moved functions (->) and/or added new modules (new) for better project organization: 91 | - `main.py` => `__main__.py`
92 | The initiator script of the program was renamed and altered for cleaner code. 93 | - `list_scraper.py` => `scrape_functions.py`
94 | File was renamed and now contains all functions related specifically to the scraping procedure. 95 | - (new) `instance_class.py`
96 | Contains the main program code. Actualizes the program as a class instance which is useful for storing information. 97 | - (new) `utility_functions.py`
98 | Contains small utility functions. 99 | - (new) `checkimport_functions.py`
100 | Contains functions that check the input arguments and extract/import the relevant information. 101 | - (new) `cli.py`
102 | Contains all code regarding the command line interface argument parser. 103 | 104 | - In actuality a huge amount of changes in the overall code (too much to list here), but the general working of the scraper has stayed exactly the same. 105 | 106 | ### Fixed 107 | - Fixed an issue with scraping the stats page (watches, likes, list additions) in [#6](https://github.com/L-Dot/Letterboxd-list-scraper/issues/6) by changing the page URL (the page was not deleted luckily). 108 | - Fixed an issue with not scraping some film title's correctly as mentioned by @BeSweets in [#2](https://github.com/L-Dot/Letterboxd-list-scraper/issues/2). 109 | 110 | ## [1.1.0] - 2023-12-02 111 | 112 | ### Added 113 | - More scraping! Added new data columns for each film's: 114 | - Number of watches. 115 | - Number of appearances on a list. 116 | - Number of likes. 117 | - Genres. 118 | - Studios. 119 | - Countries. 120 | - Original language. 121 | - Spoken languages. 122 | - Owner rating (i.e. the rating that the owner of the list gave the film). 123 | 124 | These additions were mostly inspired by users in issue [#2](https://github.com/L-Dot/Letterboxd-list-scraper/issues/2). 125 | 126 | ### Changed 127 | - Updated the `requirements.txt` file. 128 | 129 | ### Fixed 130 | - Some changes suggested in issue [#1](https://github.com/L-Dot/Letterboxd-list-scraper/issues/1): 131 | - UnicodeEncodeError was resolved by using `utf-8` encoding when writing the CSV. 132 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Arno Lafontaine 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. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Letterboxd-list-scraper 2 | 3 | A tool for scraping Letterboxd lists from a simple URL. The output is a file with film titles, release year, director, cast, owner rating, average rating and a whole lot more (see example CSVs and JSONs in `/example_output/`). 4 | 5 | Version v2.2.0 supports the scraping of: 6 | - **Lists** (e.g. `https://letterboxd.com/bjornbork/list/het-huis-anubis/`) 7 | - **Watchlists** (e.g. `https://letterboxd.com/joelhaver/watchlist/`) 8 | - **User films** (e.g. `https://letterboxd.com/mscorsese/films/`) 9 | - **Generic Letterboxd films** (e.g. `https://letterboxd.com/films/popular/this/week/genre/documentary/`) 10 | - **Roles** (e.g. `https://letterboxd.com/actor/willem-dafoe/`) 11 | 12 | The current scrape rate is about 1.2 films per second. Multiple lists can be concurrently scraped using separate CPU threads (default max of 4 threads, but this is configurable). 13 | 14 | ## Getting Started 15 | 16 | ### Dependencies 17 | 18 | Requires Python 3.x, numpy, BeautifulSoup (bs4), requests, tqdm and **lxml**. 19 | 20 | If dependencies are not met it is recommended to install everything needed in one go using `pip install -r requirements.txt` (ideally in a clean virtual environment). 21 | 22 | ### Installing 23 | 24 | * Clone the repository and work in there. 25 | 26 | ### Executing program 27 | 28 | * Execute the program by running `python -m listscraper [options] [list-url]` on the command line in the project directory. 29 | 30 | Multiple list URLs can be provided, separated by a space. The output file(s) can then be found in the folder `/scraper_outputs/`, which will be created if not already present. 31 | Some of the optional flags are: 32 | - `-p` or `--pages` can be used to select specific pages. 33 | - `-on` or `--output-name` can be used to give the output file(s) a user-specified name. 34 | - `-f` or `--file` can be used to import a .txt file with multiple list URLs that should be scraped. 35 | - `-op` or `--output-path` can be used to write the output file(s) to a desired directory. 36 | - `-ofe` or `--output-file-extension` can be used to specify what type of file is outputted (support for CSV and json). 37 | - `--concat` will concatenate all films of the given lists and output them in a single file. 38 | 39 | > [!NOTE] 40 | > Please use `python -m listscraper --help` for a full list of all available flags including extensive descriptions on how to use them. 41 | 42 | > [!TIP] 43 | > Scraping multiple lists is most easily done by running `python -m listscraper -f ` with a custom .txt file that contains the URL on each newline. Each newline can take unique `-p` and `-on` optional flags. For an example of such a file please see `target_lists.txt`. 44 | 45 | > [!IMPORTANT] 46 | > Program currently does not support the scraping of extremely long generic Letterboxd pages (e.g. `https://letterboxd.com/films/popular/this/week/genre/documentary/`, which contains ~152000 films). To circumvent this, please use the `-p` flag to make a smaller page selection. 47 | 48 | ## TODO 49 | 50 | * Add further options for output, currently supports CSV and json. 51 | * Add scrape functionality for user top 4 and diary. 52 | * Add `-u ` flag that scrapes the diary, top 4, films and lists of a single user. 53 | * Add a `--meta-data` flag to print original list name, scrape date, username above CSV header. 54 | * Optimize thread usage to increase scrape speed. 55 | 56 | 57 | ## Authors 58 | 59 | Arno Lafontaine 60 | 61 | ## Acknowledgments 62 | 63 | Thanks to BBotml for the inspiration for this project https://github.com/BBottoml/Letterboxd-friend-ranker. 64 | -------------------------------------------------------------------------------- /example_output/csv/bjornbork-watchlist-decade-2020s.csv: -------------------------------------------------------------------------------- 1 | Film_title,Release_year,Director,Cast,Average_rating,Owner_rating,Genres,Runtime,Countries,Original_language,Spoken_languages,Studios,Watches,List_appearances,Likes,Fans,½,★,★½,★★,★★½,★★★,★★★½,★★★★,★★★★½,★★★★★,Total_ratings,Film_URL 2 | Geographies of Solitude,2022,Jacquelyn Mills,['Zoe Lucas'],3.93,nan,['Documentary'],103,"['Canada', 'USA']",English,['English'],"['Conseil des Arts et des Lettres du Québec', 'Sundance Institute', 'Open Society Foundations', 'Canada Council for the Arts']",3334,1476,1324,73,1,4,8,30,57,268,389,728,356,412,2253,https://letterboxd.com/film/geographies-of-solitude/ 3 | De Humani Corporis Fabrica,2022,"Lucien Castaing-Taylor, Véréna Paravel",nan,3.82,nan,['Documentary'],118,"['France', 'Switzerland']",French,['French'],"['Norte Productions', 'CG Cinéma', 'Rita Productions', 'S.E.L']",5804,3455,1848,42,15,26,27,93,161,503,775,1267,559,464,3890,https://letterboxd.com/film/de-humani-corporis-fabrica/ 4 | Passages,2023,Ira Sachs,"['Franz Rogowski', 'Ben Whishaw', 'Adèle Exarchopoulos', 'Erwan Kepoa Falé', 'Théo Cholbi', 'Arcadi Radeff', 'Léa Boublil', 'Thibault Carterot', 'Tony Daoud', 'Theo Gabilloux', 'Anton Salachas', 'Sarah Lisbonis', 'William Nadylam', 'Caroline Chaniolleau', 'Olivier Rabourdin', 'Jérôme Dauchez', 'François Boisrond', 'Kylian Moison', 'Chloé Granier', 'Juliette Mourlon', 'Malika Bejaoui']",3.52,nan,"['Drama', 'Romance']",92,"['France', 'Germany']",French,"['French', 'English']","['SBS Productions', 'KNM']",93106,29308,22154,208,277,694,761,3351,4974,15639,19557,21258,5130,2950,74591,https://letterboxd.com/film/passages-2023/ 5 | Showing Up,2022,Kelly Reichardt,"['Michelle Williams', 'Hong Chau', 'Maryann Plunkett', 'John Magaro', 'André 3000', 'Amanda Plummer', 'Matt Malloy', 'Heather Lawless', 'James Le Gros', 'Denzel Rodriguez', 'Eudora Peterson', 'Judd Hirsch', 'Todd-o-Phonic Todd', 'Lauren Lakis', 'Jean-Luc Boucherot', 'Ted Rooney', 'Ben Coonley', 'Chase Hawkins', 'Izabel Mar', 'William Rihel III', 'Bahni Turpin', 'Dustin Clark', 'Holly Osborne', 'Ethan Benarroch', 'Hanna Caldwell', 'Kevin-Michael Moore', 'Theo Taplitz', 'Mia Bonilla', 'Sam Kamerman', 'Libby Werbel', 'Nova Kopp', 'Margaret Rodini', 'Orianna Milne', 'Mike D Harris', 'Cody Burns', 'Kristina Haddad', 'Victoria E. Henry', 'Kennedy Morris', 'Dvonte Robinson', 'Teal Sherer', 'Rowan Vik']",3.54,nan,"['Comedy', 'Drama']",108,['USA'],English,['English'],"['A24', 'filmscience']",47249,25193,13965,170,163,457,446,1727,2328,6621,8412,10463,3549,1837,36003,https://letterboxd.com/film/showing-up-2022/ 6 | Beyond Utopia,2023,Madeleine Gavin,"['Barbara Demick', 'Kim Sung-eun', 'Lee Hyeon-seo', 'Lee So-yeon', 'Kim Jong-un', 'Kim Jong-il', 'Kim Il-sung', 'Kim Jong-nam', 'Jang Song-thaek', 'Ri Sol-ju', 'Douglas MacArthur']",3.98,nan,"['Documentary', 'History']",116,['USA'],English,"['English', 'Korean']","['Ideal Partners', 'XRM Media', 'RandomGood Foundation', 'Human Rights Foundation', '19340 Productions', 'The deNovo Initiative']",6283,4854,1753,11,49,34,21,70,109,350,682,1680,1009,829,4833,https://letterboxd.com/film/beyond-utopia/ 7 | Samsara,2023,Lois Patiño,"['Amid Keomany', 'Toumor Xiong', 'Simone Milavanh', 'Mariam Vuaa Mtego', 'Juwairiya Idrisa Uwesu']",3.81,nan,"['Drama', 'Fantasy']",117,['Spain'],Lao,"['Lao', 'Swahili']","['Señor y Señora', 'Filmin']",3382,1747,1256,42,10,13,16,66,102,304,411,730,353,391,2396,https://letterboxd.com/film/samsara-2023/ 8 | "Are You There God? It's Me, Margaret.",2023,Kelly Fremon Craig,"['Abby Ryder Fortson', 'Rachel McAdams', 'Kathy Bates', 'Elle Graham', 'Benny Safdie', 'Amari Alexis Price', 'Katherine Mallen Kupferer', 'Kate MacCluggage', 'Aidan Wojtak-Hissong', 'Landon S. Baxter', 'Echo Kellum', 'Mia Dillon', 'Gary Houston', 'Mackenzie Joy Potter', 'Olivia Williams', 'Mike Platarote Jr.', 'Simms May', 'Zack Brooks', 'JeCobi Swain', 'Wilbur Fitzgerald', 'Ethan McDowell', 'Sloane Warren', 'Isol Young', 'Eden Lee', 'Naida Nelson', 'Tahirah Harrison', 'Zach Humphrey', 'Karen Aruj', 'Judy Blume', 'George Cooper', 'Joan Jackson', 'Stephen Jackson', 'Robert Haulbrook', 'Johnny Land', 'Jennifer Errington', 'Evan Bergman', 'Michael Wolk', 'Karen Macarah', 'Ariel DiDonato', 'Claude Deuce', 'Keya Hamilton', 'Tanya J. McClellan', 'Dennis Delamar', 'Samantha LeBrocq', 'Wally White', 'Holli Saperstein', 'Deborah Helms', 'Cooper Herrett', 'Gezell Fleming', 'Jim France', 'Rakeem Massingill', 'Ian Ottis Goff']",3.81,nan,"['Drama', 'Comedy']",107,['USA'],English,"['English', 'Hebrew (modern)']","['Gracie Films', 'Lionsgate']",182546,61820,64955,509,176,366,398,1978,3510,17457,33347,61207,18702,16104,153245,https://letterboxd.com/film/are-you-there-god-its-me-margaret/ 9 | The Eight Mountains,2022,"Felix van Groeningen, Charlotte Vandermeersch","['Luca Marinelli', 'Alessandro Borghi', 'Lupo Barbiero', 'Cristiano Sassella', 'Elisabetta Mazzullo', 'Andrea Palma', 'Surakshya Panta', 'Elena Lietti', 'Filippo Timi', 'Elisa Zanotto', 'Chiara Jorrioz', 'Gualtiero Burzi', 'Francesco Palombelli', 'Paolo Cognetti', 'Benedetto Patruno', 'Iris Barbiero', 'Alex Sassella', 'Fiammetta Olivieri', 'Adriano Favre', 'Leandro Gago', 'Daniela De Pellegrin', 'Aurora Pernici', 'Ermes Piffer', 'Cheche Gurung', 'Wangdi Gurung', 'Eric Olsen', 'Dagny Mjos', 'Marco Spataro', 'Stefano Percino', 'Emrik Favre']",4.0,nan,['Drama'],147,"['Belgium', 'France', 'Italy', 'UK']",Italian,"['Italian', 'Nepali', 'English']","['Pyramide Productions', 'Vision Distribution', 'Menuet', 'Wildside', 'Elastic Film', 'Rufus']",41869,11753,14163,664,21,95,104,452,804,3137,5568,11845,5915,5567,33508,https://letterboxd.com/film/the-eight-mountains/ 10 | No Bears,2022,Jafar Panahi,"['Jafar Panahi', 'Naser Hashemi', 'Vahid Mobaser', 'Bakhtiyar Panjeei', 'Mina Kavani', 'Narges Delaram', 'Abdolreza Heydari', 'Amir Davar', 'Darya Alei', 'Sinan Yusufoglu', 'Rahim Abbasi', 'Ehsan Ahmad Khanpour', 'Iman Bazyar']",3.84,nan,"['Romance', 'Drama']",107,['Iran'],Persian (Farsi),"['Persian (Farsi)', 'Azerbaijani', 'Portuguese', 'Turkish']",['JP Production'],17089,8266,5041,27,12,50,61,230,376,1615,2894,4629,1715,1091,12673,https://letterboxd.com/film/no-bears/ 11 | Saint Omer,2022,Alice Diop,"['Kayije Kagame', 'Guslagie Malanda', 'Aurélia Petit', 'Valérie Dréville', 'Xavier Maly', 'Robert Cantarella', 'Salimata Kamate', 'Thomas De Pourquery', 'Adama Diallo Tamba', 'Mariam Diop', 'Dado Diop', 'Charlotte Clamens', 'Seyna Kane', 'Coumba-Mar Thiam', 'Binta Thiam', 'Alain Payen', 'Louise Lemoine Torrès', 'Roald Iamonte', 'Christelle Lefait', 'Yann Lehoux']",3.76,nan,"['Crime', 'Drama']",123,['France'],French,"['French', 'Portuguese']","['Srab Films', 'Pictanovo Région Hauts de France', 'ARTE France Cinéma', 'Canal+', 'Ciné+', 'CNC', 'La Région Île-de-France', 'Région Hauts-de-France', 'Indéfilms 10', 'ARTE', 'Fonds Images de la Diversité', 'Agence Nationale pr Cohésion des Territoires', 'ARTE/Cofinova 18', 'Ciclic - Région Centre', 'Super']",29454,14578,7625,123,76,212,226,827,1242,3338,4830,6958,2595,1913,22217,https://letterboxd.com/film/saint-omer/ 12 | Blackwater,2023,Mikael Marcimain,"['Asta Kamma August', 'Pernilla August', 'Rolf Lassgård', 'Sven Boräng', 'Alba August', 'Alva Adermark', 'Liam Gabrielsson Lövbrand', 'Erik Ehn', 'Liv Mjönes', 'Magnus Krepper', 'Alma Pöysti', 'Lucas Grimstedt', 'Jesper Sjölander', 'Ulf Rönnerstrand', 'Christian Fandango Sundgren', 'Rolf Degerlund', 'Kaj Snijder', 'William Beijer', 'Albert Berglund', 'Linda Wincent', 'Cecilia Nilsson', 'Ingmar Virta', 'Nathalie Williamsdotter', 'Kalle Lagerström', 'Emelie Jonsson', 'Harleen Kalkat', 'Malin Vispe']",3.47,nan,"['Drama', 'Crime']",nan,['Sweden'],Swedish,['Swedish'],['Apple Tree Productions'],508,61,64,0,0,6,6,17,23,85,96,108,9,20,370,https://letterboxd.com/film/blackwater-2023/ 13 | The Teachers’ Lounge,2023,İlker Çatak,"['Leonie Benesch', 'Leonard Stettnisch', 'Eva Löbau', 'Michael Klammer', 'Rafael Stachowiak', 'Sarah Bauerett', 'Kathrin Wehlisch', 'Anne-Kathrin Gummich', 'Katharina M. Schubert', 'Uygar Tamer', 'Özgür Karadeniz', 'Tim Porath', 'Kersten Reimann', 'Katinka Auberger', 'Canan Samadi', 'Benjamin Bishop', 'Henriette Sievers', 'Johanna Götting', 'Jade Nadarajah', 'Goya Rego', 'Yaw Boah-Amponsem', 'Oskar Zickur', 'Antonia Luise Krämer', 'Elsa Krieger', 'Vincent Stachowiak', 'Can Rodenbostel', 'Padmé Hamdemir', 'Lisa Marie Trense', 'Lotta Wriedt', 'Nelson Pres', 'Josefine Jahn', 'Lewe Wagner', 'Mikail Osanmaz', 'Ruben Kupisch', 'Emma Phu', 'Klara Lindner-Figura', 'Enno Hoppe', 'Ruby L. Kauka', 'Solomon Röthig', 'Zayana Mielke', 'Phileas Spallek', 'Ela Eroğlu']",3.78,nan,['Drama'],98,['Germany'],German,"['German', 'English', 'Polish', 'Turkish']","['if... Productions', 'ZDF', 'ARTE', 'Deutscher Filmförderfonds', 'MOIN Filmförderung Hamburg Schleswig-Holstein', 'Die Beauftragte der Bundesregierung für Kultur und Medien', 'Tandem']",24955,16144,6854,55,66,57,106,348,685,2575,5478,8250,2262,1033,20860,https://letterboxd.com/film/the-teachers-lounge-2023/ 14 | The Taste of Things,2023,Tran Anh Hung,"['Juliette Binoche', 'Benoît Magimel', ""Patrick d'Assumçao"", 'Emmanuel Salinger', 'Jan Hammenecker', 'Frédéric Fisbach', 'Galatéa Bellugi', 'Pierre Gagnaire', 'Bonnie Chagneau-Ravoire', 'Yannik Landrein', 'Sarah Adler', 'Jean-Marc Roulot']",3.84,nan,"['Romance', 'Drama']",135,"['Belgium', 'France']",French,['French'],"['Curiosa Films', 'France 2 Cinéma', 'uMedia', 'Gaumont', 'France Télévisions', 'Canal+', 'Ciné+', 'Région des Pays-de-la-Loire', 'CNC', 'uFund', 'PROCIREP', 'Umedia']",13778,13074,4432,75,50,125,126,323,534,1308,2111,3568,1766,1066,10977,https://letterboxd.com/film/the-taste-of-things/ 15 | Arno,2023,Benjamin Margan,['Manji Ijnam'],nan,nan,nan,7,['France'],No spoken language,['No spoken language'],nan,9,2,1,0,0,0,0,0,0,2,0,0,0,0,2,https://letterboxd.com/film/arno/ 16 | Close,2022,Lukas Dhont,"['Eden Dambrine', 'Gustav De Waele', 'Émilie Dequenne', 'Léa Drucker', 'Igor van Dessel', 'Kevin Janssens', 'Marc Weiss', 'Léon Bataille', 'Serine Ayari', 'Robin Keyaert', 'Herman van Slambrouck', 'Iven Deduytschaver', 'Jeffrey Vanhaeren', 'Hélène Theunissen', 'Baptiste Bataille', 'Pieter Piron', 'Freya De Corte', 'Cachou Kirsch', 'Ahlaam Teghadouini', 'Hervé Guerrisi']",4.09,nan,['Drama'],104,"['Belgium', 'France', 'Netherlands']",French,"['French', 'Dutch']","['Agat Films & Cie / Ex Nihilo', 'Diaphana Films', 'Topkapi Films', 'Versus Production', 'Menuet', 'Eurimages', 'Les Films Velvet', 'VTM', 'RTBF', 'Vlaams Audiovisueel Fonds', 'Nederlands Fonds voor de Film', 'Canal+', 'Ciné+', 'Sacem', ""Centre du Cinéma et de l'Audiovisuel de la FWB"", 'La Culture avec la Copie Privée', 'Casa Kafka Pictures', 'Screen Flanders', 'Lumière']",204532,58761,80700,4500,202,488,506,2414,3873,13825,22877,52909,31198,43615,171907,https://letterboxd.com/film/close-2022/ 17 | Riceboy Sleeps,2022,Anthony Shim,"['Choi Seung-yoon', 'Ethan Hwang', 'Dohyun Noel Hwang', 'Anthony Shim', 'Hunter Dillon', 'Jerina Son', 'Kang In-sung', 'Choi Jong-ryul', 'Lee Yong-nyeo', 'Vanessa Przada', 'Tristan Ranger', 'Aiden Finn', 'Kendra Anderson', 'Ryan Robbins', 'Eric Keenleyside', 'John Cassini', 'Sean Poague', 'Bryce Hodgson']",4.09,nan,['Drama'],117,['Canada'],English,"['English', 'Korean']","['Lonesome Heroes Productions', 'A Lasting Dose Productions', 'Kind Stranger Productions', 'Téléfilm Canada', 'Crave', 'The Harold Greenberg Fund']",12791,5290,5073,260,5,19,20,91,169,688,1478,3579,2259,2020,10328,https://letterboxd.com/film/riceboy-sleeps/ 18 | The Zone of Interest,2023,Jonathan Glazer,"['Christian Friedel', 'Sandra Hüller', 'Medusa Knopf', 'Daniel Holzberg', 'Ralph Herforth', 'Maximilian Beck', 'Sascha Maaz', 'Wolfgang Lampl', 'Johann Karthaus', 'Freya Kreutzkam', 'Lilli Falk', 'Nele Ahrensmeier', 'Stephanie Petrowitz', 'Marie Rosa Tietjen', 'Ralf Zillmann', 'Imogen Kogge', 'Zuzanna Kobiela', 'Julia Polaczek', 'Luis Noah Witte', 'Christopher Manavi', 'Kalman Wilson', 'Martyna Poznanski', 'Anastazja Drobniak', 'Cecylia Pekala', 'Andrey Isaev']",4.08,nan,"['Drama', 'War', 'History']",105,"['Poland', 'UK', 'USA']",Yiddish,"['Yiddish', 'Polish', 'German']","['A24', 'Film4 Productions', 'Access Entertainment', 'PISF', 'JW Films', 'Extreme Emotions']",134189,75793,38010,935,336,772,720,2575,3189,8951,12801,32654,25318,20160,107476,https://letterboxd.com/film/the-zone-of-interest/ 19 | Youth (Spring),2023,Wang Bing,nan,3.72,nan,['Documentary'],212,"['France', 'Luxembourg', 'Netherlands']",Chinese,['Chinese'],"['Yisha Production', 'Gladys Glover', 'House on Fire', 'Chinese Shadows', 'Les Films Fauves']",3112,2570,862,12,8,23,24,75,89,306,495,734,232,154,2140,https://letterboxd.com/film/youth-spring/ 20 | How to Save a Dead Friend,2022,Marusya Syroechkovskaya,"['Marusya Syroechkovskaya', 'Kirill Morev']",3.97,nan,['Documentary'],103,"['France', 'Germany', 'Norway', 'Sweden']",Russian,['Russian'],"['ARTE', 'Sisyfos Film', 'Folke Film', 'Les Films du Tambour de soie', 'RBB', 'Docs Vostok']",2624,1243,990,76,3,10,3,26,45,183,286,598,282,411,1847,https://letterboxd.com/film/how-to-save-a-dead-friend/ 21 | Smoking Causes Coughing,2022,Quentin Dupieux,"['Gilles Lellouche', 'Vincent Lacoste', 'Anaïs Demoustier', 'Jean-Pascal Zadi', 'Oulaya Amamra', 'Alain Chabat', 'David Marsais', 'Julia Faure', 'Adèle Exarchopoulos', 'Grégoire Ludig', 'Doria Tillier', 'Jérôme Niel', 'Blanche Gardin', 'Anthony Sonigo', 'Raphaël Quenard', 'Benoît Poelvoorde', 'Tanguy Mercier', 'Olivier Afonso', 'Ferdinand Canaud', 'Marie Bunel', 'Thémis Terrier-Thiébaux', 'Sava Lolov', 'Charlotte Laemmel', 'Franck Lascombes', 'Frédéric Bonpart', 'José Da Silva', 'Elodie Mareau', 'Lou Tribord', 'Zoé Tribord', 'Benoîte Chivot', 'Jules Dhios Francisco', 'Marie-Pierre Bellefleur']",3.47,nan,"['Comedy', 'Fantasy']",77,['France'],French,['French'],"['Chi-Fou-Mi Productions', 'Gaumont']",28481,8362,7104,37,119,343,346,1266,1968,5130,6196,5184,1039,818,22409,https://letterboxd.com/film/smoking-causes-coughing/ 22 | A Hundred Flowers,2022,Genki Kawamura,"['Masaki Suda', 'Mieko Harada', 'Masami Nagasawa', 'Masatoshi Nagase', 'Yukiya Kitamura', 'Amane Okayama', 'Yumi Kawai', 'Keishi Nagatsuka', 'Yuka Itaya', 'Misuzu Kanno', 'Fusako Urabe']",3.44,nan,['Drama'],104,['Japan'],Japanese,['Japanese'],"['AOI Pro.', 'TOHO', 'Story', 'GAGA Corporation', 'TV Asahi', 'Lawson Entertainment', 'East Japan Marketing & Communications', 'Asahi Broadcasting Corporation', 'Mainichi Shimbun', 'Nippan Group Holdings', 'Filmarks', 'Bungeishunju', 'EMI Records Japan']",1232,383,256,2,3,13,7,34,75,261,283,203,51,47,977,https://letterboxd.com/film/a-hundred-flowers/ 23 | Pacifiction,2022,Albert Serra,"['Benoît Magimel', 'Pahoa Mahagafanau', 'Marc Susini', 'Matahi Pambrun', 'Sergi López', 'Montse Triola', 'Michael Vautor', 'Cécile Guilbert', 'Lluís Serrat', 'Mike Landscape', 'Cyrus Arai', 'Mareva Wong', 'Baptiste Pinteaux', 'Laurent Brissonnaud', 'Florence Garneau', 'Práxedes de Vilallonga', 'Jean-Philippe Tahitua', 'Hinatea Boosie', 'Eva Bourgeois', 'Lorenzo Avve', 'Alexandre Melo']",3.61,nan,"['Thriller', 'Drama']",166,"['France', 'French Polynesia', 'Germany', 'Portugal', 'Spain']",French,"['French', 'Portuguese', 'Tahitian', 'English']","['Andergraun Films', 'Idéale Audience', 'Rosa Filmes', 'ARTE France Cinéma', 'Lupa Film', 'Tamtam Film', 'BR', 'Archipel Production']",18116,9136,5046,172,146,337,283,847,869,1895,2203,3426,1849,1375,13230,https://letterboxd.com/film/pacifiction/ 24 | The Creator,2023,Gareth Edwards,"['John David Washington', 'Madeleine Yuna Voyles', 'Gemma Chan', 'Allison Janney', 'Ken Watanabe', 'Sturgill Simpson', 'Amar Chadha-Patel', 'Marc Menchaca', 'Robbie Tann', 'Ralph Ineson', 'Michael Esper', 'Veronica Ngo', 'Ian Verdun', 'Daniel Ray Rodriguez', 'Rad Pereira', 'Syd Skidmore', 'Karen Aldridge', 'Teerawat Mulvilai', 'Leanna Chea', 'Sahatchai Chumrum', 'Apiwantana Duenkhao', 'Mariam Khummaung', 'Natthaphong Chaiyawong', 'Tawee Teesura', 'Kulsiri Thongrung', 'Charlie McElveen', 'Chananticha Chaipa', 'Sawanee Utoomma', 'Monthatip Suksopha', 'Brett Bartholomew', 'Jeb Kreager', 'Mackenzie Lansing', 'Stephen Howard Thomas', 'Agneta Catarina Békassy de Békas', 'Brett Parks', 'Phaithoon Wanglomklang', 'Ron Weaver', 'Mav Kang', 'John Garrett Mahlmeister', 'Scott Thomas', 'Kandanai Chotikapracal', 'Niko Rusakov', 'James David Henry', ""Eoin O'Brien"", 'Dana Blouin', 'Anjana Ghogar', 'Pongsanart Vinsiri', 'Molywon Phantarak', 'Chalee Sankhavesa', 'Pat Skelton', 'Elliot Berk', 'Art Ybarra']",3.3,nan,"['Action', 'Science Fiction', 'Adventure']",134,"['Canada', 'USA']",English,"['English', 'Japanese', 'Thai', 'Vietnamese']","['New Regency Pictures', 'Entertainment One', 'Regency Enterprises', 'Bad Dreams']",304160,76131,77673,520,944,2807,3898,15326,25877,63582,65874,58543,15377,13776,266004,https://letterboxd.com/film/the-creator-2023/ 25 | Love According to Dalva,2022,Emmanuelle Nicot,"['Zelda Samson', 'Alexis Manenti', 'Fanta Guirassy', 'Sandrine Blancke', 'Marie Denarnaud', ""Jean-Louis Coulloc'h"", 'Maïa Sandoz', 'Charlie Drach', 'Roman Coustère Hachez', 'Diego Murgia', 'Yasmina Maiza', 'Abdelmounim Snoussi', 'Babetida Sadjo', 'Gilles David', 'Romane Mouyal', 'Anne-Laure Penninck', 'Trancillia Bokungu', 'Zaire Souchi', 'Delphine Bibet', 'Eva Azevedo de Sousa', 'Joséphine Lucic', 'Alain Eloy', 'Laetitia Hogday', 'Jérôme Lanvin', 'Fayçal Benbahmed', 'Caroline Vonville']",3.76,nan,['Drama'],83,"['Belgium', 'France']",French,['French'],"['Hélicotronc', 'Tripode Productions', 'ARTE France Cinéma', 'RTBF', 'Proximus', 'Shelter Prod']",6359,2349,1602,21,8,17,15,78,141,698,1307,1914,537,378,5093,https://letterboxd.com/film/love-according-to-dalva/ 26 | Poor Things,2023,Yorgos Lanthimos,"['Emma Stone', 'Mark Ruffalo', 'Willem Dafoe', 'Ramy Youssef', 'Jerrod Carmichael', 'Christopher Abbott', 'Margaret Qualley', 'Suzy Bemba', 'Kathryn Hunter', 'Hanna Schygulla', 'Vicki Pepperdine', 'Jack Barton', 'Charlie Hiscock', 'Attila Dobai', 'Emma Hindle', 'Anders Grundberg', 'Attila Kecskeméthy', 'Jucimar Barbosa', 'Carminho', 'Angela Paula Stander', 'Gustavo Gomes', 'Kate Handford', 'Owen Good', 'Zen Joshua Poisson', 'Vivienne Soan', 'Jerskin Fendrix', 'István Göz', 'Bruna Asdorian', 'Tamás Szabó Sipos', 'Tom Stourton', 'Mascuud Dahir', 'Miles Jovian', 'Jeremy Wheeler', 'János Geréb', 'Patrick de Valette', 'Raphaël Thiéry', 'Boris Gillot', 'Dorina Kovács', 'Yorgos Stefanakos', 'Hubert Benhamdine', 'Gábor Patay', 'Laurent Winkler', 'Andrew Hefler', 'Damien Bonnard', 'Noah Breton', 'Donovan Fouassier', 'Roderick Hill', 'Wayne Brett', 'John Locke', 'Keeley Forsyth', 'David Bromley']",4.23,nan,"['Romance', 'Science Fiction', 'Comedy']",141,"['Ireland', 'UK', 'USA']",English,"['English', 'French', 'Portuguese']","['Searchlight Pictures', 'Film4 Productions', 'TSG Entertainment', 'Element Pictures']",647136,185710,275625,12000,2886,3894,2718,8846,10269,29328,48906,146520,142784,167403,563554,https://letterboxd.com/film/poor-things-2023/ 27 | Pearl,2022,Ti West,"['Mia Goth', 'David Corenswet', 'Tandi Wright', 'Matthew Sunderland', 'Emma Jenkins-Purro', 'Alistair Sewell', 'Amelia Reid', 'Gabe McDonnell', 'Lauren Stewart', 'Todd Rippon', 'Grace Acheson']",3.75,nan,"['Horror', 'Drama']",102,['USA'],English,"['English', 'German']","['A24', 'Little Lamb Productions']",858190,197409,326534,16000,1656,4072,3708,16523,23467,91853,125111,231930,80628,134581,713529,https://letterboxd.com/film/pearl-2022/ 28 | The Territory,2022,Alex Pritz,"['Neidinha Bandeira', 'Bitaté Uru-Eu-Wau-Wau', 'Ari Uru-Eu-Wau-Wau']",3.86,nan,['Documentary'],85,"['Brazil', 'Canada', 'Denmark', 'USA']",Portuguese,"['Portuguese', 'English']","['Documist', 'XTR', 'TIME Studios', 'Protozoa Pictures', 'Passion Pictures', 'Real Lava', 'National Geographic Documentary Films']",5283,3042,1596,16,2,4,7,55,85,470,884,1440,458,583,3988,https://letterboxd.com/film/the-territory-2022/ 29 | EO,2022,Jerzy Skolimowski,"['Sandra Drzymalska', 'Isabelle Huppert', 'Lorenzo Zurzolo', 'Mateusz Kościukiewicz', 'Tomasz Organek', 'Lolita Chammah', 'Agata Sasinowska', 'Anna Rokita', 'Michał Przybysławski', 'Gloria Iradukunda', 'Piotr Szaja', 'Aleksander Janiszewski', 'Delfina Wilkońska', 'Andrzej Szeremeta', 'Wojciech Andrzejuk', 'Mateusz Murański', 'Marcin Drabicki', 'Maciej Stępniak', 'Fernando Junior Gomes da Silva', 'Krzysztof Karczmarz', 'Waldemar Barwiński', 'Saverio Fabbri', 'Katarzyna Russ', 'Kateřina Holánová']",3.56,nan,['Drama'],88,"['Italy', 'Poland']",Polish,"['Polish', 'English', 'Italian', 'French', 'Spanish']","['Skopia Film', 'Alien Films', 'HAKA Films', 'Moderator Inwestycje', 'PISF', 'MiC', 'Regione Lazio']",82725,31840,21583,205,336,853,865,2953,4456,12334,15914,18659,5183,3818,65371,https://letterboxd.com/film/eo/ 30 | Burning Days,2022,Emin Alper,"['Selahattin Paşalı', 'Ekin Koç', 'Selin Yeninci', 'Erol Babaoğlu', 'Erdem Şenocak', 'Sinan Demirer', 'Nizam Namidar', 'Ali Seçkiner Alıcı', 'Eylül Ersöz', 'Onur Gürçay', 'Mehmet Kervancı', 'Hatice Aslan', 'İsmail Bahadır Peker', 'Enver Hüsrevoğlu', 'Emin Alper']",3.89,nan,"['Drama', 'Thriller']",131,"['Croatia', 'France', 'Germany', 'Greece', 'Netherlands', 'Turkey']",Turkish,['Turkish'],"['Liman Film', 'Circe Films', 'Horsefly Productions', '4Film', 'Gloria Films', 'Ay Yapım', 'Zola Yapım', 'The Match Factory']",40649,6451,11754,245,61,109,99,456,734,2703,4688,11169,5961,5409,31389,https://letterboxd.com/film/burning-days/ 31 | Bottoms,2023,Emma Seligman,"['Rachel Sennott', 'Ayo Edebiri', 'Ruby Cruz', 'Havana Rose Liu', 'Kaia Gerber', 'Nicholas Galitzine', 'Miles Fowler', 'Marshawn Lynch', 'Dagmara Domińczyk', 'Punkie Johnson', 'Zamani Wilder', 'Summer Joy Campbell', 'Virginia Tucker', 'Wayne Pére', 'Toby Nichols', 'Cameron Stout', 'Ted Ferguson', 'Bruno Rose', 'Zach Primo', 'Liz Elkins Newcomer', 'Krystal Alayne Chambers', 'Alyssa Matthews']",3.87,nan,['Comedy'],91,['USA'],English,['English'],"['Brownstone Productions', 'Orion Pictures']",765375,155955,323599,16000,2603,5309,4552,17348,22010,72993,98106,182637,81912,173632,661102,https://letterboxd.com/film/bottoms/ 32 | All the Beauty and the Bloodshed,2022,Laura Poitras,"['Nan Goldin', 'Marina Berio', 'David Wojnarowicz', 'Cookie Mueller', 'Noemi Bonazzi', 'Harry Cullen', 'Megan Kapler', 'Annatina Miescher', 'Mike Quinn', 'Patrick Radden Keefe', 'Darryl Pinckney', 'Maggie Smith', 'David Velasco', 'Alexis Pleus', 'Robert Suarez', 'David Armstrong', 'Barbara Goldin', 'Sharon Niesp', 'Arthur Sackler', 'John Waters', 'David Sackler', 'Theresa Sackler', 'Richard Sackler', 'Leonard Bernstein']",4.18,nan,['Documentary'],122,['USA'],English,['English'],['Participant'],59779,26937,21727,418,29,93,98,463,774,2974,5307,14729,10149,10282,44898,https://letterboxd.com/film/all-the-beauty-and-the-bloodshed/ 33 | Jackass Forever,2022,Jeff Tremaine,"['Johnny Knoxville', 'Steve-O', 'Chris Pontius', 'Dave England', 'Jason Acuña', 'Ehren McGhehey', 'Preston Lacy', 'Zach Holmes', 'Sean McInerney', 'Jasper Dolphin', 'Rachel Wolfson', 'Eric Manaka', 'Tory Belleci', 'Nick Merlino', 'Eric André', 'Tony Hawk', 'Francis Ngannou', 'Machine Gun Kelly', 'Tyler, the Creator', 'Spike Jonze', 'Jeff Tremaine', 'Ryan Dunn', 'Brandon DiCamillo', 'Rake Yohn', 'Chris Raab', 'Rob Dyrdek', 'Jess Margera', 'Jalen Ramsey', 'P.K. Subban', 'Travis Bennett', 'Alia Shawkat', 'Compston Wilson', 'Lance Bangs', 'Sydney Bennett', 'Otmara Marrero', ""Danielle O'Toole"", 'Aaron Homoki', 'Dimitry Elyashkevich', 'Courtney Pauroso', 'Lionel Boyce', 'Stephanie Angulo', 'Natalie Palamides', 'David Gravette', 'Sean Cliver', 'Trip Taylor', 'Rick Kosick', 'Shanna Zablow Newton', 'Errol Chatham', 'Parks Bonifay', 'DJ Paul', 'Bam Margera']",3.58,nan,"['Documentary', 'Comedy']",96,['USA'],English,['English'],"['Paramount', 'MTV Entertainment Studios', 'Dickhouse Productions', 'Gorilla Flicks']",234988,46568,67058,231,1092,1862,1447,6042,7671,29428,34348,55107,11962,18072,167031,https://letterboxd.com/film/jackass-forever/ 34 | Kadaisi Vivasayi,2021,M. Manikandan,"['Nallandi', 'Vijay Sethupathi', 'Yogi Babu', 'Muniswaran', 'Kaalaipandiyan', 'Raichal Rabecca Philip']",4.16,nan,['Drama'],145,['India'],Tamil,['Tamil'],['Tribal Art Productions'],6640,2224,3550,192,6,9,15,40,59,197,400,1402,1132,2142,5402,https://letterboxd.com/film/kadaisi-vivasayi/ 35 | Puss in Boots: The Last Wish,2022,Joel Crawford,"['Antonio Banderas', 'Salma Hayek Pinault', 'Harvey Guillén', 'Wagner Moura', 'Florence Pugh', 'Olivia Colman', 'Ray Winstone', 'Samson Kayo', 'John Mulaney', ""Da'Vine Joy Randolph"", 'Anthony Mendez', 'Kevin McCann', 'Bernardo de Paula', 'Betsy Sodaro', 'Artemis Pebdani', 'Conrad Vernon', 'Cody Cameron', 'Kailey Crawford', 'Al Rodrigo', 'Bob Persichetti', 'Miguel Matrai', 'Pilar Uribe', 'Heidi Gardner', 'Joel Crawford', 'Januel Mercado', 'James Ryan', 'Natalia Cronembold', 'Paul Fisher', 'Aydrea Walden']",4.15,nan,"['Animation', 'Family', 'Fantasy', 'Action', 'Comedy', 'Adventure']",103,['USA'],English,"['English', 'Spanish']","['DreamWorks Animation', 'Universal Pictures']",1104146,163862,460973,8000,700,1932,1316,8034,10657,58201,99407,281257,177240,251406,890150,https://letterboxd.com/film/puss-in-boots-the-last-wish/ 36 | Mass,2021,Fran Kranz,"['Martha Plimpton', 'Jason Isaacs', 'Ann Dowd', 'Reed Birney', 'Breeda Wool', 'Michelle N. Carter', 'Kagen Albright', 'Michael White', 'Campbell Spoor']",4.06,nan,['Drama'],111,['USA'],English,['English'],"['7 Eccles Street', 'Circa 1888', '5B Productions']",43095,20750,13344,94,40,72,155,438,653,2851,5885,13253,7820,4679,35846,https://letterboxd.com/film/mass-2021/ 37 | Babylon,2022,Damien Chazelle,"['Brad Pitt', 'Margot Robbie', 'Diego Calva', 'Jean Smart', 'Flea', 'Jovan Adepo', 'J.C. Currais', 'Jimmy Ortega', 'Hansford Prince', 'Telvin Griffin', 'Olivia Wilde', 'Circus-Szalewski', 'Lukas Haas', 'Li Jun Li', 'Kaia Gerber', 'Patrick Fugit', 'Eric Roberts', 'Cici Lau', 'Tyler Seiple', 'Zack Newick', 'Rory Scovel', 'Olivia Hamilton', 'P.J. Byrne', 'Alexandre Chen', 'Bob Clendenin', 'Miraj Grbić', 'Johnny Hoops', 'James Wellington', 'Carlos Nunez', 'Laura Steinel', 'Danny Jolles', 'James Vincent', 'Richard Clarke Larsen', 'Max Minghella', 'Samara Weaving', 'Jeff Garlin', 'Anthony Burkhalter', 'Terry Walters', 'Trisha Simmons', 'Ariel Flores', 'Karolina Szymczak', ""Sean O'Bryan"", 'David Ury', 'Katia Gomez', 'Vanessa Bednar', 'Carson Higgins', 'Armando Cosio', 'Frederick Koehler', 'Spencer Morgan', 'Ric Sarabia', 'Jim Allen Jackson', 'Katherine Waterston', 'Yissendy Trinidad', 'Cyrus Hobbi', 'Anton Hedayat', 'Hayley Huntley', 'John Mariano', 'Christopher Allen', 'Arely Vianet', 'Jeremy Roberts', 'Alex Reznik', 'Chloe Fineman', 'Pat Skipper', 'John Kerry', 'Sarah Ramos', 'Jennifer Grant', 'Julian Lefevre', 'Taylor Nichols', 'Bryan Scott Johnson', 'Kelly Meyer', 'Brenna Power', 'David Abed', 'Kevin Symons', 'Jonathan Thomson', ""Jim O'Brien"", 'Chris Doubek', 'Todd Giebenhain', 'Mather Zickel', 'Ireland Sexton', 'Andrew Hawtrey', 'Mike Fletcher', 'Jonathan Ohye', 'James Crittenden', 'Pete Ploszek', 'Robert Beitzel', 'Ethan Suplee', 'Walker Hare', 'Douglas Fruchey', 'Taylor Hill', 'Marc Platt', 'Stephen Thomas', 'Sophia Magaña', 'Karen Bethzabe', 'Oscar Balderrama', 'Aurielle Simmons', 'Eamon Hunt', 'Kenajuan Bentley', 'John Macey', 'Marcos A. Ferraez', 'Phoebe Tonkin', 'Troy Metcalf', 'Albert Hammond Jr.', 'Cutty Cuthbert', 'Bregje Heinen', 'Dana Marcolina', 'Tal Seder', 'Robert Morgan', 'Nana Ghana', 'Joe Dallesandro', 'E.E. Bell', 'Sol Landerman', 'Karina Fontes', 'Spike Jonze', 'Freya Parker', 'Tobey Maguire', 'Shane Powers', 'David Lau', 'Noah Reilly', 'Jeremy Lappitt', 'Robert Verdi', 'Kenneth Foerch', 'Sean Franz', 'Jonathan Stehney', 'Andrew Leonard', 'Richard Dobeck', 'Alex Budman', 'Jacob Scesney', 'Frank Fontaine', 'Anibal Seminario', 'Scott Mayo', 'Dan Kaneyuki', 'Alex Sadnik', 'John Mitchell', 'Gerald Dixon', 'Rickey D. Woodard', 'Jonathan James Thompson', 'Francis C. Edemobi', 'Larry O. Williams', 'Aaron Shaw', 'Micah Wright', 'Rayner Fernandez', 'Glen Turner', 'Roy Wiegand', 'Bryce Schmidt', 'Sean Billings', 'Aaron O. Smith', 'Justin Gilmore', 'Johnny Britt', 'Keith Beyer', 'Luis Gonzalez', 'Francisco Torres', 'Gary Hickman', 'Steve Suminski', 'Wendell Kelly', 'Byron Sleugh', 'Ryan Porter', 'Jeffery Miller', 'Mykail McDade', 'William Roper', 'Philip Keen', 'Erm Navarro', 'Alvin Starks', 'Robert Murray', 'John Polite', 'Errol Rhoden III', 'Kyle Richter', 'Sidney Hopson', 'Ronald Bruner', 'Dramane Kone', 'Lyndon Rochelle', 'Joey de Leon', 'Dayramir Gonzàlez', 'Greg Sadler', 'Michael Naishtut', 'Joseph Small', 'Avery Baylin', 'Jalen Harvey', 'Lara Wickes', 'Andrew Lederman', 'Karen Han', 'Justin Smith', 'Mateo Pollock', 'Hamed Santigui Camara', 'Brandon Owens', 'John Fluker', 'Jordan Seigel', 'Ralph Nader', 'Kevin Toney', 'Eric Reed', 'John Proulx', 'Michael Bustamante', 'Darrell Alston', 'Evan Greer', 'Gregory Poree', 'Joshua Alfaro', 'Brent Tyler', 'Ian Wurfl', 'Keelan Tobia', 'Justin Hargrove', 'Greg Webster', 'Luis Vadel', 'Benjamin Jacobson', 'Dean Anderson', 'Joel Pargman', 'Steve Huber', 'Eric Boulanger', 'Fernando Arroyo Lascurain', ""Lora'nd Lokustza"", 'Michael Freed', 'Robert Miskey', 'Robin Olson', 'Aaron Oltman', 'Peter Hatch', 'Phillip Triggs', 'Rodney Wirtz', 'Zach Dellinger', 'Benjamin Hoffman', 'Benjamin Penzner', 'Alex Mansour', 'Evgeny Tonkha', 'Michael Kaufman', 'Steve Velez', 'Raymond Newell', 'Del Atkins', 'Edwin Livingston', 'Miguel Norwood', 'Frank Abraham', 'Richard Simon', 'Marlon Martinez', 'Lewis Tan', 'Manny Liotta', 'Anna Chazelle', 'Mike C. Manning', 'Anna Dahl', 'Jennifer Mariela Bermeo', 'Dorian Martin']",3.82,nan,"['Comedy', 'Drama']",189,['USA'],English,"['English', 'Cantonese', 'Spanish']","['Paramount', 'Marc Platt Productions', 'Material Pictures', 'C2 Motion Picture Group', 'Wild Chickens', 'Organism Pictures']",646995,169066,231273,13000,2974,6386,5304,19453,22914,62699,80131,149697,91087,96782,537427,https://letterboxd.com/film/babylon-2022/ 38 | Nest,2022,Hlynur Pálmason,"['Ída Mekkín Hlynsdóttir', 'Grímur Hlynsson', 'Þorgils Hlynsson']",3.89,nan,['Drama'],22,"['Denmark', 'Iceland']",Icelandic,['Icelandic'],"['Snowglobe', 'Join Motion Pictures', 'Det Danske Filminstitut', 'Icelandic Film Centre']",11398,2268,4027,34,8,20,15,102,180,932,1430,2865,793,1037,7382,https://letterboxd.com/film/nest-2022/ 39 | Marcel the Shell with Shoes On,2021,Dean Fleischer Camp,"['Jenny Slate', 'Dean Fleischer Camp', 'Isabella Rossellini', 'Joe Gabler', 'Shari Finkelstein', 'Samuel Painter', 'Blake Hottle', 'Scott Osterman', 'Jeremy Evans', 'Lesley Stahl', 'Rosa Salazar', 'Thomas Mann', 'Sarah Thyre', 'Andy Richter', 'Nathan Fielder', 'Jessi Klein', 'Peter Bonerz', 'Jamie Leonhart', 'Avan Jogia', 'Victoria Justice', ""Conan O'Brien"", 'Brian Williams']",4.23,nan,"['Drama', 'Animation', 'Fantasy', 'Comedy', 'Family']",90,['USA'],English,"['English', 'Portuguese', 'Spanish']","['Cinereach', 'Strongman', 'Chiodo Bros. Productions', 'You Want I Should, LLC', 'Human Woman', 'Sunbeam TV & Films']",264986,94886,116112,4800,446,706,563,2292,3185,13654,24923,63498,44030,66489,219786,https://letterboxd.com/film/marcel-the-shell-with-shoes-on-2021/ 40 | Beautiful Beings,2022,Guðmundur Arnar Guðmundsson,"['Birgir Dagur Bjarkason', 'Áskell Einar Pálmason', 'Viktor Benóný Benediktsson', 'Snorri Rafn Frímannsson', 'Sunna Líf Arnarsdóttir', 'Kamilla Guðrún Lowen', 'Kristín Ísold Jóhannesdóttir', 'Ísgerður Elfa Gunnarsdóttir', 'Aðalbjörg Emma Hafsteinsdóttir', 'Blær Hinriksson', 'Ólafur Darri Ólafsson', 'Anita Briem', 'Theodór Pálsson', 'Davíð Guðbrandsson', 'Þórhildur Ingunn', 'Sólveig Guðmundsdóttir', 'Árni Arnarson', 'Stefán Franz Guðnason', 'Arnar Dan Kristjánsson', 'Bragi Árnason', 'Sigurður Eyberg', 'Mikael Leo Aclipen', 'Arnfinnur Þór Jónsson', 'Baldur Einarsson', 'Stormur Jón Kormákur Baltasarsson', 'Daniel Hans Erlendsson', 'Jónmundur Grétarsson', 'María Pálsdóttir', 'Ebba Guðný Guðmundsdóttir', 'Helga Kristín Helgadóttir', 'Kári Trevor Park']",3.79,nan,['Drama'],123,"['Czechia', 'Denmark', 'Iceland', 'Netherlands', 'Sweden']",Icelandic,"['Icelandic', 'Spanish']","['Bastide Films', 'HOBAB', 'Join Motion Pictures', 'Motor', 'Negativ', 'Film i Väst']",5098,2185,1479,63,1,13,10,85,149,552,881,1403,516,431,4041,https://letterboxd.com/film/beautiful-beings/ 41 | The Blood of the Dinosaurs,2021,Joe Badon,"['Holly Bonney', 'Vincent Stalba', 'Tiffany Christy', 'Stella Creel', 'John Davis', 'Jeff Pearson', 'Christopher Ray', 'Kali Russell', 'Steve Smith']",nan,nan,"['Horror', 'Comedy']",18,['USA'],English,['English'],['Two Headed Venus Production'],187,119,51,1,2,2,2,10,7,30,14,27,3,16,113,https://letterboxd.com/film/the-blood-of-the-dinosaurs/ 42 | Deadstream,2022,"Joseph Winter, Vanessa Winter","['Joseph Winter', 'Melanie Stone', 'Jason K. Wixom', 'Pat Barnett Carr', 'Marty Collins', 'Perla Lacayo', 'Cylia Austin-Lacayo', 'Hayden Gariety', 'Ariel Lee', 'Jaxon Harker', 'Jeremy Warner', 'Brenden Bytheway', 'Doug May', 'Tiffany Bori', 'Vanessa Winter']",3.28,nan,"['Comedy', 'Horror']",87,"['USA', 'UK']",English,['English'],"['Winterspectre Entertainment', 'Jared R Cook Productions', 'Stonehaven Entertainment', 'Freeway CAM B.V.']",49566,18150,14018,35,352,668,764,2277,3253,9863,11528,9824,2067,1635,42231,https://letterboxd.com/film/deadstream/ 43 | Prehistoric Planet,2022,"Adam Valdez, Andrew R. Jones",['David Attenborough'],4.23,nan,['Documentary'],nan,"['UK', 'USA']",English,['English'],"['BBC Studios Natural History Unit', 'Golem Creations']",8861,1687,3693,46,4,8,11,44,59,320,613,1752,1312,2232,6355,https://letterboxd.com/film/prehistoric-planet/ 44 | Bleat,2022,Yorgos Lanthimos,"['Emma Stone', 'Damien Bonnard']",3.57,nan,"['Mystery', 'Drama']",30,['Greece'],No spoken language,['No spoken language'],"['National Ecological Observatory Network', 'Superprime Films']",943,880,324,3,1,4,3,10,16,67,80,182,52,58,473,https://letterboxd.com/film/bleat/ 45 | Three Minutes: A Lengthening,2021,Bianca Stigter,"['Helena Bonham Carter', 'Glenn Kurtz', 'Moszek Tuchendler']",3.73,nan,"['Documentary', 'History']",69,"['Netherlands', 'UK']",English,"['English', 'German', 'Polish']","['Family Affair Films', 'Lammas Park']",2640,1570,641,3,2,4,5,41,77,295,455,627,165,157,1828,https://letterboxd.com/film/three-minutes-a-lengthening/ 46 | Moonfall,2022,Roland Emmerich,"['Halle Berry', 'Patrick Wilson', 'John Bradley', 'Charlie Plummer', 'Kelly Yu', 'Michael Peña', 'Carolina Bartczak', 'Zayn Maloney', 'Ava Weiss', 'Hazel Nugent', 'Chris Sandiford', 'Jonathan Maxwell Silver', 'Eme Ikwuakor', 'Stephen Bogaert', 'Maxim Roy', 'Ryan Bommarito', 'Kathleen Fee', 'Donald Sutherland', 'Frank Schorpion', 'Sebastian Pigott', 'Jaa Smith-Johnson', 'Adam LeBlanc', 'Frank Fiola', 'Katy Breier', 'Josh Cruddas', 'Kyle Gatehouse', 'Tyrone Benskin', 'Gerardo Lo Dico', 'Michelle Langlois Fequet', 'Tyler Elliot Burke', 'Andreas Apergis', 'André Bédard', 'Zachary Amzallag', 'Michael Piotr Czyz', 'Steven Piovesan', 'Jake Lewis', 'Andrew Christopher Albanese', 'Susan Almgren', 'Massimo Diem', 'Kiril Mitev', 'Krista Marchand', 'Sébastien Cimpaye', 'Delia Lisette Chambers', 'Achilles Montes-Vamvas', 'Harry Strandjofski', 'Randy Thomas', 'Robert Brewster', 'Alex Gravenstein', 'Derek Johns', 'Steven Goss', 'Jane Gilchrist', 'Maia Guest', 'Karl Walcott', 'Frank Marrs', 'Kwasi Songui', 'Anthony Jones Nestoras', 'Azriel Dalman', 'Lori Graham', 'David B. Tyler', 'Christopher de Courcy-Ireland', 'Ian Geldart', 'Nicole Leroux', 'Orla Johannes', 'Layla Tuy-Sok', 'Elisabeth Etienne', 'Christian Jadah', 'Julia Thomas', 'Éric Poirier', 'Martin Doepner', 'Paul Zinno', 'Tamara Brown', 'Rea Nolan']",1.92,nan,"['Science Fiction', 'Adventure', 'Action']",131,"['Hong Kong', 'UK', 'USA']",English,"['English', 'Chinese', 'French']","['Centropolis Entertainment', 'Street Entertainment', 'Lionsgate', 'AGC Studios', 'Huayi Tencent Entertainment Company', 'Huayi Brothers International']",124309,26497,13399,84,8568,16355,14983,21724,13521,13340,5256,3817,699,2135,100398,https://letterboxd.com/film/moonfall/ 47 | Play It Safe,2021,Mitch Kalisa,"['Jonathan Ajayi', 'Kate Ovenden', 'Louis Richards', 'Heather Alexander', ""Charlie O'Connor"", 'Kat Ronson', 'Emily Seale-Jones']",3.9,nan,['Drama'],13,['UK'],English,['English'],['COMPULSORY'],3159,790,842,1,5,6,3,27,48,180,329,742,272,268,1880,https://letterboxd.com/film/play-it-safe-2021/ 48 | Hit the Road,2021,Panah Panahi,"[""Hasan Ma'juni"", 'Pantea Panahiha', 'Rayan Sarlak', 'Amin Simiar']",3.9,nan,"['Comedy', 'Drama']",94,['Iran'],Persian (Farsi),"['Persian (Farsi)', 'English']",['JP Production'],25695,10664,8607,241,48,97,118,400,660,2280,3914,7203,3037,2412,20169,https://letterboxd.com/film/hit-the-road-2021/ 49 | Memoria,2021,Apichatpong Weerasethakul,"['Tilda Swinton', 'Agnes Brekke', 'Daniel Giménez Cacho', 'Jerónimo Barón', 'Juan Pablo Urrego', 'Jeanne Balibar', 'Aída Morales', 'Constanza Guitérrez', 'Elkin Díaz', 'Daniel Toro']",3.77,nan,"['Science Fiction', 'Drama', 'Mystery']",136,"['China', 'Colombia', 'France', 'Germany', 'Mexico', 'Switzerland', 'Thailand', 'UK', 'USA']",Spanish,"['Spanish', 'English']","['Anna Sanders Films', 'Burning Blue', 'Illuminations Films', 'Kick the Machine', 'Piano', 'The Match Factory', 'ZDF/Arte', 'Xstream Pictures', 'Sovereign Films', 'Rediance', 'Louverture Films', 'Labo', 'Bord Cadre Films', 'Beijing Contemporary Art Foundation', '185 Films']",69977,30442,21624,746,512,1033,791,2459,2653,6365,7463,13453,7426,7198,49353,https://letterboxd.com/film/memoria-2011/ 50 | The Painter and the Thief,2020,Benjamin Ree,"['Barbora Kysilkova', 'Karl-Bertil Nordland', 'Øystein Stene', 'Linda Ville Marie Ruud', 'Bjørn Inge Nordland']",3.83,nan,['Documentary'],102,"['Norway', 'USA']",Norwegian,"['Norwegian', 'English']","['Medieoperatørene', 'VGTV', 'Dogwoof', 'Tremolo Productions']",12532,5014,3475,23,11,20,36,145,271,1253,2047,3370,1229,940,9322,https://letterboxd.com/film/the-painter-and-the-thief-2020/ 51 | The Rescue,2021,"Elizabeth Chai Vasarhelyi, Jimmy Chin","['Jim Warny', 'Thanet Natisri', 'John Volanthen', 'Derek Anderson', 'Rick Stanton', 'Mikko Paasi', 'Richard Harris', 'Josh Morris', 'Mitch Torrel', 'Craig Challen', 'Ruengrit Changkwanyuen', 'Josh Bratchley', 'Jason Mallinson', 'Connor Roe', 'Fiona Harris', 'Ben Svasti Thomson', 'Chris Jewell', 'Felix Rosen', 'Saman Gunan', 'Vern Unsworth', 'Rob Harper', 'Bhak Loharjun', 'Surathin Chaichoomphu', 'Natnadai Bradwell', 'Singhanat Losuya', 'Waleeporn Gunan', 'Bobby Trarewaxe', 'Somsak Kanakam', 'Tiger Hirankrit', 'Woranan Ratrawiphukkun', 'Anan Surawan', 'Ben Reymenants', 'Nat Lawson', 'Apakorn Youkongkaew', 'Weerasak Kowsurat', 'Anupong Paochinda', 'Bancha Duriyapunt', 'Siriporn Bangnoen']",4.07,nan,"['Documentary', 'Drama']",107,"['Thailand', 'UK', 'USA']",English,"['English', 'German', 'Thai']","['Cavalry Media', 'Little Monster Films', 'National Geographic', 'Ventureland', 'Storyteller Productions', 'Passion Pictures', 'Michael De Luca Productions', 'National Geographic Documentary Films']",43489,11068,11916,29,7,23,30,129,316,2097,5537,15647,5816,4353,33955,https://letterboxd.com/film/the-rescue-2021/ 52 | The Truffle Hunters,2020,"Michael Dweck, Gregory Kershaw","['Carlo Gonella', 'Sergio Cauda', 'Aurelio Conterno', 'Angelo Gagliardi', 'Maria Cicciù', 'Gianfranco Curti', 'Paolo Stacchini', 'Piero Botto', 'Egidio Gagliardi', 'Fiona, the dog']",3.81,nan,['Documentary'],84,"['USA', 'Greece', 'Italy']",Italian,"['Italian', 'English', 'French']","['Faliro House Productions', 'Frenesy Film', 'Park Pictures Features', 'Bow + Arrow Entertainment', 'Artemis Rising', 'Tandem']",10304,3795,3008,60,5,11,19,126,223,1055,1843,2715,842,890,7729,https://letterboxd.com/film/the-truffle-hunters/ 53 | Digital Video Editing with Adobe Premiere Pro: The Real-World Guide to Set Up and Workflow,2020,Hong Seong-yoon,"['Park Soo-yeon', 'Cha Seo-won', 'Seo Hyun-woo', 'Moon Hye-in']",3.62,nan,"['Comedy', 'Romance', 'Horror']",40,['South Korea'],Korean,['Korean'],"['Korean Film Council', 'Central Park Films']",1218,637,454,1,3,6,2,27,20,114,232,261,80,51,796,https://letterboxd.com/film/digital-video-editing-with-adobe-premiere-pro-the-real-world-guide-to-set-up-and-workflow/ 54 | Beginning,2020,Dea Kulumbegashvili,"['Ia Sukhitashvili', 'Rati Oneli', 'Kakha Kintsurashvili', 'Saba Gogichaishvil', 'Giorgi Tsereteli', 'Ia Kokiashvili', 'Mari Kopchenovi']",3.55,nan,['Drama'],126,['Georgia'],Georgian,"['Georgian', 'English']","['First Picture', 'Georgian National Film Centre', 'Zadig Films', 'OFA']",8704,4558,1899,27,53,113,133,373,448,1128,1323,1629,554,410,6164,https://letterboxd.com/film/beginning-2020/ 55 | The Outlaw Johnny Black,2023,Michael Jai White,"['Michael Jai White', 'Anika Noni Rose', 'Erica Ash', 'Byron Minns', 'Kevin Chapman', 'Kym Whitley', 'Tommy Davidson', 'Buddy Lewis', 'Glynn Turman', 'Chris Browning', 'Barry Bostwick', 'Gary Anthony Williams', 'Tony Baker', 'Tyler Bryan', 'Paul Logan']",2.89,nan,"['Western', 'Comedy', 'Action']",137,['USA'],English,['English'],['Jaigantic Studios'],2169,1151,507,1,30,70,113,258,313,439,302,176,36,33,1770,https://letterboxd.com/film/the-outlaw-johnny-black/ 56 | Lamb,2021,Valdimar Jóhannsson,"['Noomi Rapace', 'Hilmir Snær Guðnason', 'Björn Hlynur Haraldsson', 'Ingvar E. Sigurðsson', 'Ester Bibi', 'Sigurður Elvar Viðarson', 'Theodór Ingi Ólafsson', 'Arnþruður Dögg Sigurðardóttir', 'Gunnar Þor Karlsson', 'Lára Björk Hall']",3.13,nan,"['Drama', 'Fantasy', 'Horror']",106,"['Iceland', 'Poland', 'Sweden']",Icelandic,['Icelandic'],"['Black Spark Film & TV', 'Film i Väst', 'Go to Sheep', 'Madants', 'Rabbit Hole Productions', 'Chimney Poland', 'Chimney Sweden']",183935,49172,36807,266,1413,3378,3703,13230,16799,40394,31457,24706,4674,4866,144620,https://letterboxd.com/film/lamb-2021/ 57 | Annette,2021,Leos Carax,"['Adam Driver', 'Marion Cotillard', 'Simon Helberg', 'Devyn McDowell', 'Angèle', 'Natalia Lafourcade', 'Sinay Bavurhe', 'Franziska Grohmann', 'Rachel Mulowayi', 'Christiane Tchouhan', 'Iman Europe', 'Lauren Evans', 'Cindy Almouzni', 'Danielle Withers', 'Julia Bullock', 'Claron McFadden', 'Natalie Mendoza', 'Kiko Mizuhara', 'Noémie Schellens', 'Kanji Furutachi', 'Rila Fukushima', 'Laura Jansen', 'Eva van der Gucht', 'Bettina Meske', 'David E. Moore', 'John Paval', 'Lemuel Pitts', 'Colin Lainchbury-Brown', 'Wim Opbrouck', 'Kait Tenison', 'Rebecca Sjowall', 'Geoffrey Carey', 'Alberto Chromatico', 'Okon Ubanga Jones', 'Gabriela Leguizamo', 'Kamary Phillips', 'Aydogan Abay', 'Arvid Assarsson', 'Jeffrey Dowd', 'Rebecca Dyson-Smith', 'Graciela Maria', 'Clément Ducol', 'Richard McCowen', 'Michael Moore', 'Beatrice Reece', 'Eugene Stovall', 'Sarah Tsehaye', 'Fiora Cutler', 'Ron Mael', 'Russell Mael', 'Marina Bohlen', 'Elke Shari Van Den Broeck', 'Arina Yalaletdinova', 'Ella Leyers', 'Philippe Beyls', 'Amos Kaden Chea', 'Apollo Colligan', 'Sonny Dunlap', 'Yossi Guetta', 'James Larson', 'Adrian Tupas', 'Nastya Golubeva Carax', 'Ai Nishina', 'Ayano', 'Alex Casnoff', 'Patrick Kelly', 'Stevie Nistor', 'Eli Pearl', 'Evan Weiss', 'Ryan Parrish', 'Joe Berry', 'Emmi Joutsi', 'Leos Carax', 'Tyler Matteo', 'Kevin van Doorslaer', 'Verona Verbakel', 'Dominique Dauwe']",3.37,nan,"['Romance', 'Drama']",140,"['Belgium', 'France', 'Germany', 'Greece', 'Japan', 'Mexico', 'Switzerland']",English,"['English', 'French']","['Eurospace', 'Detailfilm', 'ARTE France Cinéma', 'CG Cinéma', 'Garidi Films', 'Théo Films', 'Tribus P Films', 'UGC', 'SCOPE Pictures', 'Wrong Men', 'Piano']",127616,42592,31142,637,1564,3082,2571,7461,7798,16392,17799,22157,8841,7722,95387,https://letterboxd.com/film/annette/ 58 | Mangrove,2020,Steve McQueen,"['Letitia Wright', 'Shaun Parkes', 'Malachi Kirby', 'Rochenda Sandall', 'Jack Lowden', 'Jodhi May', 'Alex Jennings', 'Thomas Coombes', 'Richard Cordery', 'Gershwyn Eustache Jnr', 'Karl Farrer', 'Joakim Skarli', 'Joe Tucker', 'Rachel Sophia-Anthony', 'Guy Samuels', 'Charlotte Nash', 'Joshua Viner', 'Sam Spruell', 'Nathaniel Martello-White', 'Jumayn Hunter', 'Gary Beadle', 'Richie Campbell']",4.08,nan,['Drama'],127,['UK'],English,['English'],"['Turbine Studios', 'BBC', 'Lammas Park', 'EMU Films']",36019,15119,11456,11,17,56,42,173,377,1671,3847,12393,6159,2669,27404,https://letterboxd.com/film/mangrove-2020/ 59 | Last Night in Soho,2021,Edgar Wright,"['Thomasin McKenzie', 'Anya Taylor-Joy', 'Matt Smith', 'Rita Tushingham', 'Michael Ajao', 'Synnøve Karlsen', 'Pauline McLynn', 'Terence Stamp', 'Diana Rigg', 'Aimée Cassettari', 'Colin Mace', 'Jessie Mei Li', 'Kassius Nelson', 'Rebecca Harrod', 'Alan Mahon', 'Connor Calland', 'Josh Zaré', 'Jacqui-Lee Pryce', 'Elizabeth Berrington', 'James Phelps', 'Oliver Phelps', 'Beth Singh', 'Paul Brightwell', 'Will Rogers', 'Terence Frisch', 'Celeste Dring', 'Jeanie Wishes', 'Andrew Bicknell', 'Adam Sopp', 'Richard Corgan', 'Michael Mears', 'Tom Hartwell', 'Paul Hamilton', 'Wayne Cater', 'Sam Claflin', 'Sam Parks', 'Alan Ruscoe', 'Margaret Nolan', 'Christopher Carrico', 'Kent Goldfinch', 'Ian Harrod', 'Ian Hartley', 'Daniel Maggott', ""Richard O'Sullivan"", 'Michael Jibson', 'Lisa McGrillis', 'Derek Lea', 'Lati Gbaja', 'Paul Riddell', 'Katrina Vasilieva', 'Al Roberts']",3.4,nan,"['Thriller', 'Mystery', 'Horror']",116,"['China', 'UK', 'USA']",English,['English'],"['Focus Features', 'Film4 Productions', 'Perfect World Pictures', 'Working Title Films', 'Complete Fiction', 'Universal Pictures']",746022,149300,211025,5000,2520,7980,9802,37471,49401,118220,125448,143556,43954,52625,590977,https://letterboxd.com/film/last-night-in-soho/ 60 | The Marriage Escape,2020,Johan Nijenhuis,"['Herman Finkers', 'Johanna ter Steege', 'Leonie ter Braak', 'Ferdi Stofmeel', 'Stef Assen', 'Aniek Stokkers', 'Daphne Bunskoek', 'Belinda van der Stoep', 'Ingeborg Uyt den Boogaard']",3.45,nan,"['Drama', 'Comedy']",103,['Netherlands'],Dutch,['Dutch'],"['Johan Nijenhuis & Co', 'Omroep MAX']",1440,223,217,2,2,12,8,49,67,227,302,293,54,48,1062,https://letterboxd.com/film/the-marriage-escape/ 61 | Possessor,2020,Brandon Cronenberg,"['Andrea Riseborough', 'Christopher Abbott', 'Jennifer Jason Leigh', 'Sean Bean', 'Tuppence Middleton', 'Rossif Sutherland', 'Kaniehtiio Horn', 'Raoul Bhaneja', 'Gage Graham-Arbuthnot', 'Gabrielle Graham', 'Christopher Jacot', 'Hanneke Talbot', 'Deragh Campbell', 'Ayesha Mansur Gonsalves', 'Matthew Garlick', 'Daniel Junghuan Park', 'Hrant Alianak', 'Rachael Crawford', 'Kathy Maloney', 'Megan Vincent', 'Danny Waugh', 'Dorren Lee', 'Doug MacLeod']",3.6,nan,"['Science Fiction', 'Thriller', 'Horror']",104,"['Australia', 'Canada', 'UK', 'USA']",English,['English'],"['Rhombus Media', 'Rook Films', 'Particular Crowd', 'Téléfilm Canada', 'Arclight Films', 'Ingenious Media', 'Ontario Creates', 'Crave']",174988,61316,50009,605,501,1163,1264,5034,7773,23742,32880,43973,13286,8498,138114,https://letterboxd.com/film/possessor/ 62 | Kajillionaire,2020,Miranda July,"['Evan Rachel Wood', 'Debra Winger', 'Gina Rodriguez', 'Richard Jenkins', 'Patricia Belcher', 'Kim Estes', ""Da'Vine Joy Randolph"", 'Rachel Redleaf', 'Randy Ryan', 'Mark Ivanir', 'Blanca Araceli', 'Diana Maria Riva', 'Betsy Baker', 'Michelle Gillette', 'Susan James Berger', 'Adam Bartley', 'Michael Twaine', 'Andrew Hawkes', 'David Ury', 'Matthew Downs', 'Samantha Cardona', 'Zachary Barton', 'Jeffrey Nicholas Brown', 'Tabitha Brownstone', 'Ian Casselberry', 'Nikki Castillo', 'Challen Cates', 'Jason Catron', 'Madeleine Coghlan', 'Micah Cohen', 'Matthew Foster', 'Ben Konigsberg', 'Ethan Josh Lee', 'Rebecca Lee Robertson', 'Zena Leigh Logan', 'Brandon Morales', 'Steve Park', 'Wylie Small', 'Trent Walker']",3.68,nan,"['Crime', 'Drama', 'Comedy']",105,['USA'],English,['English'],['Plan B Entertainment'],109341,36265,34471,1300,389,929,959,3285,4525,12660,17722,24101,9394,9260,83224,https://letterboxd.com/film/kajillionaire/ 63 | Little Fish,2020,Chad Hartigan,"['Olivia Cooke', ""Jack O'Connell"", 'SoKo', 'Raúl Castillo', 'David Lennon', 'Mackenzie Cardwell', 'Ross Wirtanen', 'Heather Decksheimer', 'Natalie Smith', 'Ron Robinson', 'Wyatt Cameron', 'Morgana Wyllie', 'Monique Phillips', 'Paul Almeida', 'Toby Hargrave', 'Albert Nicholas', 'Chris Shields', 'Darius Willis', 'Emily Stott', 'Jeff Sanca', 'Jason Simpson', 'Naomi King', 'Sam Spear', 'Malaika Jackson', 'Maxwell Moore', 'Leanne Khol Young', 'Malcolm Boddington', 'Carmen Moore', 'Jason Vaisvila', 'Barbara Patrick', 'Sophie Lui', 'Simon Longmore', 'Joleigh Schultz', 'Peter Ciuffa', 'Bruce Crawford', 'Kwesi Ameyaw', 'Lars Anderson', 'Bobby Stewart', 'Henry Mah', 'Thomas Flynn', 'Katerina Katelieva', 'Anthony Shim', 'Angela Moore']",3.94,nan,"['Science Fiction', 'Drama', 'Romance']",101,"['Canada', 'USA']",English,['English'],"['Automatik Entertainment', 'Oddfellows Entertainment']",33752,13410,14469,1200,26,85,102,438,779,2848,4986,9042,4437,5198,27941,https://letterboxd.com/film/little-fish-2020/ 64 | Nosferatu,2024,Robert Eggers,"['Bill Skarsgård', 'Lily-Rose Depp', 'Nicholas Hoult', 'Aaron Taylor-Johnson', 'Emma Corrin', 'Willem Dafoe', 'Simon McBurney', 'Ralph Ineson', 'Paul Maynard', 'Stacy Thunes']",nan,nan,"['Drama', 'Fantasy', 'Horror']",nan,"['Czechia', 'USA']",English,"['English', 'German', 'Romanian', 'Russian']","['Studio 8', 'Focus Features', 'Stillking Films', 'Maiden Voyage Pictures']",2647,15513,782,0,,,,,,,,,,,0,https://letterboxd.com/film/nosferatu-2024/ 65 | Pieces of a Woman,2020,Kornél Mundruczó,"['Vanessa Kirby', 'Shia LaBeouf', 'Ellen Burstyn', 'Sarah Snook', 'Iliza Shlesinger', 'Benny Safdie', 'Molly Parker', 'Steven McCarthy', 'Tyrone Benskin', 'Frank Schorpion', 'Harry Strandjofski', 'Domenic Di Rosa', 'Jimmie Fails', 'Juliette Casagrande', 'Gayle Garfinkle', 'Vanessa Smythe', 'Nick Walker', 'Sean Tucker', 'Alain Dahan', 'Joelle Jérémie', 'Leisa Reid']",3.49,nan,['Drama'],127,"['Canada', 'Hungary', 'USA']",English,['English'],"['Bron Studios', 'Little Lamb Productions', 'Proton Cinema']",158896,31916,32102,135,286,906,989,5014,7829,26098,31201,32398,7467,6445,118633,https://letterboxd.com/film/pieces-of-a-woman/ 66 | I'm Thinking of Ending Things,2020,Charlie Kaufman,"['Jesse Plemons', 'Jessie Buckley', 'Toni Collette', 'David Thewlis', 'Guy Boyd', 'Hadley Robinson', 'Gus Birney', 'Abby Quinn', 'Colby Minifie', 'Anthony Grasso', 'Teddy Coluca', 'Jason Ralph', 'Oliver Platt', 'Frederick E. Wodlin', 'Ryan Steele', 'Unity Phelan', 'Norman Aaronson', 'Ashlyn Alessi', 'Monica Ayres', 'Julie Chateauvert', 'Ira Temchin', 'Albert Skowronski', 'Kamran Saliani', 'Dannielle Rose', 'Thomas Hatz', 'Brooke Elardo']",3.48,nan,"['Mystery', 'Drama', 'Thriller']",135,['USA'],English,['English'],"['Likely Story', 'Projective Testing Service']",524303,103218,137044,4700,6707,12226,7944,26591,24464,59756,60022,92994,43271,38194,372169,https://letterboxd.com/film/im-thinking-of-ending-things/ 67 | Big Shark,2023,Tommy Wiseau,"['Tommy Wiseau', 'Isaiah LaBorde', 'Mark Valeriano', 'Wayne Douglas Morgan', 'Raul Phoenix', 'Erica Mary Gillheeney', 'Ashton Leigh', 'Joseph Poliquin', 'Jeff Pearson', 'Kaleb Naquin', 'Amber Nicole Dalton', 'Billie Dalton', 'Elaina Guidry', 'Thomas Johnston']",3.14,nan,"['Comedy', 'Horror']",105,['USA'],English,['English'],"['ALLaBorde Films', 'Wiseau-Films']",1695,1042,664,8,147,157,56,70,53,84,50,97,40,399,1153,https://letterboxd.com/film/big-shark/ 68 | -------------------------------------------------------------------------------- /example_output/json/director-joel-coen-films.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "Film_title": "No Country for Old Men", 4 | "Release_year": 2007, 5 | "Director": "Joel Coen, Ethan Coen", 6 | "Cast": [ 7 | "Josh Brolin", 8 | "Javier Bardem", 9 | "Tommy Lee Jones", 10 | "Woody Harrelson", 11 | "Kelly Macdonald", 12 | "Garret Dillahunt", 13 | "Tess Harper", 14 | "Barry Corbin", 15 | "Stephen Root", 16 | "Rodger Boyce", 17 | "Beth Grant", 18 | "Ana Reeder", 19 | "Kit Gwin", 20 | "Zach Hopkins", 21 | "Chip Love", 22 | "Eduardo Antonio Garcia", 23 | "Gene Jones", 24 | "Myk Watford", 25 | "Boots Southerland", 26 | "Kathy Lamkin", 27 | "Johnnie Hector", 28 | "Margaret Bowman", 29 | "Thomas Kopache", 30 | "Jason Douglas", 31 | "Doris Hargrave", 32 | "Rutherford Cravens", 33 | "Matthew Posey", 34 | "George Adelo", 35 | "Mathew Greer", 36 | "Trent Moore", 37 | "Marc Miles", 38 | "Luce Rains", 39 | "Philip Bentham", 40 | "Eric Reeves", 41 | "Josh Meyer", 42 | "Chris Warner", 43 | "Brandon Smith", 44 | "Roland Uribe", 45 | "Richard Jackson", 46 | "Josh Blaylock", 47 | "Caleb Landry Jones", 48 | "Dorsey Ray", 49 | "Angel H. Alvarado Jr.", 50 | "David A. Gomez", 51 | "Milton Hernandez", 52 | "John Mancha", 53 | "Scott Flick", 54 | "Albert Fry Jr.", 55 | "Angelo Martinez", 56 | "James Rishe", 57 | "Elizabeth Slagsvol", 58 | "Rachel Manera" 59 | ], 60 | "Average_rating": 4.33, 61 | "Owner_rating": null, 62 | "Genres": [ 63 | "Crime", 64 | "Thriller", 65 | "Drama" 66 | ], 67 | "Runtime": 122, 68 | "Countries": [ 69 | "USA" 70 | ], 71 | "Original_language": "English", 72 | "Spoken_languages": [ 73 | "English", 74 | "Spanish" 75 | ], 76 | "Studios": [ 77 | "Miramax", 78 | "Scott Rudin Productions", 79 | "Mike Zoss Productions", 80 | "Paramount Vantage" 81 | ], 82 | "Watches": 1553336, 83 | "List_appearances": 253761, 84 | "Likes": 565056, 85 | "Fans": 28000, 86 | "½": 1315, 87 | "★": 3558, 88 | "★½": 2044, 89 | "★★": 11984, 90 | "★★½": 12169, 91 | "★★★": 63872, 92 | "★★★½": 90601, 93 | "★★★★": 304190, 94 | "★★★★½": 223722, 95 | "★★★★★": 351178, 96 | "Total_ratings": 1064633, 97 | "Film_URL": "https://letterboxd.com/film/no-country-for-old-men/" 98 | }, 99 | { 100 | "Film_title": "Fargo", 101 | "Release_year": 1996, 102 | "Director": "Joel Coen", 103 | "Cast": [ 104 | "Frances McDormand", 105 | "William H. Macy", 106 | "Steve Buscemi", 107 | "Peter Stormare", 108 | "Harve Presnell", 109 | "John Carroll Lynch", 110 | "Kristin Rudrüd", 111 | "Bruce Bohne", 112 | "Steve Reevis", 113 | "Steve Park", 114 | "Gary Houston", 115 | "Sally Wingert", 116 | "Larissa Kokernot", 117 | "Melissa Peterman", 118 | "Tony Denman", 119 | "Larry Brandenburg", 120 | "Michelle Hutchison", 121 | "Bain Boehlke", 122 | "Warren Keith", 123 | "Michelle LeDoux", 124 | "Steve Edelman", 125 | "Sharon Anderson", 126 | "Kurt Schweickhardt", 127 | "James Gaulke", 128 | "J. Todd Anderson", 129 | "Michelle Suzanne LeDoux", 130 | "Petra Boden", 131 | "Wayne A. Evenson", 132 | "Cliff Rakerd", 133 | "Jessica Shepherd", 134 | "Peter Schmitz", 135 | "Steven I. Schafer", 136 | "David S. Lomax", 137 | "José Feliciano", 138 | "Bix Skahill", 139 | "Rose Stockton", 140 | "Robert Ozasky", 141 | "John Bandemer", 142 | "Don Wescott", 143 | "Bruce Campbell" 144 | ], 145 | "Average_rating": 4.21, 146 | "Owner_rating": null, 147 | "Genres": [ 148 | "Crime", 149 | "Drama", 150 | "Thriller", 151 | "Comedy" 152 | ], 153 | "Runtime": 98, 154 | "Countries": [ 155 | "UK", 156 | "USA" 157 | ], 158 | "Original_language": "English", 159 | "Spoken_languages": [ 160 | "English" 161 | ], 162 | "Studios": [ 163 | "PolyGram Filmed Entertainment", 164 | "Working Title Films" 165 | ], 166 | "Watches": 1107649, 167 | "List_appearances": 196707, 168 | "Likes": 378185, 169 | "Fans": 11000, 170 | "½": 678, 171 | "★": 1786, 172 | "★½": 1378, 173 | "★★": 7582, 174 | "★★½": 9695, 175 | "★★★": 51772, 176 | "★★★½": 85240, 177 | "★★★★": 246114, 178 | "★★★★½": 140274, 179 | "★★★★★": 188639, 180 | "Total_ratings": 733158, 181 | "Film_URL": "https://letterboxd.com/film/fargo/" 182 | }, 183 | { 184 | "Film_title": "The Big Lebowski", 185 | "Release_year": 1998, 186 | "Director": "Joel Coen", 187 | "Cast": [ 188 | "Jeff Bridges", 189 | "John Goodman", 190 | "Julianne Moore", 191 | "Steve Buscemi", 192 | "David Huddleston", 193 | "Philip Seymour Hoffman", 194 | "Tara Reid", 195 | "Philip Moon", 196 | "Mark Pellegrino", 197 | "Peter Stormare", 198 | "Flea", 199 | "Torsten Voges", 200 | "Jimmie Dale Gilmore", 201 | "Jack Kehler", 202 | "John Turturro", 203 | "James G. Hoosier", 204 | "Carlos Leon", 205 | "Terrence Burton", 206 | "Richard Gant", 207 | "Christian Clemenson", 208 | "Dom Irrera", 209 | "Gérard L'Heureux", 210 | "David Thewlis", 211 | "Lu Elrod", 212 | "Mike Gomez", 213 | "Peter Siragusa", 214 | "Sam Elliott", 215 | "Marshall Manesh", 216 | "Harry Bugin", 217 | "Jesse Flanagan", 218 | "Irene Olga López", 219 | "Luis Colina", 220 | "Ben Gazzara", 221 | "Leon Russom", 222 | "Ajgie Kirkland", 223 | "Jon Polito", 224 | "Aimee Mann", 225 | "Jerry Haleva", 226 | "Jennifer Lamb", 227 | "Warren Keith", 228 | "Wendy Braun", 229 | "Asia Carrera", 230 | "Kiva Dawson" 231 | ], 232 | "Average_rating": 4.13, 233 | "Owner_rating": null, 234 | "Genres": [ 235 | "Crime", 236 | "Comedy" 237 | ], 238 | "Runtime": 117, 239 | "Countries": [ 240 | "UK", 241 | "USA" 242 | ], 243 | "Original_language": "English", 244 | "Spoken_languages": [ 245 | "English", 246 | "Hebrew (modern)", 247 | "Spanish", 248 | "German" 249 | ], 250 | "Studios": [ 251 | "PolyGram Filmed Entertainment", 252 | "Working Title Films", 253 | "Gramercy Pictures" 254 | ], 255 | "Watches": 1203905, 256 | "List_appearances": 189086, 257 | "Likes": 409723, 258 | "Fans": 26000, 259 | "½": 1639, 260 | "★": 4528, 261 | "★½": 3018, 262 | "★★": 15108, 263 | "★★½": 15700, 264 | "★★★": 70153, 265 | "★★★½": 92795, 266 | "★★★★": 229272, 267 | "★★★★½": 124087, 268 | "★★★★★": 204895, 269 | "Total_ratings": 761195, 270 | "Film_URL": "https://letterboxd.com/film/the-big-lebowski/" 271 | }, 272 | { 273 | "Film_title": "Inside Llewyn Davis", 274 | "Release_year": 2013, 275 | "Director": "Joel Coen, Ethan Coen", 276 | "Cast": [ 277 | "Oscar Isaac", 278 | "Carey Mulligan", 279 | "Justin Timberlake", 280 | "Ethan Phillips", 281 | "Robin Bartlett", 282 | "Max Casella", 283 | "Jerry Grayson", 284 | "Jeanine Serralles", 285 | "Adam Driver", 286 | "Stark Sands", 287 | "John Goodman", 288 | "Garrett Hedlund", 289 | "Alex Karpovsky", 290 | "Helen Hong", 291 | "Bradley Mott", 292 | "Michael Rosner", 293 | "Bonnie Rose", 294 | "Jack O'Connell", 295 | "Ricardo Cordero", 296 | "Sylvia Kauders", 297 | "Ian Jarvis", 298 | "Diane Findlay", 299 | "Ian Blackman", 300 | "Steve Routman", 301 | "Susan Blommaert", 302 | "Amelia McClain", 303 | "James Colby", 304 | "Charlotte Booker", 305 | "Mike Houston", 306 | "Sam Haft", 307 | "F. Murray Abraham", 308 | "Jason Shelton", 309 | "Frank Ridley", 310 | "John Ahlin", 311 | "Jake Ryan", 312 | "Declan Bennett", 313 | "Erik Hayden", 314 | "Daniel Everidge", 315 | "Jeff Takacs", 316 | "Nancy Blake", 317 | "Stephen Payne", 318 | "Roberto Lopez", 319 | "Benjamin Pike", 320 | "Marcus Mumford" 321 | ], 322 | "Average_rating": 4.04, 323 | "Owner_rating": null, 324 | "Genres": [ 325 | "Drama", 326 | "Music" 327 | ], 328 | "Runtime": 104, 329 | "Countries": [ 330 | "France", 331 | "UK", 332 | "USA" 333 | ], 334 | "Original_language": "English", 335 | "Spoken_languages": [ 336 | "English" 337 | ], 338 | "Studios": [ 339 | "StudioCanal", 340 | "Anton Capital Entertainment" 341 | ], 342 | "Watches": 407428, 343 | "List_appearances": 120673, 344 | "Likes": 129274, 345 | "Fans": 7200, 346 | "½": 434, 347 | "★": 1316, 348 | "★½": 1136, 349 | "★★": 5888, 350 | "★★½": 7340, 351 | "★★★": 30854, 352 | "★★★½": 43533, 353 | "★★★★": 88571, 354 | "★★★★½": 47545, 355 | "★★★★★": 50727, 356 | "Total_ratings": 277344, 357 | "Film_URL": "https://letterboxd.com/film/inside-llewyn-davis/" 358 | }, 359 | { 360 | "Film_title": "Burn After Reading", 361 | "Release_year": 2008, 362 | "Director": "Ethan Coen, Joel Coen", 363 | "Cast": [ 364 | "George Clooney", 365 | "Frances McDormand", 366 | "Brad Pitt", 367 | "John Malkovich", 368 | "Tilda Swinton", 369 | "Richard Jenkins", 370 | "Elizabeth Marvel", 371 | "David Rasche", 372 | "J.K. Simmons", 373 | "Olek Krupa", 374 | "Michael Countryman", 375 | "Kevin Sussman", 376 | "J.R. Horne", 377 | "Hamilton Clancy", 378 | "Armand Schultz", 379 | "Pun Bandhu", 380 | "Karla Mosley", 381 | "Jeffrey DeMunn", 382 | "Richard Poe", 383 | "Carmen M. Herlihy", 384 | "Raul Aranas", 385 | "Judy Frank", 386 | "Sándor Técsy", 387 | "Yury Tsykun", 388 | "Brian O'Neill", 389 | "Robert Prescott", 390 | "Matt Walton", 391 | "Lori Hammel", 392 | "Crystal Bock", 393 | "Patrick Boll", 394 | "Logan Kulick", 395 | "Dermot Mulroney", 396 | "Robert R. Barry", 397 | "Ted Bouton", 398 | "Bob Bowersox", 399 | "Oliver Buckingham", 400 | "Michael Fawcett", 401 | "William Fowle", 402 | "Charles Gemmill", 403 | "Mitch Giannunzio", 404 | "Cliff Goulet", 405 | "William D. Grey", 406 | "Gary Henderson", 407 | "Ron Kidd", 408 | "Bill Massof", 409 | "Brian McKeon", 410 | "Ken McNeill", 411 | "Tim Miller", 412 | "Jay Parks", 413 | "Roger Rathburn", 414 | "Eric Richardson", 415 | "Bart Wilder", 416 | "Stephen Ananicz", 417 | "Matt Cannon", 418 | "Kimberly Dorsey", 419 | "Lil Rhee", 420 | "Liam Ferguson", 421 | "Matthew James Gulbranson", 422 | "RJ Konner", 423 | "Douglas Nelson", 424 | "Kevin Tan", 425 | "Jacqueline Wright" 426 | ], 427 | "Average_rating": 3.62, 428 | "Owner_rating": null, 429 | "Genres": [ 430 | "Comedy", 431 | "Drama" 432 | ], 433 | "Runtime": 96, 434 | "Countries": [ 435 | "USA", 436 | "UK", 437 | "France" 438 | ], 439 | "Original_language": "English", 440 | "Spoken_languages": [ 441 | "English" 442 | ], 443 | "Studios": [ 444 | "Focus Features", 445 | "StudioCanal", 446 | "Relativity Media", 447 | "Working Title Films", 448 | "Mike Zoss Productions" 449 | ], 450 | "Watches": 491117, 451 | "List_appearances": 66648, 452 | "Likes": 113856, 453 | "Fans": 1300, 454 | "½": 1004, 455 | "★": 2841, 456 | "★½": 2509, 457 | "★★": 12177, 458 | "★★½": 16237, 459 | "★★★": 58213, 460 | "★★★½": 78284, 461 | "★★★★": 93520, 462 | "★★★★½": 25281, 463 | "★★★★★": 17814, 464 | "Total_ratings": 307880, 465 | "Film_URL": "https://letterboxd.com/film/burn-after-reading/" 466 | }, 467 | { 468 | "Film_title": "O Brother, Where Art Thou?", 469 | "Release_year": 2000, 470 | "Director": "Joel Coen", 471 | "Cast": [ 472 | "George Clooney", 473 | "John Turturro", 474 | "Tim Blake Nelson", 475 | "John Goodman", 476 | "Holly Hunter", 477 | "Chris Thomas King", 478 | "Charles Durning", 479 | "Del Pentecost", 480 | "Michael Badalucco", 481 | "J.R. Horne", 482 | "Brian Reddy", 483 | "Wayne Duvall", 484 | "Ed Gale", 485 | "Ray McKinnon", 486 | "Daniel von Bargen", 487 | "Royce D. Applegate", 488 | "Frank Collison", 489 | "Quinn Gasaway", 490 | "Lee Weaver", 491 | "Millford Fortenberry", 492 | "Stephen Root", 493 | "John Locke", 494 | "Gillian Welch", 495 | "A. Ray Ratliff", 496 | "Mia Tate", 497 | "Musetta Vander", 498 | "Christy Taylor", 499 | "April Hardcastle", 500 | "Michael W. Finnell", 501 | "Georgia Rae Rainer", 502 | "Marianna Breland", 503 | "Lindsey Miller", 504 | "Natalie Shedd", 505 | "John McConnell", 506 | "Issac Freeman", 507 | "Wilson Waters Jr.", 508 | "Robert Hamlett", 509 | "Willard Cox", 510 | "Evelyn Cox", 511 | "Suzanne Cox", 512 | "Sidney Cox", 513 | "Buck White", 514 | "Sharon White", 515 | "Cheryl White", 516 | "Ed Snodderly", 517 | "David Holt" 518 | ], 519 | "Average_rating": 3.94, 520 | "Owner_rating": null, 521 | "Genres": [ 522 | "Comedy", 523 | "Adventure", 524 | "Crime" 525 | ], 526 | "Runtime": 107, 527 | "Countries": [ 528 | "France", 529 | "UK", 530 | "USA" 531 | ], 532 | "Original_language": "English", 533 | "Spoken_languages": [ 534 | "English" 535 | ], 536 | "Studios": [ 537 | "Touchstone Pictures", 538 | "Universal Pictures", 539 | "StudioCanal", 540 | "Working Title Films", 541 | "Mike Zoss Productions" 542 | ], 543 | "Watches": 502690, 544 | "List_appearances": 82239, 545 | "Likes": 143926, 546 | "Fans": 4900, 547 | "½": 448, 548 | "★": 1333, 549 | "★½": 1086, 550 | "★★": 5738, 551 | "★★½": 7672, 552 | "★★★": 34849, 553 | "★★★½": 54460, 554 | "★★★★": 104999, 555 | "★★★★½": 40588, 556 | "★★★★★": 45392, 557 | "Total_ratings": 296565, 558 | "Film_URL": "https://letterboxd.com/film/o-brother-where-art-thou/" 559 | }, 560 | { 561 | "Film_title": "The Ballad of Buster Scruggs", 562 | "Release_year": 2018, 563 | "Director": "Joel Coen, Ethan Coen", 564 | "Cast": [ 565 | "Tim Blake Nelson", 566 | "Willie Watson", 567 | "Clancy Brown", 568 | "Danny McCarthy", 569 | "David Krumholtz", 570 | "Thomas Wingate", 571 | "Tim DeZarn", 572 | "E.E. Bell", 573 | "Alejandro Patiño", 574 | "Tom Proctor", 575 | "Clinton Roberts", 576 | "Matthew Willig", 577 | "Jesse Youngblood", 578 | "J.J. Dashnaw", 579 | "James Franco", 580 | "Stephen Root", 581 | "Ralph Ineson", 582 | "Mike Watson", 583 | "Brian Brown", 584 | "Ryan Brown", 585 | "Richard Bucher", 586 | "Jesse Luken", 587 | "Michael Cullen", 588 | "Austin Rising", 589 | "James 'Scotty' Augare", 590 | "Liam Neeson", 591 | "Harry Melling", 592 | "Jiji Hise", 593 | "Paul Rae", 594 | "Tom Waits", 595 | "Sam Dillon", 596 | "Bill Heck", 597 | "Zoe Kazan", 598 | "Grainger Hines", 599 | "Jefferson Mays", 600 | "Prudence Wright Holmes", 601 | "Eric Petersen", 602 | "Doris Hargrave", 603 | "Jackamoe Buzzell", 604 | "Ethan Dubin", 605 | "Jordy Laucomer", 606 | "Thea Lux", 607 | "Bret Hughson", 608 | "Rod Rondeaux", 609 | "Raymond Kurshals", 610 | "Jonjo O'Neill", 611 | "Brendan Gleeson", 612 | "Saul Rubinek", 613 | "Tyne Daly", 614 | "Chelcie Ross", 615 | "Martin Palmer", 616 | "Billy Lockwood", 617 | "Katy Bodenhamer", 618 | "Stephen R. Estler", 619 | "Grace LeSueur", 620 | "Bill Foster" 621 | ], 622 | "Average_rating": 3.65, 623 | "Owner_rating": null, 624 | "Genres": [ 625 | "Comedy", 626 | "Western", 627 | "Drama" 628 | ], 629 | "Runtime": 132, 630 | "Countries": [ 631 | "USA" 632 | ], 633 | "Original_language": "English", 634 | "Spoken_languages": [ 635 | "English" 636 | ], 637 | "Studios": [ 638 | "Mike Zoss Productions" 639 | ], 640 | "Watches": 418209, 641 | "List_appearances": 64532, 642 | "Likes": 102295, 643 | "Fans": 634, 644 | "½": 845, 645 | "★": 2382, 646 | "★½": 2213, 647 | "★★": 10284, 648 | "★★½": 14592, 649 | "★★★": 52164, 650 | "★★★½": 71857, 651 | "★★★★": 90919, 652 | "★★★★½": 24245, 653 | "★★★★★": 16587, 654 | "Total_ratings": 286088, 655 | "Film_URL": "https://letterboxd.com/film/the-ballad-of-buster-scruggs/" 656 | }, 657 | { 658 | "Film_title": "The Tragedy of Macbeth", 659 | "Release_year": 2021, 660 | "Director": "Joel Coen", 661 | "Cast": [ 662 | "Denzel Washington", 663 | "Frances McDormand", 664 | "Alex Hassell", 665 | "Bertie Carvel", 666 | "Brendan Gleeson", 667 | "Corey Hawkins", 668 | "Harry Melling", 669 | "Miles Anderson", 670 | "Kathryn Hunter", 671 | "Matt Helm", 672 | "Moses Ingram", 673 | "Scott Subiono", 674 | "Brian Thompson", 675 | "Lucas Barker", 676 | "Stephen Root", 677 | "Robert Gilbert", 678 | "Ethan Hutchison", 679 | "James Udom", 680 | "Richard Short", 681 | "Sean Patrick Thomas", 682 | "Ralph Ineson", 683 | "Jefferson Mays", 684 | "Olivia Washington", 685 | "Susan James Berger", 686 | "Wayne T. Carr", 687 | "Jacob McCarthy", 688 | "Nancy Daly", 689 | "Kayden Alexander Koshelev", 690 | "Ledger Fuller", 691 | "T.K. Weaver", 692 | "Edward Headington", 693 | "Tim Oakes", 694 | "Peter Janov", 695 | "Max Baker", 696 | "Madison Randolph", 697 | "Phil DiGennaro" 698 | ], 699 | "Average_rating": 3.78, 700 | "Owner_rating": null, 701 | "Genres": [ 702 | "Drama", 703 | "War" 704 | ], 705 | "Runtime": 105, 706 | "Countries": [ 707 | "USA" 708 | ], 709 | "Original_language": "English", 710 | "Spoken_languages": [ 711 | "English" 712 | ], 713 | "Studios": [ 714 | "IAC Films", 715 | "A24" 716 | ], 717 | "Watches": 190067, 718 | "List_appearances": 68989, 719 | "Likes": 53785, 720 | "Fans": 415, 721 | "½": 405, 722 | "★": 978, 723 | "★½": 1016, 724 | "★★": 4020, 725 | "★★½": 5796, 726 | "★★★": 21144, 727 | "★★★½": 31527, 728 | "★★★★": 52052, 729 | "★★★★½": 18396, 730 | "★★★★★": 13310, 731 | "Total_ratings": 148644, 732 | "Film_URL": "https://letterboxd.com/film/the-tragedy-of-macbeth/" 733 | }, 734 | { 735 | "Film_title": "True Grit", 736 | "Release_year": 2010, 737 | "Director": "Joel Coen, Ethan Coen", 738 | "Cast": [ 739 | "Hailee Steinfeld", 740 | "Jeff Bridges", 741 | "Matt Damon", 742 | "Josh Brolin", 743 | "Barry Pepper", 744 | "Dakin Matthews", 745 | "Jarlath Conroy", 746 | "Paul Rae", 747 | "Domhnall Gleeson", 748 | "Elizabeth Marvel", 749 | "Roy Lee Jones", 750 | "Ed Corbin", 751 | "Leon Russom", 752 | "Bruce Green", 753 | "Candyce Hinkle", 754 | "Peter Leung", 755 | "Don Pirl", 756 | "Joe Stevens", 757 | "David Lipman", 758 | "Jake Walker", 759 | "Orlando Storm Smart", 760 | "Ty Mitchell", 761 | "Nicholas Sadler", 762 | "Scott Sowers", 763 | "Jonathan Joss", 764 | "Maggie A. Goodman", 765 | "Brandon Sanderson", 766 | "Ruben Nakai Campana", 767 | "James Brolin", 768 | "J.K. Simmons" 769 | ], 770 | "Average_rating": 3.81, 771 | "Owner_rating": null, 772 | "Genres": [ 773 | "Drama", 774 | "Western", 775 | "Adventure" 776 | ], 777 | "Runtime": 110, 778 | "Countries": [ 779 | "USA" 780 | ], 781 | "Original_language": "English", 782 | "Spoken_languages": [ 783 | "English" 784 | ], 785 | "Studios": [ 786 | "Paramount", 787 | "Scott Rudin Productions", 788 | "Mike Zoss Productions", 789 | "Skydance Media" 790 | ], 791 | "Watches": 416066, 792 | "List_appearances": 72532, 793 | "Likes": 91105, 794 | "Fans": 628, 795 | "½": 279, 796 | "★": 900, 797 | "★½": 917, 798 | "★★": 5226, 799 | "★★½": 8138, 800 | "★★★": 38750, 801 | "★★★½": 59367, 802 | "★★★★": 90596, 803 | "★★★★½": 25636, 804 | "★★★★★": 18364, 805 | "Total_ratings": 248173, 806 | "Film_URL": "https://letterboxd.com/film/true-grit-2010/" 807 | }, 808 | { 809 | "Film_title": "Raising Arizona", 810 | "Release_year": 1987, 811 | "Director": "Joel Coen", 812 | "Cast": [ 813 | "Nicolas Cage", 814 | "Holly Hunter", 815 | "Trey Wilson", 816 | "John Goodman", 817 | "William Forsythe", 818 | "Sam McMurray", 819 | "Frances McDormand", 820 | "Randall \"Tex\" Cobb", 821 | "T.J. Kuhn", 822 | "Lynne Kitei", 823 | "Peter Benedek", 824 | "Charles 'Lew' Smith", 825 | "Warren Keith", 826 | "Henry Kendrick", 827 | "Sidney Dawson", 828 | "Richard Blake", 829 | "Troy Nabors", 830 | "Mary Seibel", 831 | "John O'Donnal", 832 | "Keith Jandacek", 833 | "Warren Forsythe", 834 | "Ruben Young", 835 | "Dennis Sullivan", 836 | "Richard Alexander", 837 | "Rusty Lee", 838 | "James Yeater", 839 | "Bill Andres", 840 | "Carver Barns", 841 | "Margaret H. McCormack", 842 | "Bill Rocz", 843 | "Mary F. Glenn", 844 | "Jeremy Babendure", 845 | "Bill Dobbins", 846 | "Ralph Norton", 847 | "Henry Tank", 848 | "Frank Outlaw", 849 | "Todd Michael Bodgers", 850 | "M. Emmet Walsh", 851 | "Robert Gray", 852 | "Katie Thrasher", 853 | "Derek Russell", 854 | "Nicole Russell", 855 | "Zachary Sanders", 856 | "Noell Sanders", 857 | "Cody Ranger", 858 | "Jeremy Arendt", 859 | "Ashley Hammon", 860 | "Crystal Hiller", 861 | "Olivia Hughes", 862 | "Emily Malin", 863 | "Melanie Malin", 864 | "Craig McLaughlin", 865 | "Adam Savageau", 866 | "Benjamin Savageau", 867 | "David Schneider", 868 | "Michael Stewart", 869 | "William Preston Robertson", 870 | "Ron Cobert" 871 | ], 872 | "Average_rating": 3.86, 873 | "Owner_rating": null, 874 | "Genres": [ 875 | "Crime", 876 | "Comedy" 877 | ], 878 | "Runtime": 94, 879 | "Countries": [ 880 | "USA" 881 | ], 882 | "Original_language": "English", 883 | "Spoken_languages": [ 884 | "English" 885 | ], 886 | "Studios": [ 887 | "Circle Films" 888 | ], 889 | "Watches": 302600, 890 | "List_appearances": 77286, 891 | "Likes": 90162, 892 | "Fans": 2600, 893 | "½": 258, 894 | "★": 774, 895 | "★½": 779, 896 | "★★": 3835, 897 | "★★½": 5748, 898 | "★★★": 25244, 899 | "★★★½": 40313, 900 | "★★★★": 65439, 901 | "★★★★½": 24362, 902 | "★★★★★": 25884, 903 | "Total_ratings": 192636, 904 | "Film_URL": "https://letterboxd.com/film/raising-arizona/" 905 | }, 906 | { 907 | "Film_title": "Hail, Caesar!", 908 | "Release_year": 2016, 909 | "Director": "Joel Coen, Ethan Coen", 910 | "Cast": [ 911 | "Josh Brolin", 912 | "George Clooney", 913 | "Alden Ehrenreich", 914 | "Ralph Fiennes", 915 | "Scarlett Johansson", 916 | "Tilda Swinton", 917 | "Channing Tatum", 918 | "Frances McDormand", 919 | "Jonah Hill", 920 | "Veronica Osorio", 921 | "Heather Goldenhersh", 922 | "Alison Pill", 923 | "Max Baker", 924 | "Fisher Stevens", 925 | "Patrick Fischler", 926 | "Tom Musgrave", 927 | "David Krumholtz", 928 | "Greg Baldwin", 929 | "Patrick Carroll", 930 | "Fred Melamed", 931 | "John Bluthal", 932 | "Alex Karpovsky", 933 | "Armazd Stepanian", 934 | "Allan Havey", 935 | "Robert Pike Daniel", 936 | "Robert Picardo", 937 | "Ian Blackman", 938 | "Geoffrey Cantor", 939 | "Christophe Lambert", 940 | "Robert Trebor", 941 | "Michael Yama", 942 | "Ming Zhao", 943 | "Helen Siff", 944 | "Basil Hoffman", 945 | "Luke Spencer Roberts", 946 | "Ralph P. Martin", 947 | "James Austin Johnson", 948 | "Noah Baron", 949 | "Timm Perry", 950 | "Noel Conlon", 951 | "Natasha Bassett", 952 | "Richard Abraham", 953 | "Jon Daly", 954 | "Dennis Cockrum", 955 | "Clancy Brown", 956 | "Mather Zickel", 957 | "Tiffany Lonsdale", 958 | "Clement von Franckenstein", 959 | "Wayne Knight", 960 | "Jeff Lewis", 961 | "Kyle Bornheimer", 962 | "Josh Cooke", 963 | "Peter Jason", 964 | "Stephen Ellis", 965 | "Jillian Armenante", 966 | "Jacob Witkin", 967 | "Jack Huston", 968 | "Agyness Deyn", 969 | "Emily Beecham", 970 | "Benjamin Beatty", 971 | "J.R. Horne", 972 | "Caitlin Muelder", 973 | "E.E. Bell", 974 | "Kate Morgan Chadwick", 975 | "Brian Michael Jones", 976 | "Peter Banifaz", 977 | "Clifton Samuels", 978 | "K.C. Reischerl", 979 | "Jeremy Davis", 980 | "Marcos Ochoa", 981 | "Colin Bradbury", 982 | "Ryan Breslin", 983 | "Tyler Hanes", 984 | "Casey Garvin", 985 | "Luke Hawkins", 986 | "Evan Kasprzak", 987 | "Patrick Lavallee", 988 | "Adam Perry", 989 | "Ryan VanDenBoom", 990 | "Alex Demkin", 991 | "Dax Hock", 992 | "Shesha Marvin", 993 | "Mark Stuart", 994 | "Forrest Walsh", 995 | "Michael Gambon", 996 | "Tomoko Karina", 997 | "Dolph Lundgren", 998 | "Dean England", 999 | "Sandy Mansson", 1000 | "Jessee Foudray", 1001 | "Ryan Izay", 1002 | "Johnny Otto", 1003 | "Sergio Kato" 1004 | ], 1005 | "Average_rating": 3.25, 1006 | "Owner_rating": null, 1007 | "Genres": [ 1008 | "Crime", 1009 | "Comedy", 1010 | "Mystery" 1011 | ], 1012 | "Runtime": 106, 1013 | "Countries": [ 1014 | "UK", 1015 | "USA" 1016 | ], 1017 | "Original_language": "English", 1018 | "Spoken_languages": [ 1019 | "English" 1020 | ], 1021 | "Studios": [ 1022 | "Universal Pictures", 1023 | "Mike Zoss Productions", 1024 | "Working Title Films" 1025 | ], 1026 | "Watches": 314883, 1027 | "List_appearances": 53829, 1028 | "Likes": 54167, 1029 | "Fans": 236, 1030 | "½": 1303, 1031 | "★": 3952, 1032 | "★½": 3517, 1033 | "★★": 16343, 1034 | "★★½": 21080, 1035 | "★★★": 54541, 1036 | "★★★½": 45874, 1037 | "★★★★": 38225, 1038 | "★★★★½": 8497, 1039 | "★★★★★": 5420, 1040 | "Total_ratings": 198752, 1041 | "Film_URL": "https://letterboxd.com/film/hail-caesar-2016/" 1042 | }, 1043 | { 1044 | "Film_title": "A Serious Man", 1045 | "Release_year": 2009, 1046 | "Director": "Joel Coen, Ethan Coen", 1047 | "Cast": [ 1048 | "Michael Stuhlbarg", 1049 | "Richard Kind", 1050 | "Fred Melamed", 1051 | "Sari Lennick", 1052 | "Aaron Wolff", 1053 | "Jessica McManus", 1054 | "Peter Breitmayer", 1055 | "Brent Braunschweig", 1056 | "David Kang", 1057 | "Benjamin Portnoe", 1058 | "Jack Swiler", 1059 | "Andrew S. Lentz", 1060 | "Jon Kaminski Jr.", 1061 | "Ari Hoptman", 1062 | "Alan Mandell", 1063 | "Amy Landecker", 1064 | "George Wyner", 1065 | "Michael Tezla", 1066 | "Katherine Borowitz", 1067 | "Steve Park", 1068 | "Allen Lewis Rickman", 1069 | "Yelena Shmulenson", 1070 | "Fyvush Finkel", 1071 | "Ronald Schultz", 1072 | "Raye Birk", 1073 | "Jane Hammill", 1074 | "Claudia Wilkens", 1075 | "Simon Helberg", 1076 | "Adam Arkin", 1077 | "James Cada", 1078 | "Michael Lerner", 1079 | "Charles Brin", 1080 | "Michael Engel", 1081 | "Tyson Bidner", 1082 | "Phyllis Harris", 1083 | "Piper Sigel-Bruse", 1084 | "Hannah Nemer", 1085 | "Rita Vassallo", 1086 | "Warren Keith", 1087 | "Neil Newman", 1088 | "Tim Russell", 1089 | "Jim Lichtscheidl", 1090 | "Wayne A. Evenson", 1091 | "Scott Thompson Baker", 1092 | "Landyn Banx", 1093 | "Punnavith Koy", 1094 | "Joel Thingvall", 1095 | "Amanda Day" 1096 | ], 1097 | "Average_rating": 3.88, 1098 | "Owner_rating": null, 1099 | "Genres": [ 1100 | "Comedy", 1101 | "Drama" 1102 | ], 1103 | "Runtime": 106, 1104 | "Countries": [ 1105 | "USA", 1106 | "UK", 1107 | "France" 1108 | ], 1109 | "Original_language": "English", 1110 | "Spoken_languages": [ 1111 | "English", 1112 | "Hebrew (modern)", 1113 | "Italian", 1114 | "Yiddish" 1115 | ], 1116 | "Studios": [ 1117 | "Mike Zoss Productions", 1118 | "Focus Features", 1119 | "Relativity Media", 1120 | "Working Title Films", 1121 | "StudioCanal" 1122 | ], 1123 | "Watches": 226159, 1124 | "List_appearances": 59286, 1125 | "Likes": 57803, 1126 | "Fans": 2000, 1127 | "½": 426, 1128 | "★": 1000, 1129 | "★½": 937, 1130 | "★★": 4184, 1131 | "★★½": 5592, 1132 | "★★★": 19988, 1133 | "★★★½": 27651, 1134 | "★★★★": 44475, 1135 | "★★★★½": 21449, 1136 | "★★★★★": 19703, 1137 | "Total_ratings": 145405, 1138 | "Film_URL": "https://letterboxd.com/film/a-serious-man/" 1139 | }, 1140 | { 1141 | "Film_title": "Blood Simple", 1142 | "Release_year": 1984, 1143 | "Director": "Joel Coen", 1144 | "Cast": [ 1145 | "John Getz", 1146 | "Frances McDormand", 1147 | "Dan Hedaya", 1148 | "M. Emmet Walsh", 1149 | "Samm-Art Williams", 1150 | "Deborah Neumann", 1151 | "Raquel Gavia", 1152 | "Van Brooks", 1153 | "Señor Marco", 1154 | "William Creamer", 1155 | "Loren Bivens", 1156 | "Bob McAdams", 1157 | "Shannon Sedwick", 1158 | "Nancy Finger", 1159 | "William Preston Robertson", 1160 | "Holly Hunter", 1161 | "Barry Sonnenfeld" 1162 | ], 1163 | "Average_rating": 3.9, 1164 | "Owner_rating": null, 1165 | "Genres": [ 1166 | "Crime", 1167 | "Drama", 1168 | "Thriller" 1169 | ], 1170 | "Runtime": 97, 1171 | "Countries": [ 1172 | "USA" 1173 | ], 1174 | "Original_language": "English", 1175 | "Spoken_languages": [ 1176 | "English" 1177 | ], 1178 | "Studios": [ 1179 | "River Road Productions", 1180 | "Foxton Entertainment" 1181 | ], 1182 | "Watches": 176259, 1183 | "List_appearances": 60637, 1184 | "Likes": 51388, 1185 | "Fans": 471, 1186 | "½": 109, 1187 | "★": 315, 1188 | "★½": 362, 1189 | "★★": 1908, 1190 | "★★½": 3324, 1191 | "★★★": 14756, 1192 | "★★★½": 27126, 1193 | "★★★★": 47683, 1194 | "★★★★½": 18015, 1195 | "★★★★★": 11450, 1196 | "Total_ratings": 125048, 1197 | "Film_URL": "https://letterboxd.com/film/blood-simple/" 1198 | }, 1199 | { 1200 | "Film_title": "Barton Fink", 1201 | "Release_year": 1991, 1202 | "Director": "Joel Coen", 1203 | "Cast": [ 1204 | "John Turturro", 1205 | "John Goodman", 1206 | "Judy Davis", 1207 | "Michael Lerner", 1208 | "Tony Shalhoub", 1209 | "John Mahoney", 1210 | "Jon Polito", 1211 | "Steve Buscemi", 1212 | "David Warrilow", 1213 | "Richard Portnow", 1214 | "Christopher Murney", 1215 | "I.M. Hobson", 1216 | "Meagen Fay", 1217 | "Lance Davis", 1218 | "Harry Bugin", 1219 | "Anthony Gordon", 1220 | "Jack Denbo", 1221 | "Max Grodénchik", 1222 | "Robert Beecher", 1223 | "Darwyn Swalve", 1224 | "Gayle Vance", 1225 | "Johnny Judkins", 1226 | "Jana Marie Hupp", 1227 | "Isabelle Townsend", 1228 | "William Preston Robertson", 1229 | "Mamie Jean Calvert", 1230 | "Frances McDormand", 1231 | "Bubba Dean Rambo", 1232 | "Barry Sonnenfeld", 1233 | "Vincent Tumeo", 1234 | "Rob Wegner", 1235 | "Linda Wood", 1236 | "William H. Macy" 1237 | ], 1238 | "Average_rating": 4.06, 1239 | "Owner_rating": null, 1240 | "Genres": [ 1241 | "Drama", 1242 | "Comedy" 1243 | ], 1244 | "Runtime": 117, 1245 | "Countries": [ 1246 | "UK", 1247 | "USA" 1248 | ], 1249 | "Original_language": "English", 1250 | "Spoken_languages": [ 1251 | "English" 1252 | ], 1253 | "Studios": [ 1254 | "Working Title Films", 1255 | "Circle Films", 1256 | "20th Century Fox" 1257 | ], 1258 | "Watches": 175921, 1259 | "List_appearances": 56188, 1260 | "Likes": 49087, 1261 | "Fans": 953, 1262 | "½": 120, 1263 | "★": 365, 1264 | "★½": 328, 1265 | "★★": 1765, 1266 | "★★½": 2532, 1267 | "★★★": 10962, 1268 | "★★★½": 18993, 1269 | "★★★★": 40091, 1270 | "★★★★½": 19640, 1271 | "★★★★★": 16671, 1272 | "Total_ratings": 111467, 1273 | "Film_URL": "https://letterboxd.com/film/barton-fink/" 1274 | }, 1275 | { 1276 | "Film_title": "Miller's Crossing", 1277 | "Release_year": 1990, 1278 | "Director": "Joel Coen", 1279 | "Cast": [ 1280 | "Gabriel Byrne", 1281 | "Marcia Gay Harden", 1282 | "John Turturro", 1283 | "Jon Polito", 1284 | "J.E. Freeman", 1285 | "Albert Finney", 1286 | "Mike Starr", 1287 | "Al Mancini", 1288 | "Steve Buscemi", 1289 | "Richard Woods", 1290 | "Tom Toner", 1291 | "Mario Todisco", 1292 | "Olek Krupa", 1293 | "Michael Jeter", 1294 | "Lanny Flaherty", 1295 | "Jeanette Kontomitras", 1296 | "Louis Charles Mounicou III", 1297 | "John McConnell", 1298 | "Danny Aiello III", 1299 | "Helen Jolly", 1300 | "Hilda McLean", 1301 | "Monte Starr", 1302 | "Don Picard", 1303 | "Salvatore H. Tornabene", 1304 | "Kevin Dearie", 1305 | "Michael Badalucco", 1306 | "Charles Ferrara", 1307 | "Esteban Fernández", 1308 | "George Fernandez", 1309 | "Charles Gunning", 1310 | "Dave Drinkx", 1311 | "David Darlow", 1312 | "Robert LaBrosse", 1313 | "Carl Rooney", 1314 | "Jack Harris", 1315 | "Jery Hewitt", 1316 | "Sam Raimi", 1317 | "John Schnauder Jr.", 1318 | "Zolly Levin", 1319 | "Joey Ancona", 1320 | "Bill Raye", 1321 | "William Preston Robertson", 1322 | "MIchael P. Cahill", 1323 | "Frances McDormand" 1324 | ], 1325 | "Average_rating": 3.99, 1326 | "Owner_rating": null, 1327 | "Genres": [ 1328 | "Drama", 1329 | "Thriller", 1330 | "Crime" 1331 | ], 1332 | "Runtime": 115, 1333 | "Countries": [ 1334 | "USA" 1335 | ], 1336 | "Original_language": "English", 1337 | "Spoken_languages": [ 1338 | "English", 1339 | "Irish", 1340 | "Italian", 1341 | "Yiddish" 1342 | ], 1343 | "Studios": [ 1344 | "Circle Films", 1345 | "20th Century Fox" 1346 | ], 1347 | "Watches": 136661, 1348 | "List_appearances": 49173, 1349 | "Likes": 36667, 1350 | "Fans": 1000, 1351 | "½": 75, 1352 | "★": 258, 1353 | "★½": 298, 1354 | "★★": 1487, 1355 | "★★½": 2352, 1356 | "★★★": 10372, 1357 | "★★★½": 17206, 1358 | "★★★★": 32330, 1359 | "★★★★½": 14571, 1360 | "★★★★★": 12268, 1361 | "Total_ratings": 91217, 1362 | "Film_URL": "https://letterboxd.com/film/millers-crossing/" 1363 | }, 1364 | { 1365 | "Film_title": "The Man Who Wasn't There", 1366 | "Release_year": 2001, 1367 | "Director": "Joel Coen", 1368 | "Cast": [ 1369 | "Billy Bob Thornton", 1370 | "Frances McDormand", 1371 | "Michael Badalucco", 1372 | "James Gandolfini", 1373 | "Katherine Borowitz", 1374 | "Jon Polito", 1375 | "Scarlett Johansson", 1376 | "Richard Jenkins", 1377 | "Tony Shalhoub", 1378 | "Christopher Kriesa", 1379 | "Brian Haley", 1380 | "Jack McGee", 1381 | "Gregg Binkley", 1382 | "Alan Fudge", 1383 | "Lilyan Chauvin", 1384 | "Adam Alexi-Malle", 1385 | "Ted Rooney", 1386 | "Abraham Benrubi", 1387 | "Christian Ferratti", 1388 | "Rhoda Gemignani", 1389 | "E.J. Callahan", 1390 | "Brooke Smith", 1391 | "Ron Ross", 1392 | "Hallie Singleton", 1393 | "Jon Donnelly", 1394 | "Dan Martin", 1395 | "Nicholas Lanier", 1396 | "Tom Dahlgren", 1397 | "Booth Colman", 1398 | "Stanley DeSantis", 1399 | "Peter Siragusa", 1400 | "Christopher McDonald", 1401 | "Rick Scarry", 1402 | "George Ives", 1403 | "Devon Cole Borisoff", 1404 | "Mary Bogue", 1405 | "Don Donati", 1406 | "Arthur Reeves", 1407 | "Michelle Weber", 1408 | "Randi Cee", 1409 | "Robert Loftin", 1410 | "Kenneth Hughes", 1411 | "Gordon Hart", 1412 | "Brenda Mae Hamilton", 1413 | "Lloyd Gordon", 1414 | "Leonard Crofoot", 1415 | "Rita Bland", 1416 | "Audrey K. Baranishyn", 1417 | "Qyn Hughes", 1418 | "Rachel McDonald", 1419 | "Jennifer Jason Leigh", 1420 | "Seymour Cassel", 1421 | "Craig Berenson", 1422 | "Joan Blair", 1423 | "Greg Bronson", 1424 | "Geoffrey Gould", 1425 | "Paul G. Gray", 1426 | "Phil Hawn", 1427 | "Cherilyn Hayres", 1428 | "John Michael Higgins", 1429 | "Pete Schrum", 1430 | "Max Thayer" 1431 | ], 1432 | "Average_rating": 3.91, 1433 | "Owner_rating": null, 1434 | "Genres": [ 1435 | "Drama", 1436 | "Crime" 1437 | ], 1438 | "Runtime": 116, 1439 | "Countries": [ 1440 | "UK", 1441 | "USA" 1442 | ], 1443 | "Original_language": "English", 1444 | "Spoken_languages": [ 1445 | "English", 1446 | "French", 1447 | "Italian" 1448 | ], 1449 | "Studios": [ 1450 | "Good Machine", 1451 | "Mike Zoss Productions", 1452 | "Working Title Films", 1453 | "USA Films" 1454 | ], 1455 | "Watches": 92673, 1456 | "List_appearances": 30899, 1457 | "Likes": 22223, 1458 | "Fans": 245, 1459 | "½": 65, 1460 | "★": 176, 1461 | "★½": 218, 1462 | "★★": 1228, 1463 | "★★½": 1906, 1464 | "★★★": 8043, 1465 | "★★★½": 13370, 1466 | "★★★★": 22069, 1467 | "★★★★½": 8430, 1468 | "★★★★★": 5432, 1469 | "Total_ratings": 60937, 1470 | "Film_URL": "https://letterboxd.com/film/the-man-who-wasnt-there-2001/" 1471 | }, 1472 | { 1473 | "Film_title": "The Hudsucker Proxy", 1474 | "Release_year": 1994, 1475 | "Director": "Joel Coen", 1476 | "Cast": [ 1477 | "Tim Robbins", 1478 | "Jennifer Jason Leigh", 1479 | "Paul Newman", 1480 | "Charles Durning", 1481 | "John Mahoney", 1482 | "Jim True-Frost", 1483 | "Bill Cobbs", 1484 | "Bruce Campbell", 1485 | "Harry Bugin", 1486 | "John Seitz", 1487 | "Joe Grifasi", 1488 | "Roy Brocksmith", 1489 | "I.M. Hobson", 1490 | "John Scanlan", 1491 | "Jerome Dempsey", 1492 | "John Wylie", 1493 | "Gary Allen", 1494 | "Richard Woods", 1495 | "Peter McPherson", 1496 | "David Byrd", 1497 | "Christopher Darga", 1498 | "Patrick Cranshaw", 1499 | "Robert Weil", 1500 | "Mary Lou Rosato", 1501 | "Ernie Sarracino", 1502 | "Eleanor Glockner", 1503 | "Kathleen Perkins", 1504 | "Joseph Marcus", 1505 | "Peter Gallagher", 1506 | "Noble Willingham", 1507 | "Barbara Ann Grimes", 1508 | "Thom Noble", 1509 | "Steve Buscemi", 1510 | "William Duff-Griffin", 1511 | "Anna Nicole Smith", 1512 | "Pamela Everett", 1513 | "Arthur Bridgers", 1514 | "Sam Raimi", 1515 | "John Cameron", 1516 | "Skipper Duke", 1517 | "Jay Kapner", 1518 | "Jon Polito", 1519 | "Richard Whiting", 1520 | "Linda McCoy", 1521 | "Stan Adams", 1522 | "John Goodman", 1523 | "Joanne Pankow", 1524 | "Mario Todisco", 1525 | "Colin Fickes", 1526 | "Dick Sasso", 1527 | "Jesse Brewer", 1528 | "Philip Loch", 1529 | "Stan Lichtenstein", 1530 | "Todd Alcott", 1531 | "Ace O'Connell", 1532 | "Richard Schiff", 1533 | "Frank Jeffreys", 1534 | "Lou Criscuolo", 1535 | "Michael Earl Reid", 1536 | "Mike Starr", 1537 | "David Hagar", 1538 | "Willie Reale", 1539 | "Harvey Meyer", 1540 | "Tom Toner", 1541 | "David Fawcett", 1542 | "Jeff Still", 1543 | "David Gould", 1544 | "Gil Pearson", 1545 | "Marc Garber", 1546 | "David Massie", 1547 | "Mark Jeffrey Miller", 1548 | "Peter Siragusa", 1549 | "Nelson George", 1550 | "Mike Houlihan", 1551 | "Ed Lillard", 1552 | "Wantland Sandel", 1553 | "James Deuter", 1554 | "Roderick Peeples", 1555 | "Cynthia Baker" 1556 | ], 1557 | "Average_rating": 3.67, 1558 | "Owner_rating": null, 1559 | "Genres": [ 1560 | "Comedy", 1561 | "Drama" 1562 | ], 1563 | "Runtime": 111, 1564 | "Countries": [ 1565 | "UK", 1566 | "USA" 1567 | ], 1568 | "Original_language": "English", 1569 | "Spoken_languages": [ 1570 | "English" 1571 | ], 1572 | "Studios": [ 1573 | "Warner Bros. Pictures", 1574 | "PolyGram Filmed Entertainment", 1575 | "Silver Pictures", 1576 | "Working Title Films" 1577 | ], 1578 | "Watches": 82516, 1579 | "List_appearances": 25025, 1580 | "Likes": 19563, 1581 | "Fans": 260, 1582 | "½": 83, 1583 | "★": 284, 1584 | "★½": 334, 1585 | "★★": 1724, 1586 | "★★½": 2650, 1587 | "★★★": 9820, 1588 | "★★★½": 12956, 1589 | "★★★★": 15001, 1590 | "★★★★½": 4776, 1591 | "★★★★★": 3739, 1592 | "Total_ratings": 51367, 1593 | "Film_URL": "https://letterboxd.com/film/the-hudsucker-proxy/" 1594 | }, 1595 | { 1596 | "Film_title": "Paris, Je T'Aime", 1597 | "Release_year": 2006, 1598 | "Director": "Isabel Coixet, Christopher Doyle", 1599 | "Cast": [ 1600 | "Steve Buscemi", 1601 | "Natalie Portman", 1602 | "Willem Dafoe", 1603 | "Maggie Gyllenhaal", 1604 | "Axel Kiener", 1605 | "Julie Bataille", 1606 | "Bruno Podalydès", 1607 | "Florence Muller", 1608 | "Fanny Ardant", 1609 | "Leïla Bekhti", 1610 | "Juliette Binoche", 1611 | "Seydou Boro", 1612 | "Javier Cámara", 1613 | "Sergio Castellitto", 1614 | "Martin Combes", 1615 | "Cyril Descours", 1616 | "Lionel Dray", 1617 | "Marianne Faithfull", 1618 | "Ben Gazzara", 1619 | "Hippolyte Girardot", 1620 | "Bob Hoskins", 1621 | "Olga Kurylenko", 1622 | "Sara Martins", 1623 | "Elias McConnell", 1624 | "Yolande Moreau", 1625 | "Catalina Sandino Moreno", 1626 | "Emily Mortimer", 1627 | "Nick Nolte", 1628 | "Paul Putner", 1629 | "Joana Preiss", 1630 | "Gena Rowlands", 1631 | "Miranda Richardson", 1632 | "Ludivine Sagnier", 1633 | "Barbet Schroeder", 1634 | "Rufus Sewell", 1635 | "Gaspard Ulliel", 1636 | "Leonor Watling", 1637 | "Elijah Wood", 1638 | "Li Xin", 1639 | "Margo Martindale", 1640 | "Aïssa Maïga", 1641 | "Thomas Dumerchez", 1642 | "Hervé Pierre", 1643 | "Emilie Ohana", 1644 | "Wes Craven", 1645 | "Alexander Payne", 1646 | "Julien Béramis", 1647 | "Gérard Depardieu", 1648 | "Christian Bramsen" 1649 | ], 1650 | "Average_rating": 3.45, 1651 | "Owner_rating": null, 1652 | "Genres": [ 1653 | "Romance", 1654 | "Drama" 1655 | ], 1656 | "Runtime": 120, 1657 | "Countries": [ 1658 | "France" 1659 | ], 1660 | "Original_language": "French", 1661 | "Spoken_languages": [ 1662 | "French", 1663 | "Spanish", 1664 | "English", 1665 | "Chinese", 1666 | "Arabic" 1667 | ], 1668 | "Studios": [ 1669 | "Filmazure", 1670 | "Pirol Stiftung", 1671 | "Victoires International" 1672 | ], 1673 | "Watches": 64181, 1674 | "List_appearances": 11454, 1675 | "Likes": 10012, 1676 | "Fans": 101, 1677 | "½": 108, 1678 | "★": 327, 1679 | "★½": 405, 1680 | "★★": 1731, 1681 | "★★½": 2701, 1682 | "★★★": 8752, 1683 | "★★★½": 7572, 1684 | "★★★★": 6807, 1685 | "★★★★½": 1421, 1686 | "★★★★★": 1874, 1687 | "Total_ratings": 31698, 1688 | "Film_URL": "https://letterboxd.com/film/paris-je-taime/" 1689 | }, 1690 | { 1691 | "Film_title": "Intolerable Cruelty", 1692 | "Release_year": 2003, 1693 | "Director": "Joel Coen", 1694 | "Cast": [ 1695 | "George Clooney", 1696 | "Catherine Zeta-Jones", 1697 | "Geoffrey Rush", 1698 | "Cedric the Entertainer", 1699 | "Edward Herrmann", 1700 | "Paul Adelstein", 1701 | "Richard Jenkins", 1702 | "Billy Bob Thornton", 1703 | "Julia Duffy", 1704 | "Jonathan Hadary", 1705 | "Tom Aldredge", 1706 | "Stacey Travis", 1707 | "Jack Kyle", 1708 | "Irwin Keyes", 1709 | "Judith Drake", 1710 | "George Ives", 1711 | "Booth Colman", 1712 | "Kristin Dattilo", 1713 | "Wendle Josepher", 1714 | "Mary Pat Gleason", 1715 | "Mia Cottet", 1716 | "Kiersten Warren", 1717 | "Rosey Brown", 1718 | "Ken Sagoes", 1719 | "Dale E. Turner", 1720 | "Douglas Fisher", 1721 | "Nicholas Shaffer", 1722 | "Isabell O'Connor", 1723 | "Mary Gillis", 1724 | "Colin Linden", 1725 | "Julie Osburn", 1726 | "Gary Marshal", 1727 | "Blake Clark", 1728 | "Allan Trautman", 1729 | "Kate Luyben", 1730 | "Kitana Baker", 1731 | "Camille Anderson", 1732 | "Tamie Sheffield", 1733 | "Bridget Marquardt", 1734 | "Emma Harrison", 1735 | "John Bliss", 1736 | "Patrick Thomas O'Brien", 1737 | "Sean Fenton", 1738 | "Bruce Campbell" 1739 | ], 1740 | "Average_rating": 3.0, 1741 | "Owner_rating": null, 1742 | "Genres": [ 1743 | "Comedy", 1744 | "Romance" 1745 | ], 1746 | "Runtime": 100, 1747 | "Countries": [ 1748 | "USA" 1749 | ], 1750 | "Original_language": "English", 1751 | "Spoken_languages": [ 1752 | "English", 1753 | "French" 1754 | ], 1755 | "Studios": [ 1756 | "Universal Pictures", 1757 | "Imagine Entertainment", 1758 | "Brian Grazer Productions", 1759 | "Alphaville Films", 1760 | "Mike Zoss Productions" 1761 | ], 1762 | "Watches": 86199, 1763 | "List_appearances": 17672, 1764 | "Likes": 9912, 1765 | "Fans": 24, 1766 | "½": 513, 1767 | "★": 1312, 1768 | "★½": 1509, 1769 | "★★": 6161, 1770 | "★★½": 8031, 1771 | "★★★": 15556, 1772 | "★★★½": 9422, 1773 | "★★★★": 5468, 1774 | "★★★★½": 821, 1775 | "★★★★★": 789, 1776 | "Total_ratings": 49582, 1777 | "Film_URL": "https://letterboxd.com/film/intolerable-cruelty/" 1778 | }, 1779 | { 1780 | "Film_title": "The Ladykillers", 1781 | "Release_year": 2004, 1782 | "Director": "Joel Coen, Ethan Coen", 1783 | "Cast": [ 1784 | "Tom Hanks", 1785 | "Irma P. Hall", 1786 | "Marlon Wayans", 1787 | "J.K. Simmons", 1788 | "Tzi Ma", 1789 | "Ryan Hurst", 1790 | "Diane Delano", 1791 | "George Wallace", 1792 | "John McConnell", 1793 | "Jason Weaver", 1794 | "Stephen Root", 1795 | "Baadja-Lyne Odums", 1796 | "Walter K. Jordan", 1797 | "George Anthony Bell", 1798 | "Greg Grunberg", 1799 | "Hallie Singleton", 1800 | "Robert Baker", 1801 | "Blake Clark", 1802 | "Amad Jackson", 1803 | "Aldis Hodge", 1804 | "Freda Foh Shen", 1805 | "Paula Martin", 1806 | "Jeremy Suarez", 1807 | "Te Te Benn", 1808 | "Khalil East", 1809 | "Jennifer Echols", 1810 | "Nita Norris", 1811 | "Vivian Smallwood", 1812 | "Maryn Tasco", 1813 | "Muriel Whitaker", 1814 | "Jessie Bailey", 1815 | "Louisa Abernathy", 1816 | "Mildred Dumas", 1817 | "Al Fann", 1818 | "Mi Mi Green-Fann", 1819 | "Maurice Watson", 1820 | "Bruce Campbell", 1821 | "Michael Dotson" 1822 | ], 1823 | "Average_rating": 2.88, 1824 | "Owner_rating": null, 1825 | "Genres": [ 1826 | "Thriller", 1827 | "Comedy", 1828 | "Crime" 1829 | ], 1830 | "Runtime": 104, 1831 | "Countries": [ 1832 | "USA" 1833 | ], 1834 | "Original_language": "English", 1835 | "Spoken_languages": [ 1836 | "English", 1837 | "Vietnamese" 1838 | ], 1839 | "Studios": [ 1840 | "Touchstone Pictures", 1841 | "The Jacobson Company", 1842 | "Mike Zoss Productions" 1843 | ], 1844 | "Watches": 81656, 1845 | "List_appearances": 15959, 1846 | "Likes": 8126, 1847 | "Fans": 15, 1848 | "½": 619, 1849 | "★": 1726, 1850 | "★½": 2273, 1851 | "★★": 7461, 1852 | "★★½": 8403, 1853 | "★★★": 13440, 1854 | "★★★½": 7092, 1855 | "★★★★": 4112, 1856 | "★★★★½": 637, 1857 | "★★★★★": 815, 1858 | "Total_ratings": 46578, 1859 | "Film_URL": "https://letterboxd.com/film/the-ladykillers-2004-6/" 1860 | }, 1861 | { 1862 | "Film_title": "To Each His Own Cinema", 1863 | "Release_year": 2007, 1864 | "Director": "Aki Kaurismäki, Lars von Trier", 1865 | "Cast": [ 1866 | "Pegah Ahangarani", 1867 | "Leonid Alexeenko", 1868 | "Taraneh Alidoosti", 1869 | "Dàvi Alvarado", 1870 | "Vishka Asayesh", 1871 | "George Babluani", 1872 | "Cindy Beckett", 1873 | "Caju", 1874 | "Castanha", 1875 | "Carl-Erik Calamnius", 1876 | "Josh Brolin", 1877 | "Luisa Williams", 1878 | "Michel Piccoli", 1879 | "João Bénard da Costa", 1880 | "Antoine Chappey", 1881 | "Farini Cheung Yui-Ling", 1882 | "Casper Christensen", 1883 | "David Cronenberg", 1884 | "Audrey Dana", 1885 | "Émilie Dequenne", 1886 | "Lionel Dray", 1887 | "Jean-Claude Dreyfus", 1888 | "Yosra El Lozy", 1889 | "Deniz Gamze Ergüven", 1890 | "Sara Forestier", 1891 | "Jacques Frantz", 1892 | "Grant Heslov", 1893 | "Frank Hvam", 1894 | "Kristian Ibler", 1895 | "Karim Kassem", 1896 | "Takeshi Kitano", 1897 | "Joachim Knop", 1898 | "Édith Le Merdy", 1899 | "Michael Lonsdale", 1900 | "Li Man", 1901 | "Lü Yulai", 1902 | "Sara-Marie Maltha", 1903 | "Jeanne Moreau", 1904 | "Nanni Moretti", 1905 | "Denis Podalydès", 1906 | "Brooke Smith", 1907 | "Yola Sanko", 1908 | "Jérémie Segard", 1909 | "Joe Siffleet", 1910 | "Zinedine Soualem", 1911 | "Elia Suleiman", 1912 | "Hedie Tehrani", 1913 | "Lars von Trier", 1914 | "Michel Vuillermoz", 1915 | "Bradley Walsh", 1916 | "Isabelle Adjani", 1917 | "Anouk Aimée", 1918 | "Maury Chaykin", 1919 | "Jean Cocteau", 1920 | "Willem Dafoe", 1921 | "Bryce Dallas Howard", 1922 | "Anna Karina", 1923 | "Kim Novak", 1924 | "Shu Qi", 1925 | "Golshifteh Farahani", 1926 | "Lee Kang-sheng", 1927 | "Hamide Kheyrabadi", 1928 | "Duarte d'Almeida", 1929 | "Fan Wing", 1930 | "Michael Cimino", 1931 | "Clayton Jacobson", 1932 | "Geneviève Lemon", 1933 | "Gina Clayton", 1934 | "Jesse Collins", 1935 | "Juliana Muñoz", 1936 | "Yves Corbet" 1937 | ], 1938 | "Average_rating": 3.52, 1939 | "Owner_rating": null, 1940 | "Genres": [ 1941 | "Comedy", 1942 | "Drama" 1943 | ], 1944 | "Runtime": 100, 1945 | "Countries": [ 1946 | "France" 1947 | ], 1948 | "Original_language": "French", 1949 | "Spoken_languages": [ 1950 | "French", 1951 | "Danish", 1952 | "English", 1953 | "Finnish", 1954 | "Hebrew (modern)", 1955 | "Italian", 1956 | "Japanese", 1957 | "Portuguese", 1958 | "Russian", 1959 | "Spanish", 1960 | "Yiddish", 1961 | "Chinese" 1962 | ], 1963 | "Studios": [ 1964 | "Elzévir Films", 1965 | "Cannes Film Festival" 1966 | ], 1967 | "Watches": 14059, 1968 | "List_appearances": 4681, 1969 | "Likes": 2640, 1970 | "Fans": 4, 1971 | "½": 31, 1972 | "★": 70, 1973 | "★½": 82, 1974 | "★★": 293, 1975 | "★★½": 537, 1976 | "★★★": 1922, 1977 | "★★★½": 1470, 1978 | "★★★★": 1362, 1979 | "★★★★½": 247, 1980 | "★★★★★": 490, 1981 | "Total_ratings": 6504, 1982 | "Film_URL": "https://letterboxd.com/film/to-each-his-own-cinema/" 1983 | }, 1984 | { 1985 | "Film_title": "Untitled Coen Brothers Horror Project", 1986 | "Release_year": null, 1987 | "Director": "Joel Coen, Ethan Coen", 1988 | "Cast": null, 1989 | "Average_rating": null, 1990 | "Owner_rating": null, 1991 | "Genres": [ 1992 | "Horror" 1993 | ], 1994 | "Runtime": null, 1995 | "Countries": null, 1996 | "Original_language": "English", 1997 | "Spoken_languages": [ 1998 | "English" 1999 | ], 2000 | "Studios": null, 2001 | "Watches": 21, 2002 | "List_appearances": 245, 2003 | "Likes": 5, 2004 | "Fans": 0, 2005 | "½": 0, 2006 | "★": 0, 2007 | "★½": 0, 2008 | "★★": 0, 2009 | "★★½": 0, 2010 | "★★★": 0, 2011 | "★★★½": 0, 2012 | "★★★★": 0, 2013 | "★★★★½": 0, 2014 | "★★★★★": 0, 2015 | "Total_ratings": 0, 2016 | "Film_URL": "https://letterboxd.com/film/untitled-coen-brothers-horror-project/" 2017 | }, 2018 | { 2019 | "Film_title": "World Cinema", 2020 | "Release_year": 2007, 2021 | "Director": "Joel Coen, Ethan Coen", 2022 | "Cast": [ 2023 | "Josh Brolin", 2024 | "Grant Heslov", 2025 | "Brooke Smith" 2026 | ], 2027 | "Average_rating": 3.46, 2028 | "Owner_rating": null, 2029 | "Genres": [ 2030 | "Comedy" 2031 | ], 2032 | "Runtime": 4, 2033 | "Countries": null, 2034 | "Original_language": "English", 2035 | "Spoken_languages": [ 2036 | "English" 2037 | ], 2038 | "Studios": [ 2039 | "Cannes Film Festival" 2040 | ], 2041 | "Watches": 1402, 2042 | "List_appearances": 136, 2043 | "Likes": 325, 2044 | "Fans": 1, 2045 | "½": 2, 2046 | "★": 9, 2047 | "★½": 6, 2048 | "★★": 16, 2049 | "★★½": 29, 2050 | "★★★": 137, 2051 | "★★★½": 108, 2052 | "★★★★": 102, 2053 | "★★★★½": 12, 2054 | "★★★★★": 43, 2055 | "Total_ratings": 464, 2056 | "Film_URL": "https://letterboxd.com/film/world-cinema-2007/" 2057 | } 2058 | ] -------------------------------------------------------------------------------- /listscraper/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Dot/Letterboxd-list-scraper/f0d50ff7e28dd3b8945d14624a20bab5f8be33eb/listscraper/__init__.py -------------------------------------------------------------------------------- /listscraper/__main__.py: -------------------------------------------------------------------------------- 1 | from listscraper.cli import cli_arguments 2 | from listscraper.instance_class import ScrapeInstance 3 | 4 | 5 | def main(): 6 | """ 7 | Starts the program and prints some text when finished. 8 | """ 9 | 10 | # Welcome message 11 | print("=============================================") 12 | print(" Letterboxd-List-Scraper ") 13 | print("=============================================") 14 | 15 | # Importing command line arguments and create a scrape instance 16 | args = cli_arguments() 17 | LBscraper = ScrapeInstance(args.listURL, args.pages, args.output_name, args.output_path, args.output_file_extension, args.file, args.concat, args.quiet, args.threads) 18 | 19 | # # End message 20 | print(f"\nProgram successfully finished! Your {LBscraper.output_file_extension}(s) can be found in ./{LBscraper.output_path}/.") 21 | print(f" Total run time was {LBscraper.endtime - LBscraper.starttime :.2f} seconds.") 22 | 23 | 24 | if __name__ == "__main__": 25 | main() -------------------------------------------------------------------------------- /listscraper/checkimport_functions.py: -------------------------------------------------------------------------------- 1 | # This file contains functions that checks the user-input and, if deemed valid, imports the relevant information 2 | # If user-input is not valid, a relevant error message is generated and printed 3 | 4 | ROLES = [ 5 | "actor", 6 | "additional-directing", 7 | "additional-photography", 8 | "art-direction", 9 | "assistant-director", 10 | "camera-operator", 11 | "casting", 12 | "choreography", 13 | "cinematography", 14 | "co-director", 15 | "composer", 16 | "costume-design", 17 | "director", 18 | "editor", 19 | "executive-producer", 20 | "hairstyling", 21 | "lighting", 22 | "makeup", 23 | "original-writer", 24 | "producer", 25 | "production-design", 26 | "set-decoration", 27 | "songs", 28 | "sound", 29 | "special-effects", 30 | "story", 31 | "stunts", 32 | "title-design", 33 | "visual-effects", 34 | "writer", 35 | ] 36 | 37 | def checkimport_url(url_string): 38 | """ 39 | Checks the input URL for correct syntax and imports relevant list information. 40 | 41 | Parameters: 42 | url_string (str): The input URL. 43 | 44 | Returns: 45 | check (boolean): True or False depending on if the input URL is recognized by the program. 46 | type (str): The list type (watchlist, list, films). 47 | username (str): The username of the lists owner. 48 | listname (str): The program-assigned name for the list, extracted from the URL. 49 | """ 50 | 51 | url_chunks = url_string.split('/') 52 | 53 | try: 54 | # All user-type lists 55 | if url_chunks[4] == "list": 56 | type = "list" 57 | username = url_chunks[3] 58 | listname = url_chunks[5] 59 | check = True 60 | 61 | elif url_chunks[4] == "watchlist": 62 | type = "watchlist" 63 | username = url_chunks[3] 64 | listname = f"{username.lower()}-watchlist" 65 | check = True 66 | 67 | elif url_chunks[4] == "films": 68 | type = "films" 69 | username = url_chunks[3] 70 | listname = f"{username.lower()}-films" 71 | check = True 72 | 73 | # Letterboxd site generic lists 74 | elif url_chunks[3] == "films" and len(url_chunks) > 5: 75 | type = "LBfilms" 76 | username = "Letterboxd" 77 | listname = "LBfilms" 78 | check = True 79 | 80 | # Cast / Crew roles 81 | elif url_chunks[3] in ROLES: 82 | type = "Cast/Crew" 83 | username = "Letterboxd" 84 | listname = f"{url_chunks[3]}-{url_chunks[4]}-films" 85 | check = True 86 | 87 | else: 88 | check = False 89 | type, username, listname = ['']*3 90 | 91 | except: 92 | check = False 93 | type, username, listname = ['']*3 94 | 95 | # Check for additional selection in URL and add it to the list output name 96 | if (type in {"list"} and len(url_chunks) > 7): 97 | extra_chunks = url_chunks[6:-1] 98 | listname = listname + "-" + ("-").join(extra_chunks) 99 | 100 | elif (type in {"watchlist", "films"} and len(url_chunks) > 6): 101 | extra_chunks = url_chunks[5:-1] 102 | listname = listname + "-" + ("-").join(extra_chunks) 103 | 104 | elif (type in {"LBfilms"}): 105 | extra_chunks = url_chunks[4:-1] 106 | listname = listname + "-" + ("-").join(extra_chunks) 107 | 108 | return check, type, username, listname 109 | 110 | def checkimport_output_output_file_extension(output_file_extension): 111 | """ 112 | Checks if valid output file extension was given. 113 | 114 | Returns: 115 | check (bool): Check for if the output file extension is valid. 116 | extension (str): The output file extension for the file. 117 | """ 118 | 119 | if output_file_extension == ".json" or output_file_extension == ".csv": 120 | check = True 121 | extension = output_file_extension 122 | elif output_file_extension == "json" or output_file_extension == "csv": 123 | check = True 124 | extension = "." + output_file_extension 125 | else: 126 | check = False 127 | extension = None 128 | 129 | return check, extension 130 | 131 | def checkimport_outputname(output_name, global_output_name, output_file_extension, listname, url_total, url_count, concat): 132 | """ 133 | Checks if valid output names are given, then finds the appropriate output name for the list. 134 | 135 | Returns: 136 | check (bool): Check for if the output name is valid. 137 | name (str): The output name for the list. 138 | """ 139 | 140 | # Checks for if concat was applied 141 | if concat and global_output_name: 142 | check = True 143 | name = global_output_name + output_file_extension 144 | return check, name 145 | elif concat and (global_output_name == None): 146 | check = True 147 | name = "concatenated" + output_file_extension 148 | return check, name 149 | else: 150 | 151 | # Checks if concat was not applied 152 | if output_name == None: 153 | check = True 154 | name = listname + output_file_extension 155 | elif output_name != global_output_name: 156 | check = True 157 | name = output_name + output_file_extension 158 | elif (output_name != None) and (url_total == 1): 159 | check = True 160 | name = output_name + output_file_extension 161 | elif (output_name != None) and (url_total > 1): 162 | check = True 163 | name = output_name + f"_{url_count - 1}" + output_file_extension 164 | else: 165 | check = False 166 | name = "" 167 | 168 | return check, name 169 | 170 | def checkimport_pages(pages_string): 171 | """ 172 | Checks the input string for correct syntax and converts to 173 | a list of integers representing all the pages that should be scraped. 174 | 175 | Parameters: 176 | pages_string (str): The input after the "-p" flag 177 | 178 | Returns: 179 | check (boolean): True or False depending on if the input string could be decoded. 180 | final_pages (list): An explicit list of integers denoting the pages that should be scraped. 181 | In case all pages should be scraped, this list is empty. 182 | """ 183 | 184 | final_pages = [] 185 | try: 186 | if pages_string == "*": 187 | check = True 188 | return check, final_pages 189 | 190 | chunks = pages_string.split(",") 191 | for chunk in chunks: 192 | if "~" in chunk: 193 | i, j = chunk.split("~") 194 | if int(i) <= int(j): 195 | if int(i) == 0: 196 | i = 1 197 | final_pages.extend(range(int(i),int(j)+1)) 198 | else: 199 | check = False 200 | return check, final_pages 201 | 202 | elif "<" in chunk: 203 | j = chunk.split("<")[1] 204 | print(j) 205 | final_pages.extend(range(1,int(j))) 206 | else: 207 | final_pages.append(int(chunk)) 208 | 209 | final_pages = list(sorted(set(final_pages))) # Delete duplicates and sort 210 | check = True 211 | except: 212 | check = False 213 | 214 | return check, final_pages -------------------------------------------------------------------------------- /listscraper/cli.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | 3 | def cli_arguments(): 4 | """ 5 | Function that parses the user-input arguments from the command line interface (CLI) 6 | and returns these arguments stored in an 'args' object. 7 | """ 8 | 9 | parser=argparse.ArgumentParser(prog="listscraper", usage="%(prog)s [options] [list-url]", 10 | description="A Python program that scrapes Letterboxd lists and outputs the information on all of its films in a file. Input form and desired outputs are user customizable. Concurrent scraping of multiple lists is supported.", 11 | epilog="Thank you for using the scraper! If you have any trouble and/or suggestions please contact me via the GitHub page https://github.com/L-Dot/Letterboxd-list-scraper.", 12 | formatter_class=argparse.RawTextHelpFormatter) 13 | 14 | ## Optional arguments / flags 15 | parser.add_argument('--version', action='version', version='%(prog)s 2.0.0') 16 | 17 | parser.add_argument("-on", "--output_name", type=str, 18 | help=("set the filename of the output file(s). Default output is a CSV file with the same name as its respective list.\n" 19 | "If this flag is used and multiple URLs are provided, each file will be the concatenation of the output name with an increasing number _1, _2, etc.\n"), 20 | required=False, default=None) 21 | 22 | parser.add_argument("-op", "--output_path", type=str, 23 | help="set the path for the output file(s). Default output is a folder called 'scraper_outputs'.", 24 | required=False, default="scraper_outputs") 25 | 26 | parser.add_argument("-ofe", "--output_file_extension", type=str, 27 | help="specify output file type, .csv or .json. Default output is .csv.", 28 | required=False, default=".csv") 29 | 30 | parser.add_argument("-f", "--file", type=argparse.FileType('r'), 31 | help="provide a .txt file with all of the URLs that should be scraped. Each URL should be isolated on its own newline together with any specific option flags. \ 32 | This feature is especially handy when you need to scrape a large amount of lists and/or when you have specific option flags for each URL.\n\ 33 | When using an input file, make sure to not give the script any URLs on the command line!", 34 | required=False, default=None) 35 | 36 | parser.add_argument("-p","--pages", type=str, 37 | help=("only scrape selected pages from a URL. Default is to scrape all pages.\n" 38 | "Page selection syntax follows these rules:\n" 39 | "\t -p 1 \t\t page 1 (first page)\n" 40 | "\t -p 1,3,5 \t pages 1,3,5\n" 41 | "\t -p 1~3 \t pages 1,2,3\n" 42 | "\t -p 1~3,5 \t pages 1,2,3 and 5\n" 43 | "\t -p '<3,5' \t pages 1,2,3 and 5\n" 44 | "\t -p '*' \t\t all pages (default)\n" 45 | "The string should contain NO spaces. Also note the requirement of quotation marks when using the less-than (<) or star (*) signs!"), 46 | required=False, default="*") 47 | 48 | parser.add_argument("--concat", action="store_true", 49 | help="option to output all the scraped lists into a single concatenated file. An extra column is added that specifies the original list URL.", 50 | required=False) 51 | 52 | parser.add_argument("--threads", type=int, 53 | help="option to tweak the number of CPU threads used. Increase this to speed up scraping of multiple lists simultaneously. Default value is 4.", 54 | required=False, default=4) 55 | 56 | parser.add_argument("--quiet", action="store_true", 57 | help="Stops describing everything the program does and no longer displays tqdm() progression bars.\ 58 | From testing this does not significantly increase program runtime, meaning this is turned off by default.", 59 | required=False) 60 | 61 | ## WIP ## 62 | # parser.add_argument("--more-stats", action=argparse.BooleanOptionalAction, 63 | # help="option to enable extensive scraping, at the cost of a small increase in runtime. New data includes info on a film's rating histogram and fans.", 64 | # required=False, default=False) 65 | 66 | # parser.add_argument("--meta-data", action=argparse.BooleanOptionalAction, 67 | # help="option to add a header row with some meta data to the CSV.", 68 | # required=False, default=False) 69 | 70 | ## Positionals 71 | parser.add_argument("listURL", type=str, nargs="*", 72 | help=("the Letterboxd URL of the list that should be scraped. Multiple URLs can be given, separated by a space. For example:\n\n" 73 | "\t python %(prog)s.py \n" 74 | "\t python %(prog)s.py ")) 75 | 76 | args=parser.parse_args() 77 | 78 | return args 79 | -------------------------------------------------------------------------------- /listscraper/instance_class.py: -------------------------------------------------------------------------------- 1 | from listscraper.list_class import List 2 | import listscraper.checkimport_functions as cef 3 | import concurrent.futures # for pool of threads 4 | import time 5 | import sys 6 | import os 7 | import csv 8 | import json 9 | 10 | class ScrapeInstance: 11 | """ 12 | Initializes the program instance of the Letterboxd-list-scraper. 13 | All attributes are read and saved as variables from the 'argparse' flags of the command line, or from the provided .txt file. 14 | 15 | Attributes: 16 | inputURLs (list): A list of URLs input from the command line. 17 | pages (str): Page options read from optional '-p' flag. Default is all pages ('*'). 18 | output_name (str): Output name obtained from optional '-on' flag. Default is list name from URL. 19 | output_path (str): Output path obtained from optional '-op' flag. Default is 'scraper_outputs' directory. 20 | output_file_extension (str): Type of file outputted. Default is CSV, ".csv". 21 | infile (str): Name of input .txt file obtained from optional '-f' flag. 22 | concat (bool): Option to turn on list concatenation read from optional '--concat' flag. Default is False. 23 | quiet(bool): Turn off tqdm loading bars read from optional '-vo' flag. Default is False. 24 | threads (int): Amount of threads used for scraping read from optional '--threads' flag. Default is 4. 25 | 26 | Methods: 27 | import_from_infile(infile): 28 | Imports the list URLs and their options from the .txt file into List objects. 29 | import_from_commandline(inputURLs): 30 | Imports the list URLs and their options from the command line into List objects. 31 | concatenate_lists(): 32 | Concatenates all the films in the List objects into one big list. 33 | scrape_all_and_writeout(listobjs, maxworkers=4): 34 | Scrapes all the films from the List objects using their LB link. 35 | """ 36 | 37 | def __init__(self, inputURLs, pages, output_name, output_path, output_file_extension, infile, concat, quiet, threads): 38 | """ 39 | Initializes the program by running various checks if input values and syntax were correct. 40 | 41 | (new) Attributes: 42 | 43 | global_page_options(str): The page selection options that will be used if no '-p' input was given. 44 | global_output_name (str): The output name that will be used if no '-on' input was given. 45 | 46 | Nthreads (int): The amount of worker threads that should be used for scraping. 47 | starttime(time.obj): Time at the start of the program. 48 | lists_to_scrape (list): Collection of all imported List objects that should be scraped. 49 | endtime (time.obj): Time at the end of the program. 50 | """ 51 | 52 | self.inputURLs = inputURLs 53 | self.global_page_options = pages 54 | self.global_output_name = output_name 55 | self.output_path = output_path 56 | self.infile = infile 57 | self.concat = concat 58 | self.quiet = quiet 59 | 60 | output_file_extension_check, self.output_file_extension = cef.checkimport_output_output_file_extension(output_file_extension) 61 | if not output_file_extension_check: 62 | sys.exit(f" Incorrect output file extension was given. Please check and try again.") 63 | 64 | self.Nthreads = threads 65 | self.starttime = time.time() 66 | 67 | self.lists_to_scrape = [] 68 | 69 | if self.infile: 70 | infilename = self.infile.name 71 | else: 72 | infilename = None 73 | 74 | print(f" infile: {infilename}") 75 | print(f" output_path: {self.output_path}") 76 | print(f" concat: {self.concat}") 77 | print(f" threads: {self.Nthreads}") 78 | print(f" verbose: {not self.quiet}") 79 | print("=============================================\n") 80 | 81 | # Checks if only .txt or only command line URL were given 82 | if self.infile and self.inputURLs: 83 | sys.exit("Please provide either a .txt file with -f OR a valid list URL.") 84 | 85 | # Checks for an input file and saves any URLs to List instances 86 | elif self.infile: 87 | self.import_from_infile(self.infile) 88 | 89 | # Checks for input URLs and saves them to List instances 90 | elif self.inputURLs: 91 | self.import_from_commandline(self.inputURLs) 92 | 93 | # No scrapable URLs were found... 94 | else: 95 | sys.exit("No scrapable URLs were provided! Please type 'python main.py --help' for more information") 96 | 97 | print("Initialization successful!\n") 98 | 99 | #=== Scraping and writing to file ===# 100 | 101 | # Create output dir if necessary 102 | os.makedirs(self.output_path, exist_ok=True) 103 | self.scrape_all_and_writeout(self.lists_to_scrape, self.Nthreads) 104 | 105 | self.endtime = time.time() 106 | 107 | 108 | def import_from_infile(self, infile): 109 | """ 110 | Imports the lines from a .txt file into List objects. 111 | Each line can contain specific list URLs and option flags (-p or -on) referring to that list. 112 | Lines starting with a "#" will be skipped. 113 | 114 | Parameters: 115 | infile (str): The file name of the input .txt. 116 | """ 117 | 118 | lines = infile.read().split("\n") 119 | 120 | # Filtering out comments (#) and empty lines 121 | final_lines = [] 122 | for line in lines: 123 | if line.startswith("#") or not line.strip(): 124 | continue 125 | else: 126 | final_lines.append(line) 127 | 128 | self.url_total = len(final_lines) 129 | self.url_count = 1 130 | 131 | print(f"A total of {self.url_total} URLs were read-in from {self.infile.name}!\n") 132 | 133 | for line in final_lines: 134 | chunks = line.split(' ') 135 | url = [i for i in chunks if ("https://") in i][0] 136 | 137 | # Check for page option on this line 138 | if ("-p" in chunks): 139 | page_options = chunks[chunks.index("-p") + 1] 140 | elif ("--pages" in chunks): 141 | page_options = chunks[chunks.index("--pages") + 1] 142 | else: 143 | page_options = self.global_page_options 144 | 145 | # Check for output name option on this line 146 | if ("-on" in chunks): 147 | output_name = chunks[chunks.index("-on") + 1] 148 | elif ("--output_name" in chunks): 149 | output_name = chunks[chunks.index("--output_name") + 1] 150 | else: 151 | output_name = self.global_output_name 152 | 153 | self.lists_to_scrape.append(List(url, page_options, output_name, self.global_output_name, self.output_file_extension, 154 | self.url_total, self.url_count, self.concat)) 155 | self.url_count += 1 156 | 157 | def import_from_commandline(self, inputURLs): 158 | """ 159 | Checks if there are URLs on the command line and individually imports them into List objects. 160 | 161 | Parameters: 162 | inputURLs (list): List of strings of all list URLs on the command line. 163 | """ 164 | 165 | self.url_total = len(inputURLs) 166 | self.url_count = 1 167 | 168 | print(f"A total of {self.url_total} URLs were found!\n") 169 | 170 | for url in inputURLs: 171 | self.lists_to_scrape.append(List(url, self.global_page_options, self.global_output_name, self.global_output_name, self.output_file_extension, 172 | self.url_total, self.url_count, self.concat)) 173 | self.url_count += 1 174 | 175 | def concatenate_lists(self): 176 | """ 177 | Concatenates all the films in the scraped List objects together. 178 | """ 179 | 180 | self.concat_lists = [] 181 | for i, list in enumerate(self.lists_to_scrape): 182 | if i == 0: 183 | self.concat_lists.extend(list.films) 184 | else: 185 | self.concat_lists.extend(list.films[1:]) 186 | 187 | def scrape_all_and_writeout(self, list_objs, max_workers=4): 188 | """ 189 | Starts the scraping of all lists from Letterboxd and subsequently writes out to file(s). 190 | 191 | Parameters: 192 | target_lists (list): The collection of List objects that have to be scraped. 193 | max_workers (int): The max amount of threads to generate (default = 4). 194 | """ 195 | print(f"Starting the scraping process with {max_workers} available threads...\n") 196 | 197 | # Writes out when each list has been scraped 198 | if self.concat == False: 199 | 200 | with concurrent.futures.ThreadPoolExecutor(max_workers) as executor: 201 | _ = [executor.submit(listobj.scrape_and_write, self.output_path, self.quiet, self.concat) for listobj in list_objs] 202 | 203 | # Waits for all lists to finish before writing out 204 | elif self.concat == True: 205 | 206 | with concurrent.futures.ThreadPoolExecutor(max_workers) as executor: 207 | _ = [executor.submit(listobj.scrape, self.quiet, self.concat) for listobj in list_objs] 208 | 209 | self.concatenate_lists() 210 | 211 | # Checks if manual name for concatenated file was given, and otherwise uses a default 212 | if self.global_output_name == None: 213 | self.global_output_name = "concatenated_lists" 214 | 215 | # Write out to path 216 | outpath = os.path.join(self.output_path, self.global_output_name + self.output_file_extension) 217 | if self.output_file_extension == ".json": 218 | with open(outpath, "w", encoding="utf-8") as jsonf: 219 | jsonf.write(json.dumps(self.concat_lists, indent=4, ensure_ascii=False)) 220 | else: 221 | header = list( self.concat_lists[0].keys() ) 222 | with open(outpath, 'w', newline="", encoding = "utf-8") as f: 223 | write = csv.DictWriter(f, delimiter=",", fieldnames=header) 224 | write.writeheader() 225 | write.writerows(self.concat_lists) 226 | 227 | return print(f" Written concatenated lists to {self.global_output_name}{self.output_file_extension}!") 228 | -------------------------------------------------------------------------------- /listscraper/list_class.py: -------------------------------------------------------------------------------- 1 | from listscraper.scrape_functions import scrape_list 2 | import listscraper.checkimport_functions as cef 3 | import sys 4 | import csv 5 | import json 6 | import os 7 | 8 | class List: 9 | """ 10 | Class that stores all data and user-specified options pertaining to a specific list that needs to be scraped. 11 | 12 | Attributes: 13 | list_url (str): The URL of the list that needs to be scraped. 14 | page_options (str): The syntax describing which pages should be selected. 15 | output_name (str): The specific output name of the file, optionally given by the user-input. 16 | global_output_name (str): The output name set by the command line options. Revert to this if no specific output name was given. 17 | output_file_extension (str): Type of file outputted. 18 | url_total (int): Total amount of lists that have to be scraped. 19 | url_count (int): The number of the current list. 20 | 21 | Methods: 22 | scrape(): Starts scraping the list from Letterboxd. 23 | write_to_file(): Writes the objects's films to a file. 24 | scrape_and_write(): Wrapper function to both scrape and write out to file. 25 | """ 26 | 27 | def __init__(self, list_url, pagestring, output_name, global_output_name, output_file_extension, url_total, url_count, concat): 28 | """ 29 | Constructs necessary attributes of the list object. 30 | 31 | Parameters: 32 | url (str): The URL of the list. 33 | pagestring (str): Literal string syntax that was input. 34 | 35 | type (str): The list type of this object. 36 | username (str): The username of the list owner. 37 | listname (str): The list name from the URL. 38 | 39 | output_name (str): The final output name of the file. 40 | output_file_extension (str): Type of output file. 41 | page_options (list): List of integers corresponding to all selected pages. 42 | """ 43 | 44 | self.url = list_url 45 | self.pagestring = pagestring.strip("\'\"").replace(" ", "") 46 | self.output_file_extension = output_file_extension 47 | 48 | print(f"Checking inputs for URL {url_count}/{url_total}...") 49 | 50 | # URL input check 51 | urlcheck, self.type, self.username, self.listname = cef.checkimport_url(self.url) 52 | if not urlcheck: 53 | sys.exit(f" {self.url} is not a valid list URL. Please try again!") 54 | 55 | # (-on) output name check 56 | outputnamecheck, self.output_name = cef.checkimport_outputname(output_name, global_output_name, self.output_file_extension, self.listname, url_total, url_count, concat) 57 | if not outputnamecheck: 58 | sys.exit(f" Incorrect output name(s) were given. Please check and try again.") 59 | 60 | # (-p) pages syntax check 61 | pagecheck, self.page_options = cef.checkimport_pages(self.pagestring) 62 | if not pagecheck: 63 | sys.exit(f" The input syntax of the pages (-p flag) was not correct. Please try again!") 64 | 65 | ## Summary of all properties before scraping starts 66 | print(f" url: {self.url}") 67 | print(f" username: {self.username}") 68 | print(f" type: {self.type}") 69 | print(f" page_select: {self.pagestring}") 70 | print(f" output_name: {self.output_name}\n") 71 | 72 | def scrape(self, quiet, concat): 73 | """ 74 | Scrapes the Letterboxd list by using the List object's URL 75 | and stores information on each film in a new attribute. 76 | 77 | Attribute: 78 | films (list): The list of films with all scraped information. 79 | """ 80 | 81 | print(f" Scraping {self.url}...") 82 | 83 | # If list is of generic LB site, URL should be slightly altered 84 | if self.type == "LBfilms": 85 | scrape_url = "films/ajax".join(self.url.split("films")) # 'ajax' is inserted 86 | else: 87 | scrape_url = self.url 88 | 89 | self.films = scrape_list(scrape_url, self.page_options, self.output_file_extension, self.type, quiet, concat) 90 | 91 | def write_to_file(self, output_path): 92 | """ 93 | Writes the films of the List object to a file. 94 | """ 95 | 96 | if len(self.films) == 1: 97 | return print(f" No films found to write out for list {self.listname}. Please try a different selection.") 98 | 99 | outpath = os.path.join(output_path, self.output_name) 100 | if self.output_file_extension == ".json": 101 | with open(outpath, "w", encoding="utf-8") as jsonf: 102 | jsonf.write(json.dumps(self.films, indent=4, ensure_ascii=False)) 103 | else: 104 | header = list( self.films[0].keys() ) 105 | with open(outpath, 'w', newline="", encoding = "utf-8") as f: 106 | write = csv.DictWriter(f, delimiter=",", fieldnames=header) 107 | write.writeheader() 108 | write.writerows(self.films) 109 | 110 | return print(f" Written to {self.output_name}!") 111 | 112 | 113 | def scrape_and_write(self, output_path, quiet, concat): 114 | """ 115 | Function to initiate scraping from URL and writing to file of the LB list. 116 | """ 117 | 118 | self.scrape(quiet, concat) 119 | self.write_to_file(output_path) -------------------------------------------------------------------------------- /listscraper/scrape_functions.py: -------------------------------------------------------------------------------- 1 | from listscraper.utility_functions import val2stars, stars2val 2 | from bs4 import BeautifulSoup 3 | from tqdm import tqdm 4 | import requests 5 | import numpy as np 6 | import re 7 | 8 | _domain = 'https://letterboxd.com/' 9 | 10 | def scrape_list(list_url, page_options, output_file_extension, list_type, quiet=False, concat=False): 11 | """ 12 | Scrapes a Letterboxd list. Takes into account any optional page selection. 13 | 14 | Parameters: 15 | list_url (str): The URL link of the first page of the LB list. 16 | page_options (str/list): Either a "*" to scrape all pages, or a list with specific page integers. 17 | output_file_extension (str): Type of file extension, for usage in 'scrape_page()'. 18 | list_type (str): Type of list to be scraped, for usage in 'scrape_page()'. 19 | quiet (bool): Option to turn-off tqdm (not much increased speed noticed. Default is off.) 20 | concat (bool): If set true it will add an extra column with the original list name to the scraped data. 21 | 22 | Returns: 23 | list_films (list): A list of dicts where each dict contains information on the films in the LB list. 24 | """ 25 | 26 | list_films = [] 27 | 28 | # If all pages should be scraped, go through all available pages 29 | if (page_options == []) or (page_options == "*"): 30 | while True: 31 | page_films, page_soup = scrape_page(list_url, list_url, output_file_extension, list_type, quiet, concat) 32 | list_films.extend(page_films) 33 | 34 | # Check if there is another page of ratings and if yes, continue to that page 35 | next_button = page_soup.find('a', class_='next') 36 | if next_button is None: 37 | break 38 | else: 39 | list_url = _domain + next_button['href'] 40 | 41 | # If page selection was input, only go to those pages 42 | else: 43 | for p in page_options: 44 | new_link = list_url + f"page/{p}/" 45 | try: 46 | page_films, page_soup = scrape_page(new_link, list_url, output_file_extension, list_type, quiet, concat) 47 | list_films.extend(page_films) 48 | except: 49 | print(f" No films on page {p}...") 50 | continue 51 | 52 | return list_films 53 | 54 | def scrape_page(list_url, og_list_url, output_file_extension, list_type, quiet=False, concat=False): 55 | """ 56 | Scrapes the page of a LB list URL, finds all its films and iterates over each film URL 57 | to find the relevant information. 58 | 59 | Parameters: 60 | list_url (str): Link of the LB page that should be scraped. 61 | og_list_url (str): The original input list URL (without any "/page/" strings added) 62 | output_file_extension (str): Type of file extension, specifies 'not_found' entry. 63 | list_type (str): Type of list, different specifications for different types. 64 | quiet (bool): Option to turn-off tqdm. 65 | concat (bool): Checks if concat is enabled. 66 | 67 | Returns: 68 | page_films (list): List of dicts containing information on each film on the LB page. 69 | page_soup (str): The HTML string of the entire LB page. 70 | """ 71 | 72 | page_films = [] 73 | page_response = requests.get(list_url) 74 | 75 | # Check to see page was downloaded correctly 76 | if page_response.status_code != 200: 77 | return print("Error: Could not load page.") 78 | 79 | page_soup = BeautifulSoup(page_response.content, 'lxml') 80 | 81 | # Grab the main film grid 82 | if list_type == "Cast/Crew": 83 | table = page_soup.find("div", class_="poster-grid") 84 | else: 85 | table = page_soup.find('ul', class_='poster-list') 86 | if table is None: 87 | return 88 | 89 | films = table.find_all('li') 90 | if films == []: 91 | return 92 | 93 | not_found = np.nan if output_file_extension == ".csv" else None 94 | 95 | # Iterate through films 96 | for film in films if quiet else tqdm(films): 97 | if list_type == "Cast/Crew" and "poster-container placeholder" in str(film): 98 | break # less than four entries 99 | 100 | film_dict = scrape_film(film, not_found) 101 | 102 | # Adds an extra column with OG list URL 103 | if concat: 104 | film_dict["List_URL"] = og_list_url 105 | 106 | page_films.append(film_dict) 107 | 108 | return page_films, page_soup 109 | 110 | def scrape_film(film_html, not_found): 111 | """ 112 | Scrapes all available information regarding a film. 113 | The function makes multiple request calls to relevant Letterboxd film URLs and gets their raw HTML code. 114 | Using manual text extraction, the wanted information is found and stored in a dictionary. 115 | 116 | Parameters: 117 | film_html (str): The raw
  • HTML string of the film object obtained from the list page HTML. 118 | not_found (object): Either 'np.nan' if output is CSV or 'None' if output is JSON 119 | Returns: 120 | film_dict (dict): A dictionary containing all the film's information. 121 | """ 122 | 123 | film_dict = {} 124 | 125 | # Obtaining release year, director and average rating of the movie 126 | film_card = film_html.find('div').get('data-target-link')[1:] 127 | film_url = _domain + film_card 128 | filmget = requests.get(film_url) 129 | film_soup = BeautifulSoup(filmget.content, 'html.parser') 130 | 131 | # Finding the film name 132 | film_dict["Film_title"] = film_soup.find("div", {"class" : "col-17"}).find("h1").text 133 | 134 | # Try to find release year, handle cases where it's missing 135 | try: 136 | release_years = film_soup.find_all('div', class_='releaseyear') 137 | if len(release_years) > 1: # Check if we have enough elements 138 | year_text = release_years[1].find('a').text.strip() 139 | release_year = int(year_text) if year_text else 0 140 | else: 141 | release_year = 0 142 | except (AttributeError, IndexError, ValueError): 143 | release_year = 0 144 | 145 | film_dict["Release_year"] = not_found if release_year == 0 else release_year 146 | 147 | # Try to find director, if missing insert nan 148 | director = film_soup.find('meta', attrs={'name':'twitter:data1'}).attrs['content'] 149 | if director == "": 150 | director = not_found 151 | film_dict["Director"] = director 152 | 153 | # Finding the cast, if not found insert a nan 154 | try: 155 | cast = [ line.contents[0] for line in film_soup.find('div', attrs={'id':'tab-cast'}).find_all('a')] 156 | 157 | # remove all the 'Show All...' tags if they are present 158 | film_dict["Cast"] = [i for i in cast if i != 'Show All…'] 159 | except: 160 | film_dict["Cast"] = not_found 161 | 162 | # Finding average rating, if not found insert a nan 163 | try: 164 | film_dict["Average_rating"] = float(film_soup.find('meta', attrs={'name':'twitter:data2'}).attrs['content'][:4]) 165 | except: 166 | film_dict["Average_rating"] = not_found 167 | 168 | # Try to find the list owner's rating of a film if possible and converting to float 169 | try: 170 | stringval = film_html.attrs['data-owner-rating'] 171 | if stringval != '0': 172 | film_dict["Owner_rating"] = float(int(stringval)/2) 173 | else: 174 | film_dict["Owner_rating"] = not_found 175 | except: 176 | # Extra clause for type 'film' lists 177 | try: 178 | starval = film_html.find_all("span")[-1].text 179 | film_dict["Owner_rating"] = stars2val(starval, not_found) 180 | except: 181 | film_dict["Owner_rating"] = not_found 182 | 183 | # Finding film's genres, if not found insert nan 184 | try: 185 | genres = film_soup.find('div', {'class': 'text-sluglist capitalize'}) 186 | film_dict["Genres"] = [genres.text for genres in genres.find_all('a', {'class': 'text-slug'})] 187 | except: 188 | film_dict["Genres"] = not_found 189 | 190 | # Get movie runtime by searching for first sequence of digits in the p element with the runtime, if not found insert nan 191 | try: 192 | film_dict["Runtime"] = int(re.search(r'\d+', film_soup.find('p', {'class': 'text-link text-footer'}).text).group()) 193 | except: 194 | film_dict["Runtime"] = not_found 195 | 196 | # Finding countries 197 | try: 198 | film_dict["Countries"] = [ line.contents[0] for line in film_soup.find('div', attrs={'id':'tab-details'}).find_all('a', href=re.compile(r'country'))] 199 | if film_dict["Countries"] == []: 200 | film_dict["Countries"] = not_found 201 | except: 202 | film_dict["Countries"] = not_found 203 | 204 | # Finding spoken and original languages 205 | try: 206 | # Replace non-breaking spaces (\xa0) by a normal space 207 | languages = [ line.contents[0].replace('\xa0', ' ') for line in film_soup.find('div', attrs={'id':'tab-details'}).find_all('a', href=re.compile(r'language'))] 208 | film_dict["Original_language"] = languages[0] # original language (always first) 209 | film_dict["Spoken_languages"] = list(sorted(set(languages), key=languages.index)) # all unique spoken languages 210 | except: 211 | film_dict["Original_language"] = not_found 212 | film_dict["Spoken_languages"] = not_found 213 | 214 | # Finding the description, if not found insert a nan 215 | try: 216 | film_dict['Description'] = film_soup.find('meta', attrs={'name' : 'description'}).attrs['content'] 217 | except: 218 | film_dict['Description'] = not_found 219 | 220 | # !! Currently not working with films that have a comma in their title 221 | # # Finding alternative titles 222 | # try: 223 | # alternative_titles = film_soup.find('div', attrs={'id':'tab-details'}).find('div', class_="text-indentedlist").text.strip().split(", ") 224 | # except: 225 | # alternative_titles = not_found 226 | 227 | # Finding studios 228 | try: 229 | film_dict["Studios"] = [ line.contents[0] for line in film_soup.find('div', attrs={'id':'tab-details'}).find_all('a', href=re.compile(r'studio'))] 230 | if film_dict["Studios"] == []: 231 | film_dict["Studios"] = not_found 232 | except: 233 | film_dict["Studios"] = not_found 234 | 235 | # Getting number of watches, appearances in lists and number of likes (requires new link) ## 236 | movie = film_url.split('/')[-2] # Movie title in URL 237 | r = requests.get(f'https://letterboxd.com/csi/film/{movie}/stats/') # Stats page of said movie 238 | stats_soup = BeautifulSoup(r.content, 'lxml') 239 | 240 | # Get number of people that have watched the movie 241 | watches = stats_soup.find('a', {'class': 'has-icon icon-watched icon-16 tooltip'})["title"] 242 | watches = re.findall(r'\d+', watches) # Find the number from string 243 | film_dict["Watches"] = int(''.join(watches)) # Filter out commas from large numbers 244 | 245 | # Get number of film appearances in lists 246 | list_appearances = stats_soup.find('a', {'class': 'has-icon icon-list icon-16 tooltip'})["title"] 247 | list_appearances = re.findall(r'\d+', list_appearances) 248 | film_dict["List_appearances"] = int(''.join(list_appearances)) 249 | 250 | # Get number of people that have liked the movie 251 | likes = stats_soup.find('a', {'class': 'has-icon icon-like icon-liked icon-16 tooltip'})["title"] 252 | likes = re.findall(r'\d+', likes) 253 | film_dict["Likes"] = int(''.join(likes)) 254 | 255 | # Getting info on rating histogram (requires new link) 256 | r = requests.get(f'https://letterboxd.com/csi/film/{movie}/rating-histogram/') # Rating histogram page of said movie 257 | hist_soup = BeautifulSoup(r.content, 'lxml') 258 | 259 | # Get number of fans. Amount is given in 'K' notation, so if relevant rounded off to full thousands 260 | try: 261 | fans = hist_soup.find('a', {'class': 'all-link more-link'}).text 262 | fans = re.findall(r'\d+.\d+K?|\d+K?', fans)[0] 263 | if "." and "K" in fans: 264 | fans = int(float(fans[:-1]) * 1000) 265 | elif "K" in fans: 266 | fans = int(fans[-1]) * 1000 267 | else: 268 | fans = int(fans) 269 | except: 270 | fans = 0 271 | film_dict["Fans"] = fans 272 | 273 | # Get rating histogram (i.e. how many star ratings were given) and total ratings (sum of rating histogram) 274 | ratings = hist_soup.find_all("li", {'class': 'rating-histogram-bar'}) 275 | tot_ratings = 0 276 | if len(ratings) != 0: 277 | for i, r in enumerate(ratings): 278 | string = r.text.strip(" ") 279 | stars = val2stars((i+1)/2, not_found) 280 | if string == "": 281 | film_dict[f"{stars}"] = 0 282 | else: 283 | Nratings = re.findall(r'\d+', string)[:-1] 284 | Nratings = int(''.join(Nratings)) 285 | film_dict[f"{stars}"] = Nratings 286 | tot_ratings += Nratings 287 | 288 | # If the film has not been released yet (i.e. no ratings) 289 | else: 290 | for i in range(10): 291 | stars = val2stars((i+1)/2, not_found) 292 | film_dict[f"{stars}"] = 0 293 | 294 | film_dict["Total_ratings"] = tot_ratings 295 | 296 | # Thumbnail URL? 297 | 298 | # Banner URL? 299 | 300 | # Save the film URL as an extra column 301 | film_dict["Film_URL"] = film_url 302 | 303 | return film_dict 304 | -------------------------------------------------------------------------------- /listscraper/utility_functions.py: -------------------------------------------------------------------------------- 1 | # Some utility functions are stored here 2 | 3 | def stars2val(stars, not_found): 4 | """ 5 | Transforms star rating into float value. 6 | """ 7 | 8 | conv_dict = { 9 | "★": 1.0, 10 | "★★": 2.0, 11 | "★★★": 3.0, 12 | "★★★★": 4.0, 13 | "★★★★★": 5.0, 14 | "½": 0.5, 15 | "★½": 1.5, 16 | "★★½": 2.5, 17 | "★★★½": 3.5, 18 | "★★★★½": 4.5 } 19 | 20 | try: 21 | val = conv_dict[stars] 22 | return val 23 | except: 24 | return not_found 25 | 26 | def val2stars(val, not_found): 27 | """ 28 | Transforms float value into star string. 29 | """ 30 | conv_dict = { 31 | 1.0 : "★", 32 | 2.0 : "★★", 33 | 3.0 : "★★★", 34 | 4.0 : "★★★★", 35 | 5.0 : "★★★★★", 36 | 0.5 : "½", 37 | 1.5 : "★½", 38 | 2.5 : "★★½", 39 | 3.5 : "★★★½", 40 | 4.5 : "★★★★½" } 41 | try: 42 | stars = conv_dict[val] 43 | return stars 44 | except: 45 | return not_found -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/L-Dot/Letterboxd-list-scraper/f0d50ff7e28dd3b8945d14624a20bab5f8be33eb/requirements.txt -------------------------------------------------------------------------------- /target_lists.txt: -------------------------------------------------------------------------------- 1 | # This is an example list that was imported using `python -m listscraper -f target_lists.txt`. Note that each line can take separate optional flags. 2 | # The output CSVs of this example run can be seen in the /example_output/ folder. 3 | 4 | https://letterboxd.com/bjornbork/watchlist/decade/2020s/ 5 | -on lb_top250 https://letterboxd.com/dave/list/official-top-250-narrative-feature-films/ 6 | -p 1 https://letterboxd.com/films/popular/this/month/ --------------------------------------------------------------------------------