来自EDGAR的CIK Webscraping - R.

时间:2018-04-09 07:25:49

标签: r web-scraping rvest

我正在尝试为我正在进行的项目构建一个cik查找功能。我找到了以下answer

require(XML)
require(RCurl)

getCIK = function(ticker) {
  stopifnot(is.character(ticker))
  uri = "https://www.sec.gov/cgi-bin/browse-edgar"
  response = getForm(uri,CIK=ticker,action="getcompany")
  html = htmlParse(response)
  CIKNode = getNodeSet(html, "//acronym[@title=\"Central Index Key\"][text() = \"CIK\"]")
  CIKNodeText = sapply(CIKNode, function(x) xmlValue(getSibling(getSibling(x))))
  CIK = sub(" .*","",CIKNodeText)
  CIK = sub("^0*","",CIK)
  CIK
}

getCIK("GE")
# "40545"

但是当我输入getCIK("CLDR")时。我正在

  

字符(0)

我想建立自己的功能:

library(rvest)
ticker = "cldr"
#loc = "New York"
session <- html_session("https://www.sec.gov/edgar/searchedgar/cik.htm")
form <- html_form(session)[[1]]
filled_form <- set_values(form, query = name)

query <- rvest:::submit_request(session, filled_form)

我得到了

  

错误:无法找到可能的提交目标。

我尝试输入“提交”版本,但我没有运气。有人可以给我一些指导吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

&#34; CLDR&#34;根本没用,因为Cloudera的自动收报机在某种程度上没有在EDGAR系统中更新。第一个代码段中的getCIK()在提供其他代码时效果很好。

您可以根据以下内容快速将查找从基于股票代码更改为company_name -

require(XML)
require(RCurl)

getCIKFromCompanyName = function(company_name) {
  stopifnot(is.character(company_name))
  uri = "https://www.sec.gov/cgi-bin/browse-edgar"
  response = getForm(uri,company=company_name,action="getcompany")
    html = htmlParse(response)
  CIKNode = getNodeSet(html, "//acronym[@title=\"Central Index Key\"][text() = \"CIK\"]")
  CIKNodeText = sapply(CIKNode, function(x) xmlValue(getSibling(getSibling(x))))
  CIK = sub(" .*","",CIKNodeText)
  CIK = sub("^0*","",CIK)
  CIK
}

getCIKFromCompanyName("Cloudera")

现在,当只有一个公司名称与您提供的参数类似时,这种方法很有效。这种情况在&#34; Google&#34;因为有多个公司名称与&#34; Google&#34;存在于其中。

您首先必须使用某些逻辑,首先使用自动收录器进行搜索,并且只有在不起作用的情况下,才能使用公司名称。

获得公司名称还有其他问题。例如,如果您搜索&#34;特斯拉公司&#34;,则提取失败。你必须搜索&#34;特斯拉汽车&#34;因为那是公司的原始名称。

希望这有帮助。