{"library":"scholarly","title":"scholarly","description":"scholarly is a Python module designed to programmatically retrieve author and publication information from Google Scholar, effectively bypassing CAPTCHA challenges. Currently at version 1.7.11, the library maintains an active development cycle with frequent updates to adapt to changes in Google Scholar's structure and anti-bot measures.","language":"python","status":"active","last_verified":"Sun May 17","install":{"commands":["pip install scholarly","pip install -U git+https://github.com/scholarly-python-package/scholarly.git"],"cli":null},"imports":["from scholarly import scholarly","from scholarly import ProxyGenerator"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"from scholarly import scholarly, ProxyGenerator\nimport os\n\n# It is recommended to set up a proxy from the start of your application.\n# scholarly is designed to intelligently use proxies only when necessary.\npg = ProxyGenerator()\n# For using free proxies (often less reliable for continuous scraping)\n# success = pg.FreeProxies()\n# if not success: print(\"Could not set up free proxies. Continuing without.\")\n\n# Example for ScraperAPI (recommended for reliability, requires API key)\n# Set SCAPERAPI_API_KEY environment variable\nscraperapi_key = os.environ.get('SCAPERAPI_API_KEY', '')\nif scraperapi_key:\n    print(\"Using ScraperAPI for proxies.\")\n    pg.ScraperAPI(scraperapi_key)\n    scholarly.use_proxy(pg)\nelse:\n    print(\"SCAPERAPI_API_KEY not found. Using default connection (may hit limits). \n         Consider setting up a proxy for robust scraping.\")\n\n# Search for an author\nsearch_query = scholarly.search_author('Steven A Cholewiak')\nauthor = scholarly.fill(next(search_query))\nprint(f\"Author Name: {author['name']}\")\nprint(f\"Author Affiliation: {author['affiliation']}\")\nprint(f\"Author Interests: {author['interests']}\")\n\n# Print the titles of the author's publications\npublication_titles = [pub['bib']['title'] for pub in author['publications']]\nprint(f\"First 3 publication titles: {publication_titles[:3]}\")\n\n# Take a closer look at the first publication\nif author['publications']:\n    first_publication = scholarly.fill(author['publications'][0])\n    print(f\"\\nFirst Publication Title: {first_publication['bib']['title']}\")\n    print(f\"First Publication Abstract: {first_publication['bib']['abstract'][:100]}...\")\n    \n    # Which papers cited that publication?\n    citations = [citation['bib']['title'] for citation in scholarly.citedby(first_publication)]\n    print(f\"First 3 papers citing this publication: {citations[:3]}\")","lang":"python","description":"This quickstart demonstrates how to search for an author, retrieve their full profile and publications, and find papers that cite a specific publication. It also includes an example of how to set up a `ProxyGenerator` for robust scraping, which is crucial for reliably interacting with Google Scholar's anti-bot mechanisms.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-17","installed_version":"1.7.11","pypi_latest":"1.7.11","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":50,"avg_install_s":11.2,"avg_import_s":2.72,"wheel_type":"sdist"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"-U","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"scholarly","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":2.57,"mem_mb":45.1,"disk_size":"162.0M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"-U","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":1.3,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"scholarly","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":10.4,"import_time_s":1.86,"mem_mb":45.1,"disk_size":"162M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"-U","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"scholarly","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":3.4,"mem_mb":47.4,"disk_size":"176.6M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"-U","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":1.4,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"scholarly","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":10.5,"import_time_s":3.12,"mem_mb":47.4,"disk_size":"177M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"-U","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"scholarly","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":3.17,"mem_mb":46.1,"disk_size":"164.4M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"-U","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":1.4,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"scholarly","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":11.9,"import_time_s":3.35,"mem_mb":46.2,"disk_size":"165M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"-U","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"scholarly","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":2.79,"mem_mb":45.2,"disk_size":"164.3M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"-U","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":1.4,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"scholarly","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":11.1,"import_time_s":2.95,"mem_mb":45.2,"disk_size":"165M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"-U","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"scholarly","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":2.11,"mem_mb":44.2,"disk_size":"161.5M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"-U","exit_code":1,"wheel_type":null,"failure_reason":"build_error","import_side_effects":null,"install_time_s":1.7,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"scholarly","exit_code":0,"wheel_type":"sdist","failure_reason":null,"import_side_effects":"clean","install_time_s":12.1,"import_time_s":1.93,"mem_mb":44.2,"disk_size":"162M"}]}}