import csv
import time

import requests
from bs4 import BeautifulSoup

session = requests.Session()
session.headers["User-Agent"] = "Mozilla/5.0 (compatible; research-script/1.0)"


def scrape(urls, out_file):
    with open(out_file, "w", newline="", encoding="utf-8") as f:
        writer = csv.writer(f)
        writer.writerow(["title", "rating", "url"])
        for url in urls:
            response = session.get(url, timeout=20)
            response.raise_for_status()
            soup = BeautifulSoup(response.text, "html.parser")
            for item in soup.select(".item"):            # adjust selectors to the page
                title = item.select_one(".title")
                rating = item.select_one(".rating")
                writer.writerow([
                    title.get_text(strip=True) if title else "",
                    rating.get_text(strip=True) if rating else "",
                    url,
                ])
            time.sleep(2)                                  # be polite: one page every 2 seconds


if __name__ == "__main__":
    scrape(["https://example.com/page/1", "https://example.com/page/2"], "results.csv")

Check the site’s terms and robots.txt before scraping, and prefer an official API when one exists. Selectors change when a site is redesigned, so keep them in one place.