python 爬股票数据

chenologin2分享 时间:

如何用python 爬虫抓取金融数据

本篇使用的版本为python3.5,意在抓取证券之星上当天所有A股数据。

程序主要分为三个部分:网页源码的获取、所需内容的提取、所得结果的整理。

一、网页源码的获取很多人喜欢用python爬虫的原因之一就是它容易上手。

只需以下几行代码既可抓取大部分网页的源码。

import urllib.requesturl=\'ar.com/stock/ranklist_a_3_1_1.html\' #目标网址headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64)"} #伪装浏览器请求报头request=urllib.request.Request(url=url,headers=headers) #请求服务器response=urllib.request.urlopen(request) #服务器应答content=response.read().decode(\'gbk\') #以一定的编码方式查看源码print(content) #打印页面源码 虽说抓一页的源码容易,不过在一个网站内大量抓取网页源码却经常遭到服务器拦截,顿时感觉世界充满了恶意。

于是我开始研习突破反爬虫限制的功法。

1.伪装流浪器报头很多服务器通过浏览器发给它的报头来确认是否是人类用户,所以我们可以通过模仿浏览器的行为构造请求报头给服务器发送请求。

服务器会识别其中的一些参数来识别你是否是人类用户,很多网站都会识别User-Agent这个参数,所以请求头最好带上。

有一些警觉性比较高的网站可能还会通过其他参数识别,比如通过Accept-Language来辨别你是否是人类用户,一些有防盗链功能的网站还得带上referer这个参数等等。

2.随机生成UA证券之星只需带User-Agent这个参数就可以抓取页面信息了,不过连续抓取几页就被服务器阻止了。

于是我决定每次抓取数据时模拟不同的浏览器发送请求,而服务器通过User-Agent来识别不同浏览器,所以每次爬取页面可以通过随机生成不同的UA构造报头去请求服务器,3.减慢爬取速度虽然模拟了不同浏览器爬取数据,但发现有的时间段可以爬取上百页的数据,有时候却只能爬取十来页,看来服务器还会根据你的访问的频率来识别你是人类用户还是网络爬虫。

所以我每抓取一页都让它随机休息几秒,加入此句代码后,每个时间段都能爬取大量股票数据了。

4.使用代理IP天有不测风云,程序在公司时顺利测试成功,回寝室后发现又只能抓取几页就被服务器阻止了。

惊慌失措的我赶紧询问度娘,获知服务器可以识别你的IP,并记录此IP访问的次数,可以使用高匿的代理IP,并在抓取的过程中不断的更换,让服务器无法找出谁是真凶。

此功还未修成,欲知后事如何,请听下回分解。

5.其他突破反爬虫限制的方法很多服务器在接受浏览器请求时会发送一个cookie文件给浏览器,然后通过cookie来跟踪你的访问过程,为了不让服务器识别出你是爬虫,建议最好带上cookie一起去爬取数据;如果遇上要模拟登陆的网站,为了不让自己的账号被拉黑,可以申请大量的账号,然后再爬入,此处涉及模拟登陆、验证码识别等知识,暂时不再深究...总之,对于网站主人来说,有些爬虫确实是令人讨厌的,所以会想出很多方法限制爬虫的进入,所以我们在强行进入之后也得注意些礼仪,别把人家的网站给拖垮了。

二、所需内容的提取获取网页源码后,我们就可以从中提取我们所需要的数据了。

从源码中获取所需信息的方法有很多,使用正则表达式就是比较经典的方法之一。

我们先来看所采集网页源码的部分内容。

为了减少干扰,我先用正则表达式从整个页面源码中匹配出以上的主体部分,然后从主体部分中匹配出每只股票的信息。

代码如下。

pattern=re.compile(\'\') body=re.findall(pattern,str(content)) #匹配之间的所有代码pattern=re.compile(\'>(.*?)和其中compile方法为编译匹配模式,findall方法用此匹配模式去匹配出所需信息,并以列表的方式返回。

正则表达式的语法还挺多的,下面我只罗列所用到符号的含义。

语法 说明 . 匹配任意除换行符“\\n”外的字符 * 匹配前一个字符0次或无限次 ? 匹配前一个字符0次或一次 \\s 空白字符:[\\t\\r\\n\\f\\v] \\S 非空白字符:[^\\s] [...] 字符集,对应的位置可以是字符集中任意字符 (...) 被括起来的表达式将作为分组,里面一般为我们所需提取的内容 正则表达式的语法挺多的,也许有大牛只要一句正则表达式就可提取我想提取的内容。

在提取股票主体部分代码时发现有人用xpath表达式提取显得更简洁一些,看来页面解析也有很长的一段路要走。

三、所得结果的整理通过非贪婪模式(.*?)匹配>和stock_last=stock_total[:] #stock_total:匹配出的股票数据for data in stock_total: #stock_last:整理后的股票数据if data==\'\':stock_last.remove(\'\')最后,我们可以打印几列数据看下效果,代码如下print(\'代码\',\'\\t\',\'简称\',\' \',\'\\t\',\'最新价\',\'\\t\',\'涨跌幅\',\'\\t\',\'涨跌额\',\'\\t\',\'5分钟涨幅\')for i in range(0,len(stock_last),13): #网页总共有13列数据print(stock_last[i],\'\\t\',stock_last[i+1],\' \',\'\\t\',stock_last[i+2],\' \',\'\\t\',stock_last[i+3],\' \',\'\\t\',stock_last[i+4],\' \',\'\\t\',stock_last[i+5])

python 爬虫,爬不到数据

去装一个 pymsql包然后import pymysql #导入pymsql模块 #链接数据库,注意port是int型,不是str,所以不要用引号conn = pymysql.connect( user=\'root\', password=\'root\', host=\'127.0.0.1\', port=3306, database=\'test_demo\', use_unicode=True, charset="utf8" )#获取游标cursor = conn.cursor()#插入数据,注意看有变量的时候格式cursor.execute("INSERT INTO tieba_user(`uuid`,`user_name`,`user_rank`,`user_level`,`level_status`,`tieba_name`) VALUES (%s,%s,%s,%s,%s,%s)", (user_id, user_name, user_rank, user_level, level_statu, tieba_name))#提交conn.commit()#关闭连接cursor.close()类似这样

python爬虫爬取的数据可以做什么

爬虫的概念是,爬取网上能看到的数据,也就是只要网上存在的,通过浏览器可以看到的数据。

爬虫都可以爬取。

爬虫爬取的原理就是伪装成浏览器,然后进行爬取操作哪些数据你需要你就可以爬取。

比如爬取公司竞争对手的商业数据,爬取电影,音乐,图片等等的。

只要你希望得到的,前提浏览器可以访问的都可以爬取

python把爬到的数据放到数据库

去装一个 pymsql包然后import pymysql #导入pymsql模块 #链接数据库,注意port是int型,不是str,所以不要用引号conn = pymysql.connect( user=\'root\', password=\'root\', host=\'127.0.0.1\', port=3306, database=\'test_demo\', use_unicode=True, charset="utf8" )#获取游标cursor = conn.cursor()#插入数据,注意看有变量的时候格式cursor.execute("INSERT INTO tieba_user(`uuid`,`user_name`,`user_rank`,`user_level`,`level_status`,`tieba_name`) VALUES (%s,%s,%s,%s,%s,%s)", (user_id, user_name, user_rank, user_level, level_statu, tieba_name))#提交conn.commit()#关闭连接cursor.close()类似这样...

如何使用python爬取知乎数据并做简单分析

一、使用的技术栈:爬虫:python27 +requests+json+bs4+time分析工具: ELK套件开发工具:pycharm数据成果简单的可视化分析1.性别分布0 绿色代表的是男性 ^ . ^1 代表的是女性-1 性别不确定可见知乎的用户男性颇多。

二、粉丝最多的top30粉丝最多的前三十名:依次是张佳玮、李开复、黄继新等等,去知乎上查这些人,也差不多这个排名,说明爬取的数据具有一定的说服力。

三、写文章最多的top30四、爬虫架构爬虫架构图如下:说明:选择一个活跃的用户(比如李开复)的url作为入口url.并将已爬取的url存在set中。

抓取内容,并解析该用户的关注的用户的列表url,添加这些url到另一个set中,并用已爬取的url作为过滤。

解析该用户的个人信息,并存取到本地磁盘。

logstash取实时的获取本地磁盘的用户数据,并给elsticsearchkibana和elasticsearch配合,将数据转换成用户友好的可视化图形。

五、编码爬取一个url:解析内容:存本地文件:代码说明:* 需要修改获取requests请求头的authorization。

* 需要修改你的文件存储路径。

源码下载:点击这里,记得star哦!https : // github . com/forezp/ZhihuSpiderMan六、如何获取authorization打开chorme,打开https : // www. zhihu .com/,登陆,首页随便找个用户,进入他的个人主页,F12(或鼠标右键,点检查)七、可改进的地方可增加线程池,提高爬虫效率存储url的时候我才用的set(),并且采用缓存策略,最多只存2000个url,防止内存不够,其实可以存在redis中。

存储爬取后的用户我说采取的是本地文件的方式,更好的方式应该是存在mongodb中。

对爬取的用户应该有一个信息的过滤,比如用户的粉丝数需要大与100或者参与话题数大于10等才存储。

防止抓取了过多的僵尸用户。

八、关于ELK套件关于elk的套件安装就不讨论了,具体见官网就行了。

网站:https : // www . elastic . co/另外logstash的配置文件如下:从爬取的用户数据可分析的地方很多,比如地域、学历、年龄等等,我就不一一列举了。

另外,我觉得爬虫是一件非常有意思的事情,在这个内容消费升级的年代,如何在广阔的互联网的数据海洋中挖掘有价值的数据,是一件值得思考和需不断践行的事情。

如何用python爬取nba数据中心的数据

爬取的网站为:stat-nba.com,本文爬取的是NBA2016-2017赛季常规赛至2017年1月7日的数据 改变url_header和url_tail即可爬取特定的其他数据。

源代码如下:[python] view plain copy#coding=utf-8 import sys reload(sys) sys.setdefaultencoding(\'utf-8\') import requests import time import urllib from bs4 import BeautifulSoup import re from pyExcelerator import * def getURLLists(url_header,url_tail,pages): """ 获取所有页面的URL列表 """ url_lists = [] url_0 = url_header+\'0\'+url_tail print url_0 url_lists.append(url_0) for i in range(1,pages+1): url_temp = url_header+str(i)+url_tail url_lists.append(url_temp) return url_lists def getNBAAllData(url_lists): """ 获取所有2017赛季NBA常规赛数据 """ datasets = [\'\'] for item in url_lists: data1 = getNBASingleData(item) datasets.extend(data1) #去掉数据里的空元素 for item in datasets[:]: if len(item) == 0: datasets.remove(item) return datasets def getNBASingleData(url): """ 获取1个页面NBA常规赛数据 """ QueryType=game&order=1&crtcol=date_out&GameType=season&PageNum=3000&Season0=2016&Season1=2017\' # html = requests.get(url).text html = urllib.urlopen(url).read() # print html soup = BeautifulSoup(html) data = soup.html.body.find(\'tbody\').text list_data = data.split(\'\\n\') # with open(\'nba_data.txt\',\'a\') as fp: # fp.write(data) # for item in list_data[:]: # if len(item) == 0: # list_data.remove(item) return list_data def saveDataToExcel(datasets,sheetname,filename): book = Workbook() sheet = book.add_sheet(sheetname) sheet.write(0,0,u\'序号\') sheet.write(0,1,u\'球队\') sheet.write(0,2,u\'时间\') sheet.write(0,3,u\'结果\') sheet.write(0,4,u\'主客\') sheet.write(0,5,u\'比赛\') sheet.write(0,6,u\'投篮命中率\') sheet.write(0,7,u\'命中数\') sheet.write(0,8,u\'出手数\') sheet.write(0,9,u\'三分命中率\') sheet.write(0,10,u\'三分命中数\') sheet.write(0,11,u\'三分出手数\') sheet.write(0,12,u\'罚球命中率\') sheet.write(0,13,u\'罚球命中数\') sheet.write(0,14,u\'罚球出手数\') sheet.write(0,15,u\'篮板\') sheet.write(0,16,u\'前场篮板\') sheet.write(0,17,u\'后场篮板\') sheet.write(0,18,u\'助攻\') sheet.write(0,19,u\'抢断\') sheet.write(0,20,u\'盖帽\') sheet.write(0,21,u\'失误\') sheet.write(0,22,u\'犯规\') sheet.write(0,23,u\'得分\') num = 24 row_cnt = 0 data_cnt = 0 data_len = len(datasets) print \'data_len:\',data_len while(data_cntrow_cnt += 1 print \'序号:\',row_cnt for col in range(num): # print col sheet.write(row_cnt,col,datasets[data_cnt]) data_cnt += 1 book.save(filename) def writeDataToTxt(datasets): fp = open(\'nba_data.txt\',\'w\') line_cnt = 1 for i in range(len(datasets)-1): #球队名称对齐的操作:如果球队名字过短或者为76人队是 球队名字后面加两个table 否则加1个table if line_cnt % 24 == 2 and len(datasets[i]) fp.write(datasets[i]+\'\\t\\t\') else: fp.write(datasets[i]+\'\\t\') line_cnt += 1 if line_cnt % 24 == 1: fp.write(\'\\n\') fp.close() if __name__ == "__main__": pages = int(1132/150) url_header = \'hp?page=\' url_tail = \'&QueryType=game&order=1&crtcol=date_out&GameType=season&PageNum=3000&Season0=2016&Season1=2017#label_show_result\' url_lists = getURLLists(url_header,url_tail,pages) datasets = getNBAAllData(url_lists) writeDataToTxt(datasets) sheetname = \'nba normal data 2016-2017\' str_time = time.strftime(\'%Y-%m-%d\',time.localtime(time.time())) filename = \'nba_normal_data\'+str_time+\'.xls\' saveDataToExcel(datasets,sheetname,filename)

python爬虫爬取的数据可以做什么

爬虫的概念是,爬取网上能看到的数据,也就是只要网上存在的,通过浏览器可以看到的数据。

爬虫都可以爬取。

爬虫爬取的原理就是伪装成浏览器,然后进行爬取操作哪些数据你需要你就可以爬取。

比如爬取公司竞争对手的商业数据,爬取电影,音乐,图片等等的。

只要你希望得到的,前提浏览器可以访问的都可以爬取...

python爬虫下来的数据怎么存

如果是存到mysql中,可以设置为字段类型为text。

mysql中text 最大长度为65,535(2的16次方–1)字符的TEXT列。

如果你觉得text长度不够,可以选择MEDIUMTEXT最大长度为16,777,215。

LONGTEXT最大长度为4,294,967,295Text主要是用来存放非二进制的文本,如论坛帖子,题目,或者百度知道的问题和回答之类。

需要弄清楚的是text 和 char varchar blob这几种类型的区别如果真的特别大,就用python在某一路径下建一个文件,把内容write到文件中就可以了

如何用python获取股票数据

在Python的QSTK中,是通过s_datapath变量,定义相应股票数据所在的文件夹。

一般可以通过QSDATA这个环境变量来设置对应的数据文件夹。

具体的股票数据来源,例如沪深、港股等市场,你可以使用免费的WDZ程序输出相应日线、5分钟数据到s_datapath变量所指定的文件夹中。

然后可使用Python的QSTK中,qstkutil.DataAccess进行数据访问。

63008