写论文的时候需要搞一个 shareholder activism 变量,但是学校没买。看了下 Brav et al. (2018 JFE),发现这个数据是直接从 SEC EDGAR 的 13D 文件整理的,等图书馆订要好几天,索性自己爬了。
获取 Cookies
我一般用 Selenium 获取 cookies,这种方法自动化,而且几乎对任何网站都适用。对于 EDGAR,由于默认只显示文件名称,文件日期和涉及实体的名称。打开网页后,需要下拉页面勾选 CIK,File number 等其他你需要的选项。其中最关键的是 CIK ,这是链接 SEC File 和其他财务数据库 (Compustat,CRSP 等) 的关键识别变量。
打开 源网址 后呈现的页面如下
下拉默认只有三列数据
勾选了其他数据栏后会呈现多列数据,相应的 Cookies 也会发现变化
代码
from selenium import webdriver
import time
import json
option = webdriver.FirefoxOptions()
option.add_argument('-headless')
driver = webdriver.Firefox(executable_path='/Users/mengjiexu/Dropbox/Pythoncodes/geckodriver')
driver.get("https://www.sec.gov/edgar/search/#/dateRange=custom&category=custom&startdt=2001-01-01&enddt=2021-05-27&forms=SC%252013D")
# 打开源网页
time.sleep(3)
driver.execute_script('window.scrollTo(0,500)')
# 向下拉到勾选位置
time.sleep(2)
driver.find_element_by_xpath("//input[@value='cik']").click()
# 点选 CIK
driver.find_element_by_xpath("//input[@value='file-num']").click()
# 点选 File number
time.sleep(2)
# 记录 cookies 并写入 txt 文件中
orcookies = driver.get_cookies()
print(orcookies)
cookies = {
}
for item in orcookies:
cookies[item['name']] = item['value']
with open("edgarcookies.txt", "w") as f:
f.write(json.dumps(cookies))
driver.close()
获取 Json
从 search-index 中可以找到返回的 Json 源
翻到第二页,Fetch 得到 post 的参数信息,这里关键是是 headers 和 body
await fetch("https://efts.sec.gov/LATEST/search-index"