Ich möchte ein Python-Programm schreiben, das folgendes tut:
1. Die 200 am höchsten bewerteten Filme auf der IMDB-Website extrahiert.
2. Eine Liste mit ihren Namen und Metadaten (Jahr, Produzenten, Regisseur, Drehbuchautor, Liste der Schauspieler usw.) erstellt.
3. Für jeden Film sucht das Programm bei Google nach etwa 100 Filmkritiken und speichert sie in einer separaten Datei zusammen mit den Metadaten.
Die Extraktion der 200 am höchsten bewerteten Filme auf der IMDB-Website kann mit Web-Scraping-Techniken durchgeführt werden. Hier ist ein Beispielprogramm, das die Bibliotheken BeautifulSoup und Requests verwendet, um die Filmtitel und ihre Links zu extrahieren:

```python
import requests
from bs4 import BeautifulSoup

url = "https://www.imdb.com/chart/top"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")

# Finde die Liste der Filmtitel
movie_titles = soup.select("td.titleColumn a")

# Erhalte die Top 200 Filmtitel und Links
top_200_movies = [(title.text.strip(), "https://www.imdb.com" + title["href"]) for title in movie_titles[:200]]
```

Sobald du die Liste der Filmtitel und Links hast, kannst du die IMDbPY-Bibliothek verwenden, um die Metadaten für jeden Film zu extrahieren:

```python
import imdb

ia = imdb.IMDb()

# Funktion zum Extrahieren der Metadaten für einen Film
def get_movie_metadata(movie_url):
    imdb_id = movie_url.split("/")[-2]
    movie = ia.get_movie(imdb_id)

    return {
        "title": movie.get("title"),
        "year": movie.get("year"),
        "producers": [person.get("name") for person in movie.get("producers")],
        "director": [person.get("name") for person in movie.get("directors")],
        "screenwriter": [person.get("name") for person in movie.get("writers")],
        "actors": [person.get("name") for person in movie.get("cast")]
    }

# Hole die Metadaten für jeden Film
movie_metadata = [get_movie_metadata(url) for title, url in top_200_movies]
```

Um bei Google nach Filmkritiken zu suchen, kannst du die Google Custom Search API oder eine Web-Scraping-Bibliothek wie BeautifulSoup und Requests verwenden. Hier ist ein Beispiel mit BeautifulSoup und Requests:

```python
import os
import time
import requests
from bs4 import BeautifulSoup

# Setze die Google-Suchanfrage
base_url = "https://www.google.com/search?q="
query_template = "{} Filmkritik site:{}.com"
movie_sites = ["nytimes", "variety", "hollywoodreporter"]

# Funktion zum Suchen von Filmkritiken bei Google
def search_movie_reviews(title):
    reviews = []
    for site in movie_sites:
        query = query_template.format(title, site)
        url = base_url + "+".join(query.split())
        response = requests.get(url)
        soup = BeautifulSoup(response.text, "html.parser")
        review_links = soup.select("a[href*=https://" + site + ".com/]")
        for link in review_links:
            review_url = link["href"]
            review_title = link.text.strip()
            reviews.append({"title": review_title, "url": review_url, "source": site})
        # Warte 5 Sekunden, um den Server nicht zu überlasten
        time.sleep(5)
    return reviews

# Erstelle ein Verzeichnis zum Speichern der Kritiken
if not os.path.exists("reviews"):
    os.mkdir("reviews")

# Suche nach Kritiken für jeden Film und speichere sie in einer separaten Datei
for movie in movie_metadata:
    reviews = search_movie_reviews(movie["title"])
    filename = "reviews/" + movie["title"].replace(" ", "_") + ".txt"
    with open(filename, "w") as f:
        f.write("Film: {}
".format(movie["title"]))
        f.write("Jahr: {}
".format(movie["year"]))
        f.write("Produzenten: {}
".format(", ".join(movie["producers"])))
        f.write("Regisseur: {}
".format(", ".join(movie["director"])))
        f.write("Drehbuchautor: {}

```