本人股市多年的老韭菜了,各种股票分析书籍,技术指标书籍阅历无数,萌发想法,何不自己开发个股票预测分析软件,选择python因为够强大,它提供了很多高效便捷的数据分析工具包,
我们已经初步的接触与学习其中数据分析中常见的3大利器---Numpy,Pandas,Matplotlib库。
数据是万物之源,我们做股票分析,首要条件是获取最新的,最全面的金融数据,我们才能进行下一步开发。
我们获取数据主要有二大渠道,爬虫爬取金融网站数据和金融网站主动提供API接口方式获得,上一章简单介绍一下金融数据接口的使用方法,这章重点讲讲爬虫抓取数据技巧和方法
爬虫抓取数据方法:
从金融接口获取数据方法简单,但是属于被动的,特别是免费用户受到的限制很大,所以我们学习一下爬虫主动获取金融网站数据,
爬虫技术是这几年特别热门的技术,想要学精学好,需要相当的时间和精力,我们这里先了解个大概。
爬虫解析数据有很多种,爬取不同的数据,返回的数据类型不一样,有html 、json 、xml 、文本 (字符串 )等多种格式!简单的介绍几种
(1)网络爬虫常见用法
(1)Xpath获取
XPath,全称XML Path Language,即XML 路径语⾔,它是⼀⻔在XML ⽂档中查找信息的语⾔。最初是⽤来搜寻XML ⽂档的,但同样适⽤于HTML ⽂档的搜索。所以在做爬⾍时完全可以使⽤XPath做相应的信息抽取。
安装:pip install lxml
获取请求:
python
url = 'https://pic.netbian.com/4kmeinv/index_5.html'
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
注意:headers里面的浏览器版本必须对应个人开发者电脑版本,要不可能爬取错误
完整代码:
python
import requests
from lxml import etree
import os
url = 'https://pic.netbian.com/4kmeinv/index_5.html'
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
# 不这样搞会乱码
response = requests.get(url=url, headers=headers)
# 手动设定响应数据的编码格式
# 普通的乱码可以这样搞,但这个不行,考虑换另一种方式
# response.encoding = 'utf-8'
page_text = response.text
# 数据解析:src的属性值 alt属性
tree = etree.HTML(page_text)
li_list = tree.xpath('//div[@class="slist"]/ul/li')
# 创建一个文件夹
if not os.path.exists('./picLibs'):
os.mkdir('./picLibs')
for li in li_list:
img_src = 'http://pic.netbian.com' + li.xpath('./a/img/@src')[0]
img_name = li.xpath('./a/img/@alt')[0] + '.jpg'
# 通用处理中文乱码的解决方案
img_name = img_name.encode('iso-8859-1').decode('gbk')
# print(img_name,img_src)
# 请求图片进行持久化存储
img_data = requests.get(url=img_src, headers=headers).content
img_path = 'picLibs/' + img_name
with open(img_path, 'wb') as fp:
fp.write(img_data)
print(img_name, '下载成功!!!')
fp.close()
运行结果:
刘诗诗 唯美高清美女4k壁纸.jpg 下载成功!!!
刘诗诗 一手托腮 4k高清美女壁纸.jpg 下载成功!!!
刘诗诗 晚上 高颜值美女4k壁纸.jpg 下载成功!!!
刘诗诗 超高清美女4k壁纸.jpg 下载成功!!!
高颜值气质美女 侧脸 刘诗诗4k壁纸.jpg 下载成功!!!
已经成功下载到本地,爬取成功
(2) requests方法
安装requests库
只需要在终端中输入pip install requests。为了确保requests库已经成功安装
代码案例
这个例子requests.get()从金融网站爬取金融数据保存到本地
python
import re,requests
import pandas as pd
url = "http://94.push2.eastmoney.com/api/qt/clist/get?cb=jQuery1124040399874179311124_1685159655748&pn=1&pz=6000&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&wbp2u=|0|0|0|web&fid=f3&fs=m:0+t:6,m:0+t:80,m:1+t:2,m:1+t:23,m:0+t:81+s:2048&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152&_=1685159655749"
print("\n1:正在爬取数据...")
data = requests.get(url).text
p = re.compile(r'(\"f\d*\":.+?)[,}]')
result = p.findall(data)
print("\n2:数据爬取成功!!!")
stock = {'代码':[],'名称':[],'最新价':[],'涨跌幅%':[],'涨跌额':[],'成交量(手)':[],'成交额':[],'振幅%':[],'最高':[],'最低':[],'今开':[],'昨收':[],'量比':[],'换手率%':[],'市盈率':[],'市净率':[]}
print("\n3:数据正在导出...")
#print(result)
for i in range(1,len(result),31):
stock['代码'].append(result[i+10][6:])
stock['名称'].append(result[i+12][6:])
stock['最新价'].append(result[i][5:])
stock['涨跌幅%'].append(result[i+1][5:])
stock['涨跌额'].append(result[i+2][5:])
stock['成交量(手)'].append(result[i+3][5:])
stock['成交额'].append(result[i+4][5:])
stock['振幅%'].append(result[i+5][5:])
stock['最高'].append(result[i+13][6:])
stock['最低'].append(result[i+14][6:])
stock['今开'].append(result[i+15][6:])
stock['昨收'].append(result[i+16][6:])
stock['量比'].append(result[i+8][6:])
stock['换手率%'].append(result[i+6][5:])
stock['市盈率'].append(result[i+7][5:])
stock['市净率'].append(result[i+20][6:])
df = pd.DataFrame(stock)
df.to_csv(f'示例.csv', encoding='utf-8-sig', index=None)
print("\n4:数据导出成功!!!")
input()
(3)BeautifulSoup
Python的一个HTML或XML的第三方解析库,可以用它方便地从网页中提取数据。它提供一些简单的、Python式的函数来处理导航、搜索、修改分析树等功能。它是一个工具箱,利用它可以省去很多烦琐的提取工作,提高了解析效率。
安装BeautifulSoup库和lxml库:
pip install BeautifulSoup4 和pip install lxml
下面这个案例用BeautifulSoup爬取数据
文件头请求headers
python
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
content = requests.get(url, headers=headers)
return content
注意:headers里面的浏览器版本必须对应个人开发者电脑版本,要不可能爬取错误
详细代码:
python
import requests
from bs4 import BeautifulSoup
import os
# 导入所需要的模块
class mzitu():
def all_url(self, url):
html = self.request(url) ##
all_a = BeautifulSoup(html.text, 'lxml').find('div', class_='all').find_all('a')
for a in all_a:
title = a.get_text()
print('------开始保存:', title)
path = str(title).replace("?", '_') ##替换掉带有的?
self.mkdir(path) ##调用mkdir函数创建文件夹!这儿path代表的是标题title
href = a['href']
self.html(href)
def html(self, href): ##获得图片的页面地址
html = self.request(href)
max_span = BeautifulSoup(html.text, 'lxml').find('div', class_='pagenavi').find_all('span')[-2].get_text()
# 这个上面有提到
for page in range(1, int(max_span) + 1):
page_url = href + '/' + str(page)
self.img(page_url) ##调用img函数
def img(self, page_url): ##处理图片页面地址获得图片的实际地址
img_html = self.request(page_url)
img_url = BeautifulSoup(img_html.text, 'lxml').find('div', class_='main-image').find('img')['src']
self.save(img_url)
def save(self, img_url): ##保存图片
name = img_url[-9:-4]
img = self.request(img_url)
f = open(name + '.jpg', 'ab')
f.write(img.content)
f.close()
def mkdir(self, path): ##创建文件夹
path = path.strip()
isExists = os.path.exists(os.path.join("mzitu2", path))
if not isExists:
print('建了一个名字叫做', path, '的文件夹!')
os.makedirs(os.path.join("mzitu2", path))
os.chdir(os.path.join("mzitu2", path)) ##切换到目录
return True
else:
print(path, '文件夹已经存在了!')
return False
def request(self, url): ##这个函数获取网页的response 然后返回
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
content = requests.get(url, headers=headers)
return content
# 设置启动函数
def main():
Mzitu = mzitu() ##实例化
Mzitu.all_url('http://www.mzitu.com/all') ##给函数all_url传入参数
main()
爬取方法还有多种,不一一例举
(2)网络爬虫常用框架
爬虫框架可以理解为一些爬虫项目的半成品,已经将爬虫功能主要功能写好,留下一些api接口来让开发者调用
1. Scrapy
scrapy官网:https://scrapy.org/
scrapy中文文档:https://www.osgeo.cn/scrapy/intro/o
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。
其最初是为了 页面抓取(更确切来说, 网络抓取)所设计的, 也可以应用在获取API所返回的数据(例如Amazon Associates Web Services ) 或者通用的网络爬虫。
Scrapy框架是一套比较成熟的Python爬虫框架,可以高效的爬取web页面并提取出结构化数据,用这个框架可以轻松爬下来如亚马逊商品信息之类的数据。
2. PySpider
PySpider 中文网:http://www.pyspider.cn
PySpider 官网:http://docs.pyspider.org
PySpider 演示:http://demo.pyspider.org
PySpider 源码:https://github.com/binux/pyspider
PySpider是一个国人编写的强大的网络爬虫系统并带有强大的WebUI,其用python实现的功能强大的网络爬虫系统,能在浏览器界面上进行脚本的编写,功能的调度和爬取结果的实时查看,后端使用常用的数据库进行爬取结果的存储,还能定时设置任务与任务优先级等。
pyspider 是一个用python实现的功能强大的网络爬虫系统,能在浏览器界面上进行脚本的编写,功能的调度和爬取结果的实时查看,后端使用常用的数据库进行爬取结果的存储,还能定时设置任务与任务优先级等。
3. Portia
官网:https://portia.scrapinghub.com/
Portia是一个开源可视化爬虫工具,可让您在不需要任何编程知识的情况下爬取网站!简单地注释您感兴趣的页面,Portia将创建一个蜘蛛来从类似的页面提取数据。其主要特征是:
Portia是一款不需要任何编程知识就能爬取网页的爬虫框架,只要将相关信息填好之后,就可以爬取网站了。
基于scrapy 内核
可视化爬取内容,不需要任何开发专业知识
动态匹配相同模板的内容
4 Newspaper
官方文档:Quickstart - newspaper 0.0.2 documentation
github地址:https://github.com/codelucas/newspaper
Newspaper可以用来提取新闻、文章和内容分析。使用多线程,支持10多种语言等。作者从requests库的简洁与强大得到灵感,使用python开发的可用于提取文章内容的程序。支持10多种语言并且所有的都是unicode编码。
Newspaper框架是一个用来提取新闻、文章以及内容分析的Python爬虫框架。
5. Beautiful Soup
官方文档:Beautiful Soup 4.4.0 文档
Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时甚至数天的工作时间。这个我是使用的特别频繁的。在获取html元素,都是bs4完成的。
Beautiful Soup整合了一些常用的爬虫需求,可以从HTML或XML文件中提取数据的Python库。它能够通过你喜欢的转换器实现惯用的文档导航、查找、修改文档的方式,会帮你节省数小时甚至数天的工作时间。
6. Grab
官网:https://grablib.org/en/latest/
Grab是一个用于构建Web刮板的Python框架。借助Grab,您可以构建各种复杂的网页抓取工具,从简单的5行脚本到处理数百万个网页的复杂异步网站抓取工具。Grab提供一个API用于执行网络请求和处理接收到的内容,例如与HTML文档的DOM树进行交互。
Grab可以构建各种复杂的网页抓取工具,从简单的5行脚本到处理数百万个网页的复杂异步网站抓取工具。
还有多种爬虫抓取方法和爬虫工具我就不一一介绍了,大家选择合适自己的学习开发就行,爬虫技术是目前热门,但是要学好,需要漫长的时间和精力,整理和编写了几种不同的爬虫技术从网上爬取数据的代码,欢迎大家下载!!
谢谢大家,相互交流学习!!1