【发布时间】:2020-03-16 14:02:52
【问题描述】:
我将继续从我的previous question 开始的分析。我在一个由四列组成的数据框中获得了有关特定工作论文出版物的信息:出版年份、出版顺序(每年的出版顺序,在这种情况下完全没用)、标题和作者。因此,我想使用这个数据框来抓取 Google Scholar 并检索有关引用次数的信息。 因为有些论文的标题有点笼统,在某些情况下,谷歌学者的第一个结果实际上并不是我感兴趣的。因此,为了进行更量身定制的研究,在创建链接来执行我的研究包括每篇论文的标题和作者。我在编写代码时遵循了this 线程。
注意:因为执行此抓取需要真实姓名,所以我宁愿不创建示例数据框。我已将 .csv 文件上传到我的 GitHub 上。
import pandas as pd
import requests
from bs4 import BeautifulSoup as bs
from random import randint
from time import sleep
url = 'https://raw.githubusercontent.com/nicolacaravaggio/working_paper_roma3/master/rm3_working_paper_list.csv'
df = pd.read_csv(url, error_bad_lines = False)
papers = []
for index, rows in df.iterrows():
list_paper = rows.title + ' ' + rows.author
papers.append(list_paper)
title_list_gs = []
citations_list_gs = []
with requests.Session() as s:
for paper in papers:
sleep(randint(1,3))
url = 'https://scholar.google.com/scholar?q=' + paper + '&ie=UTF-8&oe=UTF-8&hl=en&btnG=Search'
r = s.get(url)
soup = bs(r.content, 'html.parser')
title_gs = soup.select_one('h3.gs_rt a').text if soup.select_one('h3.gs_rt a') is not None else 'No title'
title_list_gs.append(title_gs)
citations_gs = soup.select_one('a:contains("Cited by")').text if soup.select_one('a:contains("Cited by")') is not None else 'No citation count'
citations_list_gs.append(citations_gs)
print('Title:', title_gs, '; Citations:', citations_gs)
但是,我从这个脚本得到的结果只是一个列表:
Title: No title ; Citations: No Citation count
我不确定问题出在我笨拙的脚本(可能)还是因为 Google 阻止我从 Scholar 中抓取太多内容。事实上,即使是我在这个线程中用作起点的script,它也并不总是以预期的结果返回。我希望有人能给我一些建议。提前谢谢你。
【问题讨论】:
-
它显示了一个验证码,这就是它不返回任何数据的原因
标签: web-scraping beautifulsoup google-scholar