在R语言中,我试图从以下网页中抓取所有工作论文#(例如,31424,31481等):
https://www.nber.org/papers?facet=topics%3AFinancial%20Economics&page=1&perPage=50&sortBy=public_date
我试着运行下面的代码来得到这样的:
url<-"https://www.nber.org/papers?facet=topics%3AFinancial%20Economics&page=1&perPage=50&sortBy=public_date"
page=read_html(url)
name=page%>%html_nodes(".paper-card__paper_number")%>%html_text()
字符串
然而,这段代码返回character(0),没有给我工作文件#。有没有什么方法可以修改此代码以获得工作论文#的?
2条答案
按热度按时间jaql4c8m1#
要抓取动态生成的内容,您可以使用像RSelenium这样的无头浏览器自动化工具,它允许您以编程方式控制真实的的Web浏览器。下面是如何修改代码来实现这一点:
1.首先,确保安装了RSelenium和rvest:
字符串
2.加载所需的库:
型
3.启动Selenium服务器并打开浏览器:
型
4.导航到所需的URL:
型
5.获取工作底稿编号:
型
6.停止Selenium服务器并关闭浏览器:
jhdbpxl92#
Selenium的另一个替代方法是查询NBER的restful API,它将返回一个相当简单的json,带有一个类似data.frame的对象,其中不仅包含工作论文编号,还包含许多有用的信息,如作者,标题,日期等。访问API比使用Selenium快得多,因为服务器返回给客户端的数据少得多。
该API允许您分页,每个查询最多返回100个结果。您可以通过检查Web浏览器会话的网络流量来获取API的URL。
字符串
如果您需要捕获第二个页面,请通过修改URL进行分页。
型