Skip to content

Latest commit

 

History

History
89 lines (65 loc) · 2.25 KB

File metadata and controls

89 lines (65 loc) · 2.25 KB

Python — Open Library Scraper

Call the hosted Open Library Scraper from Python with the official apify-client.

Install

pip install apify-client

Full-text search

from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")

run = client.actor("logiover/openlibrary-scraper").call(run_input={
    "mode": "search",
    "query": "science fiction",
    "maxResults": 500,
})

items = list(client.dataset(run["defaultDatasetId"]).iterate_items())
print(f"Got {len(items)} books")
for b in items[:5]:
    print(b["title"], "—", b["authors"], "★", b.get("ratingsAverage"))

Build a genre dataset with pandas

import pandas as pd
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")

run = client.actor("logiover/openlibrary-scraper").call(run_input={
    "mode": "subject",
    "subject": "science_fiction",
    "maxResults": 2000,
})

df = pd.DataFrame(client.dataset(run["defaultDatasetId"]).iterate_items())
top = df[df["ratingsCount"].fillna(0) > 100].sort_values("ratingsAverage", ascending=False)
print(top[["title", "authors", "ratingsAverage", "ratingsCount"]].head(10))
df.to_csv("scifi_books.csv", index=False)

Look up a book by ISBN

from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")

run = client.actor("logiover/openlibrary-scraper").call(run_input={
    "mode": "search",
    "query": "isbn:9780262035613",
})

for b in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(b["title"], "—", b["publishers"], "—", b["isbn"])

Save everything to CSV

import csv
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")
run = client.actor("logiover/openlibrary-scraper").call(run_input={
    "mode": "author",
    "query": "Ursula K. Le Guin",
    "maxResults": 50,
})

rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())
with open("books.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.DictWriter(f, fieldnames=rows[0].keys())
    writer.writeheader()
    writer.writerows(rows)
print(f"Saved {len(rows)} rows to books.csv")

📄 Documentation only. ▶️ Run the Actor: https://apify.com/logiover/openlibrary-scraper