Stata连享会 主页 || 视频 || 推文 || 知乎 || Bilibili 站
温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
New!
lianxh
命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc
,ihelp
,rdbalance
,gitee
,installpkg
⛳ Stata 系列推文:
作者: 李青塬 (广东工业大学)
邮箱: qingyuanli95@gmail.com
目录
中国A股市场上如何择股?有一类投资者偏好投资创历史新高的股票。其逻辑是股价创新高有创新高的道理,可能有很好的业绩支撑或者公司业务有突破性发展,只是当前消息还没有公布,所以有的资本市场的弄潮儿偏好这类股票。本文尝试利用 Stata 爬取同花顺数据中心提供的创历史新高股票数据,实现自动爬取每个交易日的数据,不过需要 Stata 中配置 Python 环境才可运行。
该爬虫难度不大,只需要把网页数据抓取得到即可。一共需要编写 3 个函数,主函数、请求函数和解析函数。随后,把请求得到的数据写入文件中。爬取的目标网址是同花顺金融中心技术选股创新高栏目,具体网址是 http://data.10jqka.com.cn/rank/cxg/###
在具体执行程序前,需要设定文件路径,以及提前下载可以自动生成Cookie的js文件到本地。
global root= "E:\high"
global raw_data= "$root\Raw_data"
cap !mkdir "$raw_data"
cd $raw_data
copy https://gitee.com/qingyuanlee/data-center/raw/master/aes.min.js "$raw_data\"
在 Stata 中设定好可以运行 Python 的环境,此处根据安装路径自行修改。设定好好,打开 Python 环境 。
set python_exec D:\Python\python.exe
python
该项目需要综合利用不同工具箱的工具,需要导入以下的 Python 工具包。
import urllib.request
import execjs
import gzip
import xlwt
from bs4 import BeautifulSoup
import os
import datetime as dtm
接下来开始编写请求函数,使用刚刚开始下载的 js 文件生成Cookie,注入Cookie 到请求头,并发送请求。
def ask(requestUrl):
with open('./aes.min.js', 'r') as f:
jsContent = f.read()
context = execjs.compile(jsContent)
header = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
'Accept-Encoding': 'gzip, deflate',
"Accept-Language": "zh-CN,zh;q=0.9",
'Cache-Control': 'max-age=0',
'Cookie': '',
'Host': 'data.10jqka.com.cn',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
}
header['Cookie'] = 'v={}'.format(context.call("v"))
req = urllib.request.Request(url=requestUrl, headers=header)
response = urllib.request.urlopen(req)
return response
编写解析函数,将获取的数据进行解析。
def analyzing(response):
html = gzip.decompress(response.read()).decode("gbk")
soups = BeautifulSoup(html, "html.parser")
return soups
编写主函数,访问目标链接。
url = "http://data.10jqka.com.cn/rank/cxg/board/1/field/stockcode/order/asc/page/1/ajax/1/free/1/"
soup = analyzing(ask(url))
有时候,创历史新高股票较多,有好几页,所以我们需要获取爬取的总页面数。
item = soup.findAll("a", class_="changePage")
lens = 0
if len(item) != 0:
lens = item[len(item) - 1].attrs["page"]
lens = int(lens)
创建待写入的表格形式。
workbook = xlwt.Workbook(encoding="UTF-8")
worksheet = workbook.add_sheet("sheet1")
worksheet.write(0, 0, '序号')
worksheet.write(0, 1, '股票代码')
worksheet.write(0, 2, '股票简称')
worksheet.write(0, 3, '涨跌幅')
worksheet.write(0, 4, '换手率')
worksheet.write(0, 5, '最新价(元)')
worksheet.write(0, 6, '前期高点')
worksheet.write(0, 7, '前期高点日期')
先对第一页进行解析到表格中,如果有第二页可以继续解析到表格中。
i = 0
for item in soup.findAll("tr"):
j = 0
for data in item.findAll("td"):
worksheet.write(i, j, data.string)
j = j + 1
i = i + 1
if lens != 0:
url = "http://data.10jqka.com.cn/rank/cxg/board/1/field/stockcode/order/asc/page/"
ed = "/ajax/1/free/1/"
for p in range(2, lens+1):
soup = analyzing(ask(url + str(p) + ed))
i = i-1
for item in soup.findAll("tr"):
j = 0
for data in item.findAll("td"):
worksheet.write(i, j, data.string)
j = j + 1
i = i + 1
按交易日期格式保存表格到相应文件夹中。
a=dtm.date.today()
endtime=a.strftime('%Y-%m-%d')
b=endtime.split('-')
day=b[0]+b[1]+b[2]
workbook.save("E:/high/Raw_data/high_%s.xlsx"%(day))
以下代码需要 Stata 中配置 Python 环境,仅需修改 Python 运行环境路径,即可运行所有代码。
global root= "E:\high"
global raw_data= "$root\Raw_data"
cap !mkdir "$raw_data"
cd $raw_data
copy https://gitee.com/qingyuanlee/data-center/raw/master/aes.min.js "$raw_data\"
set python_exec D:\Python\python.exe //此处根据安装路径自行修改
python
import urllib.request
import execjs
import gzip
import xlwt
from bs4 import BeautifulSoup
import os
import datetime as dtm
def ask(requestUrl):
with open('./aes.min.js', 'r') as f:
jsContent = f.read()
context = execjs.compile(jsContent)
header = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
'Accept-Encoding': 'gzip, deflate',
"Accept-Language": "zh-CN,zh;q=0.9",
'Cache-Control': 'max-age=0',
'Cookie': '',
'Host': 'data.10jqka.com.cn',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
}
header['Cookie'] = 'v={}'.format(context.call("v"))
req = urllib.request.Request(url=requestUrl, headers=header)
response = urllib.request.urlopen(req)
return response
def analyzing(response):
html = gzip.decompress(response.read()).decode("gbk")
soups = BeautifulSoup(html, "html.parser")
return soups
url = "http://data.10jqka.com.cn/rank/cxg/board/1/field/stockcode/order/asc/page/1/ajax/1/free/1/"
soup = analyzing(ask(url))
item = soup.findAll("a", class_="changePage")
lens = 0
if len(item) != 0:
lens = item[len(item) - 1].attrs["page"]
lens = int(lens)
workbook = xlwt.Workbook(encoding="UTF-8")
worksheet = workbook.add_sheet("sheet1")
worksheet.write(0, 0, '序号')
worksheet.write(0, 1, '股票代码')
worksheet.write(0, 2, '股票简称')
worksheet.write(0, 3, '涨跌幅')
worksheet.write(0, 4, '换手率')
worksheet.write(0, 5, '最新价(元)')
worksheet.write(0, 6, '前期高点')
worksheet.write(0, 7, '前期高点日期')
i = 0
for item in soup.findAll("tr"):
j = 0
for data in item.findAll("td"):
worksheet.write(i, j, data.string)
j = j + 1
i = i + 1
if lens != 0:
url = "http://data.10jqka.com.cn/rank/cxg/board/1/field/stockcode/order/asc/page/"
ed = "/ajax/1/free/1/"
for p in range(2, lens+1):
soup = analyzing(ask(url + str(p) + ed))
i = i-1
for item in soup.findAll("tr"):
j = 0
for data in item.findAll("td"):
worksheet.write(i, j, data.string)
j = j + 1
i = i + 1
a=dtm.date.today()
endtime=a.strftime('%Y-%m-%d')
b=endtime.split('-')
day=b[0]+b[1]+b[2]
workbook.save("E:/high/Raw_data/high_%s.xlsx"%(day))
end
Note:产生如下推文列表的命令为:
lianxh 金融 爬虫 , m
安装最新版
lianxh
命令:ssc install lianxh, replace
免费公开课
最新课程-直播课
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 | 文本分析、机器学习、效率专题、生存分析等 | |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
⛳ 课程主页
⛳ 课程主页
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会-常见问题解答:
✨ https://gitee.com/lianxh/Course/wikis
New!
lianxh
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh