{"id":15029216,"url":"https://github.com/scholarly-python-package/scholarly","last_synced_at":"2025-05-15T00:06:10.274Z","repository":{"id":24057073,"uuid":"27442991","full_name":"scholarly-python-package/scholarly","owner":"scholarly-python-package","description":"Retrieve author and publication information from Google Scholar in a friendly, Pythonic way without having to worry about CAPTCHAs!","archived":false,"fork":false,"pushed_at":"2025-04-28T02:05:20.000Z","size":6720,"stargazers_count":1604,"open_issues_count":48,"forks_count":328,"subscribers_count":26,"default_branch":"main","last_synced_at":"2025-04-28T13:58:40.640Z","etag":null,"topics":["citation-analysis","citation-index","citation-network","citations","googlescholar","publication-data","python","python-3","python3","scholar","scholarly-articles","scholarly-communications"],"latest_commit_sha":null,"homepage":"https://scholarly.readthedocs.io/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/scholarly-python-package.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2014-12-02T17:01:14.000Z","updated_at":"2025-04-27T07:20:48.000Z","dependencies_parsed_at":"2023-02-16T03:45:51.617Z","dependency_job_id":"9dbe79e6-9329-431d-ad48-866f51d7b03d","html_url":"https://github.com/scholarly-python-package/scholarly","commit_stats":{"total_commits":551,"total_committers":44,"mean_commits":"12.522727272727273","dds":0.6569872958257713,"last_synced_commit":"9269ff36ad2314e6cc0c5b499efc3b79b844707e"},"previous_names":[],"tags_count":65,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scholarly-python-package%2Fscholarly","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scholarly-python-package%2Fscholarly/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scholarly-python-package%2Fscholarly/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/scholarly-python-package%2Fscholarly/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/scholarly-python-package","download_url":"https://codeload.github.com/scholarly-python-package/scholarly/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252435839,"owners_count":21747458,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["citation-analysis","citation-index","citation-network","citations","googlescholar","publication-data","python","python-3","python3","scholar","scholarly-articles","scholarly-communications"],"created_at":"2024-09-24T20:09:58.801Z","updated_at":"2025-05-07T11:52:26.849Z","avatar_url":"https://github.com/scholarly-python-package.png","language":"Python","readme":"[![Python package](https://github.com/scholarly-python-package/scholarly/workflows/Python%20package/badge.svg?branch=main)](https://github.com/scholarly-python-package/scholarly/actions?query=branch%3Amain)\r\n[![codecov](https://codecov.io/gh/scholarly-python-package/scholarly/branch/main/graph/badge.svg?token=0svtI9yVSQ)](https://codecov.io/gh/scholarly-python-package/scholarly)\r\n[![Documentation Status](https://readthedocs.org/projects/scholarly/badge/?version=latest)](https://scholarly.readthedocs.io/en/latest/?badge=latest)\r\n[![DOI](https://zenodo.org/badge/27442991.svg)](https://zenodo.org/badge/latestdoi/27442991)\r\n\r\n# scholarly\r\n\r\nscholarly is a module that allows you to retrieve author and publication information from [Google Scholar](https://scholar.google.com) in a friendly, Pythonic way without having to solve CAPTCHAs.\r\n\r\n## Installation\r\n\r\n[![Anaconda-Server Badge](https://anaconda.org/conda-forge/scholarly/badges/version.svg)](https://anaconda.org/conda-forge/scholarly)\r\n[![PyPI version](https://badge.fury.io/py/scholarly.svg)](https://badge.fury.io/py/scholarly)\r\n\r\n`scholarly` can be installed either with `conda` or with `pip`.\r\nTo install using `conda`, simply run\r\n```bash\r\nconda install -c conda-forge scholarly\r\n```\r\n\r\nAlternatively, use `pip` to install the latest release from pypi:\r\n\r\n```bash\r\npip3 install scholarly\r\n```\r\n\r\nor `pip` to install from github:\r\n\r\n```bash\r\npip3 install -U git+https://github.com/scholarly-python-package/scholarly.git\r\n```\r\n\r\nWe are constantly developing new features.\r\nPlease update your local package regularly.\r\n`scholarly` follows [Semantic Versioning](https://semver.org/).\r\nThis means your code that uses an earlier version of `scholarly` is guaranteed to work with newer versions.\r\n\r\n### Optional dependencies\r\n\r\n- **Tor**:\r\n\r\n    `scholarly` comes with a handful of APIs to set up proxies to circumvent anti-bot measures.\r\n    Tor methods are deprecated since v1.5 and are not actively tested or supported.\r\n    If you wish to use Tor, install `scholarly` using the `tor` tag as\r\n    ```bash\r\n    pip3 install scholarly[tor]\r\n    ```\r\n    If you use `zsh` (which is now the default in latest macOS), you should type this as\r\n    ```zsh\r\n    pip3 install scholarly'[tor]'\r\n    ```\r\n    **Note:** Tor option is unavailable with conda installation.\r\n\r\n## Tests\r\n\r\nTo check if your installation is succesful, run the tests by executing the `test_module.py` file as:\r\n\r\n```bash\r\npython3 test_module\r\n```\r\n\r\nor\r\n\r\n```bash\r\npython3 -m unittest -v test_module.py\r\n```\r\n## Documentation\r\n\r\nCheck the [documentation](https://scholarly.readthedocs.io/en/latest/?badge=latest) for a [complete API reference](https://scholarly.readthedocs.io/en/stable/scholarly.html) and a [quickstart guide](https://scholarly.readthedocs.io/en/stable/quickstart.html).\r\n\r\n### Examples\r\n\r\n```python\r\nfrom scholarly import scholarly\r\n\r\n# Retrieve the author's data, fill-in, and print\r\n# Get an iterator for the author results\r\nsearch_query = scholarly.search_author('Steven A Cholewiak')\r\n# Retrieve the first result from the iterator\r\nfirst_author_result = next(search_query)\r\nscholarly.pprint(first_author_result)\r\n\r\n# Retrieve all the details for the author\r\nauthor = scholarly.fill(first_author_result )\r\nscholarly.pprint(author)\r\n\r\n# Take a closer look at the first publication\r\nfirst_publication = author['publications'][0]\r\nfirst_publication_filled = scholarly.fill(first_publication)\r\nscholarly.pprint(first_publication_filled)\r\n\r\n# Print the titles of the author's publications\r\npublication_titles = [pub['bib']['title'] for pub in author['publications']]\r\nprint(publication_titles)\r\n\r\n# Which papers cited that publication?\r\ncitations = [citation['bib']['title'] for citation in scholarly.citedby(first_publication_filled)]\r\nprint(citations)\r\n```\r\n\r\n**IMPORTANT**: Making certain types of queries, such as `scholarly.citedby` or `scholarly.search_pubs`, will lead to Google Scholar blocking your requests and may eventually block your IP address.\r\nYou must use proxy services to avoid this situation.\r\nSee the [\"Using proxies\" section](https://scholarly.readthedocs.io/en/stable/quickstart.html#using-proxies) in the documentation for more details. Here's a short example:\r\n\r\n```python\r\nfrom scholarly import ProxyGenerator\r\n\r\n# Set up a ProxyGenerator object to use free proxies\r\n# This needs to be done only once per session\r\npg = ProxyGenerator()\r\npg.FreeProxies()\r\nscholarly.use_proxy(pg)\r\n\r\n# Now search Google Scholar from behind a proxy\r\nsearch_query = scholarly.search_pubs('Perception of physical stability and center of mass of 3D objects')\r\nscholarly.pprint(next(search_query))\r\n```\r\n\r\n`scholarly` also has APIs that work with several premium (paid) proxy services.\r\n`scholarly` is smart enough to know which queries need proxies and which do not.\r\nIt is therefore recommended to always set up a proxy in the beginning of your application.\r\n\r\n#### Disclaimer\r\n\r\nThe developers use `ScraperAPI` to run the tests in Github Actions.\r\nThe developers of `scholarly` are not affiliated with any of the proxy services and do not profit from them. If your favorite service is not supported, please submit an issue or even better, follow it up with a pull request.\r\n\r\n## Contributing\r\n\r\nWe welcome contributions from you.\r\nPlease create an issue, fork this repository and submit a pull request.\r\nRead the [contributing document](.github/CONTRIBUTING.md) for more information.\r\n\r\n## Acknowledging `scholarly`\r\n\r\nIf you have used this codebase in a scientific publication, please cite this software as following:\r\n\r\n```bibtex\r\n@software{cholewiak2021scholarly,\r\n  author  = {Cholewiak, Steven A. and Ipeirotis, Panos and Silva, Victor and Kannawadi, Arun},\r\n  title   = {{SCHOLARLY: Simple access to Google Scholar authors and citation using Python}},\r\n  year    = {2021},\r\n  doi     = {10.5281/zenodo.5764801},\r\n  license = {Unlicense},\r\n  url = {https://github.com/scholarly-python-package/scholarly},\r\n  version = {1.5.1}\r\n}\r\n```\r\n\r\n## License\r\n\r\nThe original code that this project was forked from was released by [Luciano Bello](https://github.com/lbello/chalmers-web) under a [WTFPL](http://www.wtfpl.net/) license. In keeping with this mentality, all code is released under the [Unlicense](http://unlicense.org/).\r\n","funding_links":[],"categories":["Python"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscholarly-python-package%2Fscholarly","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fscholarly-python-package%2Fscholarly","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fscholarly-python-package%2Fscholarly/lists"}