Я хотел бы нарисовать гистограмму того, как h-индекс автора Google-ученого меняется с каждым годом. Чтобы вычислить это, мне понадобится количество ссылок на бумагу в год и вычислить h-индекс в год.
Мне удалось получить график на странице профиля автора. Возьмите в качестве примера ученого Google Альберта Эйнштейна https://scholar.google.com/citations?user=qc6CJjYAAAAJ&hl=en, Я получил график количества цитирований за год справа, но это не правильно. Что я действительно хочу, так это то, что когда вы нажимаете на бумагу, появляется график «Всего ссылок по годам». Я использую пакет BeautifulSoup и селен в Python. Моя самая большая проблема сейчас:
Если вы проверяете html-код автора, содержание каждой статьи скрыто, как пролистать каждую статью и получить доступ к графику общего количества цитирований за год? *
Вот что я сделал для графика справа
def get_citation_by_year(url):
s = soup(str(urllib.request.urlopen(url).read()), 'lxml')
print(s)
#print(s.title.text) #whose google scholar is this?
years = list(map(int, [i.text for i in s.find_all('span', {'class':'gsc_g_t'})]))
citation_number = list(map(int, [i.text for i in s.find_all('span', {'class':'gsc_g_al'})]))
final_chart_data = dict(zip(years, citation_number))
df = pd.DataFrame({'Year': years, 'Cited_By': citation_number})
return(df)
Нажмите кнопку «Показать больше», чтобы отобразить максимальное количество статей:
def get_citation_byarticle_byyear(url):
#quote_page is an URL of google scholar page of a specific author
quote_page = url
page = urlopen(quote_page)
# Click Show more
chrome_options = Options()
chrome_options.add_argument("--headless")
driver = webdriver.Chrome(chrome_options=chrome_options, executable_path=r"/Users/upcrown/Desktop/chromedriver") #need to download ChromeDriver, http://chromedriver.chromium.org/downloads
driver.implicitly_wait(30)
driver.get(url)
python_button = driver.find_element_by_xpath('//*[@id="gsc_bpf_more"]')
python_button.click() #click fhsu link
time.sleep(5)
# Selenium hands the page source to Beautiful Soup
s = BeautifulSoup(driver.page_source, "html.parser")
year = list(map(str, [i.text for i in s.find_all('span', {'class': 'gsc_a_h gsc_a_hc gs_ibl'})])) ##string not int because some are ''
#find the paper
#paper = soup.find_all("a", attrs={"class": "gsc_a_at"})
paper = list(map(str, [i.text for i in s.find_all('a', {'class': 'gsc_a_at'})]))
#find the citations
#citations = soup.find_all("a", attrs={"class":"gsc_a_ac gs_ibl"})
citations = list(map(str, [i.text for i in s.find_all('a', {'class': 'gsc_a_ac gs_ibl'})]))
Испытывались другие инструменты: R "стипендиат", не имеет количества цитирований на бумагу в год, имеет только количество цитирований в год.
Приложение Windows: Опубликовать или Погасить (та же проблема).
Scopus API (не содержит полных списков всех статей автора в качестве ученого Google)