Python 超强文献下载工具 Scihub-cn 又更新啦!

Scihub-cn 开发维护到现在已经2年多了,感谢各位朋友的使用和支持,尤其是那些参与开源贡献的朋友,本人工作比较繁忙,正是有这些朋友帮忙维护和改进项目,才给这个项目提供了长久的生命力,非常感谢他们。

本次升级主要是修复Scihub-cn下载的时候总是报 “scihub数据库不存在这篇论文!” 的错误,这个错误是由于scihub反爬及页面改版导致的。前几个月Scihub-cn一直处于无法使用的状态,现在你只要更新最新版代码就可以使用了。

接下来还是给大家正式介绍一下使用方式。

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。

(可选1) 如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda,它内置了Python和pip.

(可选2) 此外,推荐大家用VSCode编辑器来编写小型Python项目:Python 编程的最好搭档—VSCode 详细指南

Windows环境下打开Cmd(开始—运行—CMD),苹果系统环境下请打开Terminal(command+空格输入Terminal),输入命令安装依赖:

pip install --upgrade scihub-cn

2.Scihub-cn 使用方法

2.1 使用DOI号下载论文

首先让我们来试试根据DOI号下载文献:

scihub-cn -d 10.1038/s41524-017-0032-0

下载的论文会自动生成在当前文件夹下:

你也可以选择将其下载到任意目录下,只需要添加 -o 参数:

scihub-cn -d 10.1038/s41524-017-0032-0 -o D:\papers

这将会把这篇论文下载到D盘的papers文件夹中。

2.2 根据关键词下载论文

使用 -w 参数指定一个关键词,可以通过关键词下载论文:

scihub-cn -w reinforcement

同样滴,它也支持-o参数指定文件夹。此外,这里默认使用的搜索引擎是百度学术,你也可以使用Google学术、publons、science_direct等。通过指定 -e 参数即可:

scihub-cn -w reinforcement -e google_scholar

为了避免Google学术无法连接,你还可以增加代理 -p 参数:

scihub-cn -w reinforcement -e google_scholar -p http://127.0.0.1:10808

访问外网数据源的时候,增加代理能避免出现Connection closed等问题。

此外,你还能限定下载的篇目, 比如我希望下载100篇文章:

scihub-cn -w reinforcement -l 100

2.3 根据url下载论文

给定任意论文地址,可以让scihub-cn尝试去下载该论文:

scihub-cn -u https://ieeexplore.ieee.org/document/26502

使用 -u 参数指定论文链接即可,非常方便。

3.批量下载论文

当然,之前花了几篇文章优化的批量下载模块这个版本肯定少不了!

而且还增加了几种新的批量下载方式:

1. 根据给出所有论文名称的txt文本文件下载论文。

2. 根据给出所有论文url的txt文件下载论文。

3. 根据给出所有论文DOI号的txt文本文件下载论文。

4. 根据给出bibtex文件下载论文。

比如,根据给出所有论文URL的txt文件下载论文:

scihub-cn -i urls.txt --url

可以看到,文件内有4个论文链接,而他也成功地下载到了这4篇论文。

再试试放了DOI号的txt文件的批量下载:

scihub-cn -i dois.txt --doi

你可以输入 scihub-cn –help 看到更多的参数说明:

$scihub-cn --help
... ...
optional arguments:
  -h, --help            show this help message and exit
  -u URL                input the download url
  -d DOI                input the download doi
  --input INPUTFILE, -i INPUTFILE
                        input download file
  -w WORDS, --words WORDS
                        download from some key words,keywords are linked by
                        _,like machine_learning.
  --title               download from paper titles file
  -p PROXY, --proxy PROXY
                        use proxy to download papers
  --output OUTPUT, -o OUTPUT
                        setting output path
  --doi                 download paper from dois file
  --bib                 download papers from bibtex file
  --url                 download paper from url file
  -e SEARCH_ENGINE, --engine SEARCH_ENGINE
                        set the search engine
  -l LIMIT, --limit LIMIT
                        limit the number of search result

大家如果有更多的想法,可以往我们这个开源项目贡献代码:

https://github.com/Ckend/scihub-cn

本文仅限参考研究,下载的论文请在24小时内阅读后删除,请勿将此项目用于商业目的。

我们的文章到此就结束啦,如果你喜欢今天的 Python 教程,请持续关注Python实用宝典。

有任何问题,可以在公众号后台回复:加群,回答相应验证信息,进入互助群询问。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!

给作者打赏,选择打赏金额
¥1¥5¥10¥20¥50¥100¥200 自定义

​Python实用宝典 ( pythondict.com )
不只是一个宝典
欢迎关注公众号:Python实用宝典

教你用 Pytdx 获取股票的历史分时成交数据

Pytdx是一个基于C++接口开发的Python第三方模块。

使用它我们能够很方便地获取通达信上的标准行情数据、历史行情数据、专业的财务数据,并且支持macOS系统,非常方便。

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。

(可选1) 如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda,它内置了Python和pip.

(可选2) 此外,推荐大家用VSCode编辑器来编写小型Python项目:Python 编程的最好搭档—VSCode 详细指南

Windows环境下打开Cmd(开始—运行—CMD),苹果系统环境下请打开Terminal(command+空格输入Terminal),输入命令安装依赖:

pip install pytdx

2.Pytdx 查询分时成交

为了能够查询数据,我们第一步需要创建API,连接通达信服务:

from pytdx.exhq import *
from pytdx.hq import *
api_hq = TdxHq_API()
api_hq = api_hq.connect('119.147.212.81', 7709)

第二步,使用这个API查询历史分时数据:

from pytdx.exhq import *
from pytdx.hq import *
api_hq = TdxHq_API()
api_hq = api_hq.connect('119.147.212.81', 7709)
print(api_hq.get_history_transaction_data(TDXParams.MARKET_SZ, "002560", 0, 500, 20220916))

效果如下:

[OrderedDict([('time', '14:29'),
              ('price', 7.91),
              ('vol', 582),
              ('buyorsell', 1)]),
 ... ...
]

请注意,查询的日期必须填写整数,不然会查询不到数据。

3.查询完整历史分时数据

在前面的示例中,我们查询了 002560 这个股票在 2022-09-16 的最后500条数据。

如果我们想要查询当天的全部数据,需要不断改变start和limit,即api_hq.get_history_transaction_data的第三个参数和第四个参数。

代码如下:

# 公众号: 二七阿尔量化
# 2022-09-17

from pytdx.exhq import *
from pytdx.hq import *
api_hq = TdxHq_API()
api_hq = api_hq.connect('119.147.212.81', 7709)

def get_all_trans_data(api, code, date):
    start = 0
    data = []
    while True:
        part = api.get_history_transaction_data(TDXParams.MARKET_SZ, code, start, 888, int(date))
        data.extend(part)
        if len(part) < 888:
            break
        start += 888
    return data
data = get_all_trans_data(api_hq, "002560", 20220916)
print(len(data))
# 3776

data 的格式如下:

数组里的顺序是乱的,因为我们请求数据的时候并不是按时间序列去请求的,因此还可以做数据规整化处理:

# 公众号: 二七阿尔量化
# 2022-09-17

from pytdx.exhq import *
from pytdx.hq import *
from collections import defaultdict
api_hq = TdxHq_API()
api_hq = api_hq.connect('119.147.212.81', 7709)

def get_all_trans_data(api, code, date):
    start = 0
    data = []
    while True:
        part = api.get_history_transaction_data(TDXParams.MARKET_SZ, code, start, 888, int(date))
        data.extend(part)
        if len(part) < 888:
            break
        start += 888
    return data
date = 20220916
data = get_all_trans_data(api_hq, "002560", date)
print(len(data))
# 3776
trans = defaultdict(list)
for tran in data:
    # "%Y%m%d %H:%M"
    trans[datetime.datetime.strptime(str(date) + " " + tran["time"], "%Y%m%d %H:%M")].append({
        "price": tran["price"],
        "volume": tran["vol"],
        "turnover": float(tran["price"]) * float(tran["vol"]) * 100,
    })
trans = dict(sorted(trans.items(), key=lambda x: x[0]))

这样,trans的数据就是格式化好的:

4.其他查询方法

除了历史分时数据,pytdx还可以查询:

股票行情数据:

api.get_security_quotes([(0, '000001'), (1, '600300')])
# 参数格式:[(市场代码, 股票代码), ...]

K线数据:

api.get_security_bars(9,0, '000001', 4, 3)

参数如下:

读取公司信息详情:

api.get_company_info_content(0, '000001', '000001.txt', 0, 100)
# 参数:市场代码, 股票代码, 文件名, 起始位置, 数量

读取财务信息:

api.get_finance_info(0, '000001')
# 参数:市场代码, 股票代码

还有其他更多的功能,大家可以阅读Pytdx的说明文档:

https://rainx.gitbooks.io/pytdx

我们的文章到此就结束啦,如果你喜欢今天的 Python 教程,请持续关注Python实用宝典。

有任何问题,可以在公众号后台回复:加群,回答相应验证信息,进入互助群询问。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!

给作者打赏,选择打赏金额
¥1¥5¥10¥20¥50¥100¥200 自定义

​Python实用宝典 ( pythondict.com )
不只是一个宝典
欢迎关注公众号:Python实用宝典

Efinance 用 Python 爬取A股龙虎榜历史数据

龙虎榜是A股的特色数据。它指每日两市中涨跌幅、换手率等由大到小的排名榜单,并从中可以看到龙虎榜单中的股票在哪个证券营业部的成交量较大。

该数据有助于了解当日异动个股的资金进出情况,判断是游资所为还是机构所为,抑或是拉萨集团散户大军。

上榜条件:

1、日价格涨幅偏离值±7%

2、日换手率达到20%

3、日价格振幅达到15%

4、连续三个交易日内,涨幅偏离值累计达到20%

每个条件都选前3名的上榜,深市是分主板、中小板、创业板分别取前3的。

龙虎榜数据是量化投资可依靠的数据源之一。

最简单的玩法是我们以股票上榜日的下一个交易日开盘价,作为买入价,下下个交易日的收盘价,作为卖出价。根据这两个数据,更新上榜日净买入该股的主力席位成功率。此后,系统自动选择有高成功率主力席位介入的股票进行自动化操作。

当然,还有其他玩法,需要我们自行发掘。本文只做抛砖引玉的作用,教你通过 Efinance 获取历史股票龙虎榜数据。

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。

(可选1) 如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda,它内置了Python和pip.

(可选2) 此外,推荐大家用VSCode编辑器来编写小型Python项目:Python 编程的最好搭档—VSCode 详细指南

Windows环境下打开Cmd(开始—运行—CMD),苹果系统环境下请打开Terminal(command+空格输入Terminal),输入命令安装依赖:

pip install efinance --upgrade

2.Efinance 龙虎榜数据获取

获取最新的龙虎榜数据:

import efinance as ef
# 获取最新一个公开的龙虎榜数据(后面还有获取指定日期区间的示例代码)
dt_list = ef.stock.get_daily_billboard()
print(dt_list)
#       股票代码   股票名称        上榜日期  ...   成交额占总成交比          流通市值                                      上榜原因
# 
# 0   000593   德龙汇能  2022-09-01  ...  24.489978  3.132908e+09                  连续三个交易日内,跌幅偏离值累计达到20%的证券
# 1   000593   德龙汇能  2022-09-01  ...  28.569036  3.132908e+09                          日跌幅偏离值达到7%的前5只证券        
# ... ...
# 54  900915   中路B股  2022-09-01  ...  77.071460  6.791650e+09             有价格涨跌幅限制的日收盘价格涨幅偏离值达到7%的前五只证券       

获取历史龙虎榜数据:

import efinance as ef
# 获取指定日期区间的龙虎榜数据
start_date = '2021-08-20' # 开始日期
end_date = '2022-09-01' # 结束日期
dt_list = ef.stock.get_daily_billboard(start_date = start_date,end_date = end_date)
print(dt_list)

效果如下,会返回一个包含指定区间内所有龙虎榜数据的Dataframe:

         股票代码  股票名称        上榜日期                解读  ...   净买额占总成交比    成交额占总成交比          流通市值
             上榜原因
0      000593  德龙汇能  2022-09-01    主力做T,成功率40.14%  ...  -3.272621   24.489978  3.132908e+09       连续三个交易日内,跌幅偏离值累计达到20%的证券
1      000593  德龙汇能  2022-09-01    主力做T,成功率41.00%  ...  -8.620473   28.569036  3.132908e+09               日跌幅偏离值达到7%的前5只证券
2      000595  宝塔实业  2022-09-01  1家机构买入,成功率38.60%  ...   0.463642   15.610660  9.411956e+09               日涨幅偏离值达到7%的前5只证券
3      000670   盈方微  2022-09-01  普通席位买入,成功率35.67%  ...   4.406599   17.829750  6.234850e+09               日涨幅偏离值达到7%的前5只证券
4      000716   黑芝麻  2022-09-01  1家机构买入,成功率44.05%  ...   1.390889   16.455920  3.778881e+09                日换手率达到20%的前5只证券
...       ...   ...         ...               ...  ...        ...         ...           ...                            ...
18213  605580  恒盛能源  2021-08-20    买一主买,成功率33.33%  ...  88.945937  111.054054  6.640000e+08  有价格涨跌幅限制的日收盘价格涨幅偏离值达到7%的前三只证券
18214  688029  南微医学  2021-08-20  4家机构卖出,成功率55.82%  ... -18.529760   67.958326  9.001510e+09    有价格涨跌幅限制的日收盘价格跌 幅达到15%的前五只证券
18215  688408   中信博  2021-08-20  4家机构卖出,成功率47.86%  ...  -5.122340   93.739221  5.695886e+09      有价格涨跌幅限制的日价格振幅达到30%的前五只证券
18216  688556  高测股份  2021-08-20  上海资金买入,成功率60.21%  ...  -6.847351   63.922831  6.150250e+09    有价格涨跌幅限制的日收盘价格涨幅达到15%的前五只证券
18217  688636   智明达  2021-08-20  2家机构买入,成功率47.37%  ...  15.517464   54.552336  1.647410e+09    有价格涨跌幅限制的日收盘价格涨幅达到15%的前五只证券

[18218 rows x 16 columns]

3.其他数据

除了龙虎榜数据外,efinance 中比较有价值的数据是大小单数据。

股票最新一个交易日单子流入数据(分钟级):

import efinance as ef
print(ef.stock.get_today_bill('300750'))

#      股票名称    股票代码                时间        主力净流入      小单净流入        中单净流入        大单净流入      超大单净流入
# 0    宁德时代  300750  2022-09-01 09:31  -16227310.0   -13332.0   16240643.0  -32348972.0  16121662.0
# 1    宁德时代  300750  2022-09-01 09:32  -18437363.0   -13332.0   18450696.0  -46147932.0  27710569.0
# 2    宁德时代  300750  2022-09-01 09:33  -10363719.0   -13332.0   10377052.0  -39606699.0  29242980.0
# 3    宁德时代  300750  2022-09-01 09:34  -21867692.0   -13332.0   21881025.0  -46285941.0  24418249.0
# 4    宁德时代  300750  2022-09-01 09:35  -33428620.0   -13332.0   33441954.0  -49130994.0  15702374.0
# ..    ...     ...               ...          ...        ...          ...          ...         ...
# 235  宁德时代  300750  2022-09-01 14:56 -499053140.0 -1849704.0  500902854.0 -421625414.0 -77427726.0
# 236  宁德时代  300750  2022-09-01 14:57 -506019055.0 -1849704.0  507868768.0 -415876177.0 -90142878.0
# 237  宁德时代  300750  2022-09-01 14:58 -506439955.0 -1849704.0  508289668.0 -416297077.0 -90142878.0
# 238  宁德时代  300750  2022-09-01 14:59 -506439955.0 -1849704.0  508289668.0 -416297077.0 -90142878.0
# 239  宁德时代  300750  2022-09-01 15:00 -506439955.0 -1849704.0  508289668.0 -416297077.0 -90142878.0
# 
# [240 rows x 8 columns]

股票历史单子流入数据(日级):

import efinance as ef
print(ef.stock.get_history_bill('300750'))

还有基金公开持仓信息:

import efinance as ef
# 获取最新公开的持仓数据
print(ef.fund.get_invest_position('161725'))
# 基金代码    股票代码  股票简称   持仓占比  较上期变化        公开日期
# 0  161725  600809  山西汾酒  14.50  -0.70  2022-06-30
# 1  161725  000858   五粮液  14.33   1.50  2022-06-30
# 2  161725  000568  泸州老窖  14.14  -0.43  2022-06-30
# 3  161725  600519  贵州茅台  14.08  -2.70  2022-06-30
# 4  161725  002304  洋河股份  11.53  -0.05  2022-06-30
# 5  161725  000596  古井贡酒   4.27   1.00  2022-06-30
# 6  161725  000799   酒鬼酒   3.85   0.45  2022-06-30
# 7  161725  603369   今世缘   3.48  -0.27  2022-06-30
# 8  161725  600779   水井坊   2.18  -0.41  2022-06-30
# 9  161725  603589   口子窖   2.15  -0.15  2022-06-30

还有很多基本的K线和历史数据,基本上和之前介绍的akshare差不多,这里就不重复介绍了。

有兴趣使用的同学可以参考他们的官方Github文档,中文,可读性很强。

https://github.com/Micro-sheep/efinance

龙虎榜的数据其实非常有意思,可以捕捉到游资和机构的动作,下次有时间给大家介绍一个策略。

我们的文章到此就结束啦,如果你喜欢今天的 Python 教程,请持续关注Python实用宝典。

有任何问题,可以在公众号后台回复:加群,回答相应验证信息,进入互助群询问。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!

给作者打赏,选择打赏金额
¥1¥5¥10¥20¥50¥100¥200 自定义

​Python实用宝典 ( pythondict.com )
不只是一个宝典
欢迎关注公众号:Python实用宝典