Code前端首页关于Code前端联系我们

Python量化交易高级讲座:爬虫检索东方财富在线股吧文章

terry 2年前 (2023-09-25) 阅读数 51 #后端开发

量化交易策略研究主要涵盖微观和宏观两个方面。微观面更多的是基于市场价格、交易所持仓等基本面信息。研究的目的是利用算法计算技术指标,然后根据技术指标的变化构建交易模型。宏观方面,交易模型是基于更多的市场信息而开发的,比如根据CPI、PPI、现金流等宏观经济指标构建交易模型;研究;或者利用数据挖掘技术发现可能引起市场波动的新事物。具体活动提供了销售机会。

我们知道著名的股票论坛有鼎泰投资之家、趣天下、东方财富网上股吧、和讯股吧、创环论坛、MACD股市等。笔者经常使用东方财富网上股票吧。 。在小册子中,我们以当天爬取东方财富网络行业市场数据的案例来介绍网络爬虫的原理和方法。本节我们将介绍如何抓取东方财富互联网数据库的内容。

文本栏网址排查

首先使用浏览器访问微星新材料首页,查看网页网址:http://guba.eastmoney.com/list,002372。 html,网页内容如下: Python量化交易进阶讲堂:爬虫抓取东方财富网股吧帖子

当您点击第2页和第3页时,看到可用的URL:http://guba.eastmoney.com/list,002372_2。 htmlhttp://guba.eastmoney.com/list,002372_3.html,所以http://guba.eastmoney。 , 002372_ 显示为 %d.html。规则非常简单。 %d是论坛页面,但这种格式是评论时配置的URL。如果发帖时配置了URL,则为http://guba.eastmoney.com/list,002372,f_%d.html

库存栏中的文章有两个部分。一部分是《财经评论》或《东方财富网》发布的官方公告或新闻,另一部分是散户发布的讨论文本,如下图: Python量化交易进阶讲堂:爬虫抓取东方财富网股吧帖子

上一篇文章网址是 http ://guba.eastmoney.com/news,cjpl,902659513.html,最后发帖网址是http://guba.eastmoney.com/ news,002372,902629178 .html❀,这两个可以在数据库中当前HTML文件内容中进行URL搜索,如下图: Python量化交易进阶讲堂:爬虫抓取东方财富网股吧帖子

因此,《金融评论》、《东方财富网》或者散户发表的文章,最著名的是/news。在实现上,我们可以先抓取股票栏的HTML内容,然后使用自定义评论来过滤文章的URL。

在小册子《爬虫方式获取行业板块数据》部分详细包含了用于读取网页 HTML 内容的基本代码。注意Python2的urllib、urllib2和urlparse已经合并到Python3的urllib中。 Python2的urllib和urllib2内容包含在urllib.request模块中,urlparse包含在urllib.parse模块中。部分生成的HTML代码如下: Python量化交易进阶讲堂:爬虫抓取东方财富网股吧帖子

正则表达式过滤post URL,使用re.compile和re.findall,实现代码如下,

pattern = re.compile('/news\S+html',re.S)
news_comment_urls = re.findall(pattern, html_cont.decode('utf-8')) # 非空白字符N次

"""
['/news,cjpl,902659513.html', '/news,cjpl,902684967.html', 
'/news,cjpl,902602349.html', '/news,cjpl,902529812.html', 
'/news,cjpl,857016161.html', '/news,002372,902629178.html', 
'/news,002372,902557935.html', '/news,002372,902533930.html', 
'/news,002372,902519348.html', '/news,002372,902468635.html', 
'/news,002372,902466626.html', '/news,002372,902464127.html', 
 ......
'/news,002372,901168702.html', '/news,002372,901153848.html']
"""
复制代码

'常用词中的\S+表示匹配许多非白色的字段。字符,然后使用 findall 函数查找所有匹配的字符串并将它们作为列表返回。

然后使用 urljoin 方法将整个 URL 组合成单个帖子标题。基本代码如下:

for comment_url in news_comment_urls :
     whole_url = parse.urljoin(page_url, comment_url)
     post_urls.add(whole_url)
return post_urls
复制代码

创建URL爬虫序列

接下来我们把所有需要添加的股票栏页面放在一个序列中,并按序列管理每个页面帖子的URL。 Python 存储的数组类型包括列表、元组、字典和集合。它们的区别和特点很简单:元组不能改变其元素; set是无序集合,会自动去除重复元素;列表已排序。收藏;字典是键和值的集合。这次我们选择list作为存储序列的类型。

创建target_url_manager类,该类包含以下方法:

  • add_page_urls:读取数据库栏中单个页面的HTML代码,并获取该页面的文本URL
  • add_pages_ueurls 以及:设置post URL以二维列表格式显示所有页面
  • has_page_url:查看序列是否为空
  • get_new_url:每次从帖子 URL 中删除一个页面

创建如下,这是序列: The完整的代码可以在《加推篇!爬虫抓取东方财富网股吧帖子》手册中找到。 ?设计时需要考虑HTML代码中是否存在重复匹配的关键字。文章作者和标题的标准代码如下。关键词mainbody和zwcontentmain在文本中仅出现一次,匹配度较高。由于网站HTML代码的变化,需要经常调整语言。

关键代码如下:

com_cont = re.compile(r'<div id="mainbody">.*?zwconttbn.*?<a.*?<font>(.*?)</font>.*?<div.*?class="zwcontentmain.*?">.*?"zwconttbt">(.*?)</div>.*?social clearfix',re.DOTALL)
复制代码

发布时的合法代码如下。分两步缓慢而清晰地去除。由于search是搜索字符串来找到这个RE的匹配位置,所以添加group()来返回匹配的字符串。 。

pub_elems = re.search('<div class="zwfbtime">.*?</div>',html_cont2).group()
#<div class="zwfbtime">发表于 2020-02-11 09:54:48 东方财富Android版</div>
pub_time = re.search('\d\d\d\d-\d\d-\d\d',pub_elems).group()
#2020-02-06
复制代码

此外,论坛帖子与当前价格趋势相关。早期的帖子目前无效,所以最近的帖子需要删除。我们可以判断时间,只有一个月内发表的文章才会被分类保存。使用 datetime.now().date() 获取今天的日期,并将其与爬网文本的时间和日期进行比较。 Timedelta 可以根据日期计算天数,但时间需要转换为小时格式。

应用的部分重要代码如下:

time_start=datetime.now().date() # 获取日期信息
dt = datetime.strptime(pub_time,"%Y-%m-%d") # 字符串转时间格式
datetime.date(dt)+timedelta(days=30)
复制代码

爬取完一篇文章的内容后,我们使用递归的方法来爬取所有的文章。我们采用两级处理方法,第一级是页面数,第二级是页面上文本栏的数量,存储列表中每篇文章的URL,抓取文本内容。每个都通过迭代。

实现的一些基本代码如下:

while self.target_page.has_page_url():
     new_urls = self.target_page.get_new_url() # 获取每个帖子的URL地址队列
     for url in new_urls:
		……
复制代码

当我们看到爬取时没有文字,而飞信息时出现异常,尝试... except... 可以用于例外。处理。 Python量化交易进阶讲堂:爬虫抓取东方财富网股吧帖子

最后抓取的文本内容如下所示: Python量化交易进阶讲堂:爬虫抓取东方财富网股吧帖子

完整代码可以在《加推篇!爬虫抓取东方财富网股吧帖子》小册子中找到。

文本内容保存为txt

我们可以将抓取信息写入txt文件中。打开方法中代码的实现如下。 a+是在文本末尾添加写入而不是覆盖它,codecs.open这个方法可以指定打开文件的编码,如果使用Python内置的open打开文件,只能写入str类型。

f=codecs.open(name,'a+','utf-8')
复制代码

这里我们创建output_txt类,该类将分别实现文件打开、文件写入和文件关闭方法。代码如下:

class output_txt(object):

    def open_txt(self):
        name = "stock_cont.txt"
        try:
            f = codecs.open(name, 'a+', 'utf-8')
        except Exception as e:
            print("NO TXT")
        return f

    def out_txt(self, f_handle, conts):
        try:
            print("cont",conts)
            f_handle.write(conts)
        except Exception as e:
            print("NO FILE")

    def close_txt(self, f_handle):
        f_handle.close()
复制代码

然后就可以抓取文本内容,并将内容写入txt文件中。应用的主要代码如下:

file_txt = self.outputer.open_txt()
while self.target_page.has_page_url():
     new_urls = self.target_page.get_new_url() # 获取每个帖子的URL地址队列
     for url in new_urls:
        if time_start <= (self.downloader.find_time(url)+timedelta(days=30)):
           self.outputer.out_txt(file_txt, self.downloader.download(url))
           true_time = true_time + 1
        else:
           error_time = error_time + 1
self.outputer.close_txt(file_txt)
复制代码

写入txt文件的结果如下: Python量化交易进阶讲堂:爬虫抓取东方财富网股吧帖子

总结

这一部分,我们通过爬虫获取We stock bar文章的各种内容,所以这个内容很有用。对我们来说有什么意义?我们看到总有一些人唱短歌,制造混乱。不过,我们可以通过分类来检验这些空头反应与股价上涨之间是否存在联系。有专门写的ID来唱短歌吗?有兴趣的朋友可以尝试一下!

作者:元宵大师
链接:https://juejin.im/post/5e4618b7e51d4526f55ef964
来源:掘金
商业印刷请联系作者授权。非商业转载请注明来源。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门