获取首次发表年份 Google 学者

Get year of first publication Google Scholar

我正在使用 bs4 和 urllib 从 Google Scholar 抓取数据。我想在第一年发表一篇文章。例如,从 this page 我试图获取 1996 年。这可以从条形图中读取,但只有在单击条形图后才能读取。我编写了以下代码,但它会在单击条形图之前打印出可见的年份。

from bs4 import BeautifulSoup
import urllib.request

url = 'https://scholar.google.com/citations?user=VGoSakQAAAAJ'
page = urllib.request.urlopen(url)
soup = BeautifulSoup(page, 'lxml')
year = soup.find('span', {"class": "gsc_g_t"})
print (year)

图表信息来自不同的请求,this one。在那里你可以通过以下 xpath 获得你想要的信息:

'//span[@class="gsc_g_t"][1]/text()'

或在汤中:

soup.find('span', {"class": "gsc_g_t"}).text

确保您使用的是最新的 user-agent。旧 user-agents 是向网站发出的信号,表明它可能是发送请求的机器人。但是一个新的user-agent并不意味着每个网站都会认为这是一次“真实”的用户访问。 Check what's your user-agent.

该代码片段使用了类似于 bs4parsel 库,但它支持完整的 XPath 和 translates every CSS selector query to XPath using the cssselect 包。

要集成的示例代码:

from collections import namedtuple

import requests
from parsel import Selector

# https://docs.python-requests.org/en/master/user/quickstart/#passing-parameters-in-urls
params = {
    "user": "VGoSakQAAAAJ",
    "hl": "en",
    "view_op": "citations_histogram"
}

# https://docs.python-requests.org/en/master/user/quickstart/#custom-headers
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.87 Safari/537.36",
}

html = requests.get("https://scholar.google.com/citations", params=params, headers=headers, timeout=30)
selector = Selector(html.text)

Publications = namedtuple("Years", "first_publication")
publications = Publications(sorted([publication.get() for publication in selector.css(".gsc_g_t::text")])[0])

print(selector.css(".gsc_g_t::text").get())
print(sorted([publication.get() for publication in selector.css(".gsc_g_t::text")])[0])
print(publications.first_publication)


# output:
'''
1996
1996
1996
'''

或者,您可以使用 SerpApi 中的 Google Scholar Author API 来实现相同的目的。这是付费 API 和免费计划。

不同之处在于,您不必弄清楚如何解析数据和随着时间的推移维护解析器,弄清楚如何扩展它,以及绕过搜索引擎的块,例如 Google 学术搜索引擎。

要集成的示例代码:


from serpapi import GoogleScholarSearch


params = {
  "api_key": "Your SerpApi API key",
  "engine": "google_scholar_author",
  "hl": "en",
  "author_id": "VGoSakQAAAAJ"
}

search = GoogleScholarSearch(params)
results = search.get_dict()

# already sorted data
first_publication = [year.get("year") for year in results.get("cited_by", {}).get("graph", [])][0]
print(first_publication)

# 1996

如果您想根据给定查询抓取所有配置文件结果,或者您有作者 ID 列表,我的 scrape all Google Scholar Profile, Author Results to CSV 博客 post 专门介绍了它。

Disclaimer, I work for SerpApi.