Academic Graph API, Dataset Releases and Matching Records to DOI or PubMed
There is a public Semantic Scholar API, and it is generous enough to change what a scraper is for. Three services sit behind api.semanticscholar.org: Academic Graph, Recommendations and Datasets. Academic Graph covers paper and author lookup, relevance search that returns a hundred hits per call and stops at a thousand ranked results, a bulk search that walks a thousand records at a time on a continuation token, title matching, batch lookups of up to 500 paper ids, paged citations and references, and a snippet search returning roughly 500-word excerpts tagged with the section they came from.
Quotas are the catch. Anonymous callers share one pool and get throttled under load as a matter of course; an issued key starts at one request per second on every endpoint, and a single response is capped at 10 MB. Bulk search stops after ten million papers per query, and past that the Datasets API is the documented route, which will not show a download link at all without a key.
Those releases are heavy: a fresh one lands weekly, with papers at about 200 million records in thirty files of 1.5 GB, abstracts at 100 million, citations at 2.4 billion in thirty files of 8.5 GB, authors at 75 million, tldrs at 58 million, an ID map of 450 million rows, venues, parsed full text from open-access PDFs, and SPECTER vectors in thirty files of 28 GB. Diffs list updated and deleted files so you upsert by corpusid instead of pulling everything again. Lookups accept DOI, ARXIV, MAG, ACL, PMID, PMCID, CorpusId and URL prefixes, which is how a Semantic Scholar extract joins onto PubMed, arXiv or an internal DOI list.