本人股市多年的老韭菜了,各种股票分析书籍,技术指标书籍阅历无数,萌发想法,何不自己开发个股票预测分析软件,选择python因为够强大,它提供了很多高效便捷的数据分析工具包,
我们已经初步的接触与学习其中数据分析中常见的3大利器---Numpy,Pandas,Matplotlib库。
数据是万物之源,我们做股票分析,首要条件是获取最新的,最全面的金融数据,我们才能进行下一步开发。
我们获取数据主要有二大渠道,爬虫爬取金融网站数据和金融网站主动提供API接口方式获得,上一章简单介绍一下金融数据接口的使用方法,这章重点讲讲爬虫抓取数据技巧和方法
爬虫抓取数据方法:
从金融接口获取数据方法简单,但是属于被动的,特别是免费用户受到的限制很大,所以我们学习一下爬虫主动获取金融网站数据,
?爬虫技术是这几年特别热门的技术,想要学精学好,需要相当的时间和精力,我们这里先了解个大概。
爬虫解析数据有很多种,爬取不同的数据,返回的数据类型不一样,有html、json、xml、文本(字符串)等多种格式!简单的介绍几种
XPath,全称XML Path Language,即XML?路径语?,它是??在XML??档中查找信息的语?。最初是?来搜寻XML??档的,但同样适?于HTML??档的搜索。所以在做爬?时完全可以使?XPath做相应的信息抽取。
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里面的浏览器版本必须对应个人开发者电脑版本,要不可能爬取错误
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 下载成功!!!
已经成功下载到本地,爬取成功?
只需要在终端中输入pip install requests。为了确保requests库已经成功安装
这个例子requests.get()从金融网站爬取金融数据保存到本地
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()
Python的一个HTML或XML的第三方解析库,可以用它方便地从网页中提取数据。它提供一些简单的、Python式的函数来处理导航、搜索、修改分析树等功能。它是一个工具箱,利用它可以省去很多烦琐的提取工作,提高了解析效率。
pip install BeautifulSoup4?和pip install lxml
下面这个案例用BeautifulSoup爬取数据
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里面的浏览器版本必须对应个人开发者电脑版本,要不可能爬取错误
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()
爬取方法还有多种,不一一例举
爬虫框架可以理解为一些爬虫项目的半成品,已经将爬虫功能主要功能写好,留下一些api接口来让开发者调用
scrapy官网:https://scrapy.org/
scrapy中文文档:https://www.osgeo.cn/scrapy/intro/o
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。
其最初是为了 页面抓取(更确切来说,?网络抓取)所设计的, 也可以应用在获取API所返回的数据(例如Amazon Associates Web Services )?或者通用的网络爬虫。
Scrapy框架是一套比较成熟的Python爬虫框架,可以高效的爬取web页面并提取出结构化数据,用这个框架可以轻松爬下来如亚马逊商品信息之类的数据。
?
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实现的功能强大的网络爬虫系统,能在浏览器界面上进行脚本的编写,功能的调度和爬取结果的实时查看,后端使用常用的数据库进行爬取结果的存储,还能定时设置任务与任务优先级等。
?
官网:https://portia.scrapinghub.com/
Portia是一个开源可视化爬虫工具,可让您在不需要任何编程知识的情况下爬取网站!简单地注释您感兴趣的页面,Portia将创建一个蜘蛛来从类似的页面提取数据。其主要特征是:
Portia是一款不需要任何编程知识就能爬取网页的爬虫框架,只要将相关信息填好之后,就可以爬取网站了。
基于scrapy?内核
可视化爬取内容,不需要任何开发专业知识
动态匹配相同模板的内容
?
官方文档:Quickstart - newspaper 0.0.2 documentation
github地址:https://github.com/codelucas/newspaper
Newspaper可以用来提取新闻、文章和内容分析。使用多线程,支持10多种语言等。作者从requests库的简洁与强大得到灵感,使用python开发的可用于提取文章内容的程序。支持10多种语言并且所有的都是unicode编码。
Newspaper框架是一个用来提取新闻、文章以及内容分析的Python爬虫框架。
?
官方文档:Beautiful Soup 4.4.0?文档
Beautiful Soup?是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时甚至数天的工作时间。这个我是使用的特别频繁的。在获取html元素,都是bs4完成的。
Beautiful Soup整合了一些常用的爬虫需求,可以从HTML或XML文件中提取数据的Python库。它能够通过你喜欢的转换器实现惯用的文档导航、查找、修改文档的方式,会帮你节省数小时甚至数天的工作时间。
?
官网:https://grablib.org/en/latest/
Grab是一个用于构建Web刮板的Python框架。借助Grab,您可以构建各种复杂的网页抓取工具,从简单的5行脚本到处理数百万个网页的复杂异步网站抓取工具。Grab提供一个API用于执行网络请求和处理接收到的内容,例如与HTML文档的DOM树进行交互。
Grab可以构建各种复杂的网页抓取工具,从简单的5行脚本到处理数百万个网页的复杂异步网站抓取工具。
还有多种爬虫抓取方法和爬虫工具我就不一一介绍了,大家选择合适自己的学习开发就行,爬虫技术是目前热门,但是要学好,需要漫长的时间和精力,整理和编写了几种不同的爬虫技术从网上爬取数据的代码,欢迎大家下载!!?
?
谢谢大家,相互交流学习!!1?
?