user: I wish to write a python program that:
1. extracts the 200 most highly ranked movies on the IMDB website.
2. creates a list of their names and metadata (year, producers, director, screenwriter, list of actors, etc.) 
3. for each film, the program searches google for ~100 reviews of those movies by film critics and stores them in a separate file for each review along with it's metadata

assistant: To accomplish this task, you will need to use web scraping techniques to extract information from the IMDB website and Google search results. Here's a general outline of the steps you can take to write this Python program:

1. Import the necessary libraries for web scraping: requests, beautifulsoup4, and lxml.
Use the requests library to get the HTML code for the IMDB website's "Top Rated Movies" page.
2. Use beautifulsoup4 to parse the HTML code and extract the movie titles and their IMDb IDs.
3. Use the IMDb IDs to access the movie pages and extract the metadata for each movie (year, producers, director, screenwriter, actors, etc.).
4. Create a list of dictionaries that contains the movie metadata for each of the top 200 movies.
5. For each movie, use googlesearch-python library to search for ~100 reviews by film critics.
6. Use requests library to get the HTML code for each review page.
7. Use beautifulsoup4 to parse the HTML code and extract the review text and its metadata.
8. Store the review text and its metadata in a separate file for each review.

Here's some sample code to get you started:


```python:

import requests
from bs4 import BeautifulSoup
from googlesearch import search

# Step 1: Get the HTML code for the IMDB website's "Top Rated Movies" page
url = "https://www.imdb.com/chart/top"
response = requests.get(url)
html_code = response.text

# Step 2: Parse the HTML code and extract the movie titles and their IMDb IDs
soup = BeautifulSoup(html_code, "lxml")
movie_list = soup.find("tbody", {"class": "lister-list"}).find_all("tr")
movies = []
for movie in movie_list[:200]:
    title = movie.find("td", {"class": "titleColumn"}).find("a").text
    imdb_id = movie.find("td", {"class": "titleColumn"}).find("a")["href"].split("/")[-2]
    movies.append({"title": title, "imdb_id": imdb_id})

# Step 3: Use the IMDb IDs to access the movie pages and extract the metadata for each movie
for movie in movies:
    imdb_url = f"https://www.imdb.com/title/{movie['imdb_id']}"
    response = requests.get(imdb_url)
    html_code = response.text
    soup = BeautifulSoup(html_code, "lxml")
    # extract metadata here and add it to the movie dictionary

# Step 4: Create a list of dictionaries that contains the movie metadata for each of the top 200 movies
movies_metadata = []

# Step 5: For each movie, use googlesearch-python library to search for ~100 reviews by film critics
for movie in movies:
    query = f"{movie['title']} reviews"
    for review_url in search(query, num_results=100):
        response = requests.get(review_url)
        html_code = response.text
        soup = BeautifulSoup(html_code, "lxml")
        # Step 6-8: extract review text and its metadata and store it in a separate file for each review

```


Note: You will need to install the googlesearch-python and lxml library using pip. Also, make sure to follow the terms of service for both IMDB and Google to avoid violating any rules.