最近在看mongodb,然后会用了一些最简单的mongodb的操作,然后想着结合股票信息的数据的抓取,然后将数据存储在mongodb中,对于mongo和数据库的最大的区别是,mongo不需要建表,直接进行存储,然后在选择数据表的时候在进行插入数据的时候要将str格式的字符串转换成json的格式进行插入,这个我在插入数据的时候调试了十多分钟,一直以为是自己字符串的原因,然后看了看插入数据的格式和百度,然后才发现这点。然后我是插入在本机的test.Share表中的,然后其他的注重点就没有什么了~代码写的很丑,冗余也很大,还是会继续更新~并且程序是但进程进行的数据抓取~嗯~ 很蠢~

  1. #-*-coding:utf-8 -*-
  2. import urllib
  3. import re
  4. import json
  5. import urllib2
  6. from lxml import etree
  7. import requests
  8. import time
  9. from Queue import Queue
  10. from pymongo import MongoClient
  11. import matplotlib.pyplot as plt
  12. URL = 'http://quote.fx678.com/exchange/WH'
  13. nation_que = Queue()
  14. client = MongoClient('localhost',27017)
  15. db = client.test
  16. Share = db.Share
  17.  
  18. def sub_sort(array,array1,low,high):
  19. key = array[low]
  20. key1 = array1[low]
  21. while low < high:
  22. while low < high and array[high] >= key:
  23. high -= 1
  24. while low < high and array[high] < key:
  25. array[low] = array[high]
  26. array1[low] = array1[high]
  27. low += 1
  28. array[high] = array[low]
  29. array1[high] = array1[low]
  30. array[low] = key
  31. array1[low] = key1
  32. return low
  33.  
  34. def quick_sort(array,array1,low,high):
  35. if low < high:
  36. key_index = sub_sort(array,array1,low,high)
  37. quick_sort(array,array1,low,key_index)
  38. quick_sort(array,array1,key_index+1,high)
  39.  
  40. def download(url, headers, num_try=2):
  41. while num_try >0:
  42. num_try -= 1
  43. try:
  44. content = requests.get(url, headers=headers)
  45. return content.text
  46.  
  47. except urllib2.URLError as e:
  48. print 'Download error', e.reason
  49.  
  50. return None
  51.  
  52. current_quto = Queue()
  53. open_quto = Queue()
  54. high_quto = Queue()
  55. low_quto = Queue()
  56. close_quto = Queue()
  57. update_time = Queue()
  58. def get_type_url():
  59. headers = {
  60. 'User_agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36',
  61. 'Referer': 'http://quote.fx678.com/exchange/WH',
  62. 'Cookie': 'io=-voMclEjiizK9nWKALqB; UM_distinctid=15f5938ddc72db-089cf9ba58d9e5-31657c00-fa000-15f5938ddc8b24; Hm_lvt_d25bd1db5bca2537d34deae7edca67d3=1509030420; Hm_lpvt_d25bd1db5bca2537d34deae7edca67d3=1509031023',
  63. 'Accept-Language': 'zh-CN,zh;q=0.8',
  64. 'Accept-Encoding': 'gzip, deflate',
  65. 'Accept': '*/*'
  66. }
  67. content = download(URL,headers)
  68. html = etree.HTML(content)
  69. result = html.xpath('//a[@class="mar_name"]/@href')
  70. result1 = html.xpath('//td/text()')
  71. num = 0
  72. for each in result1:
  73.  
  74. if num%6 == 0:
  75. current_quto.put(each)
  76. num += 1
  77. elif num%6 == 1:
  78. open_quto.put(each)
  79. num += 1
  80. elif num%6 == 2:
  81. high_quto.put(each)
  82. num += 1
  83. elif num%6 == 3:
  84. low_quto.put(each)
  85. num += 1
  86. elif num %6 == 4:
  87. close_quto.put(each)
  88. num +=1
  89. elif num %6 == 5:
  90. update_time.put(each)
  91. num +=1
  92. #while not
  93. for each in result:
  94. st = each.split('/')
  95. nation_que.put(st[len(st)-1])
  96.  
  97. get_precent()
  98.  
  99. def get_precent():
  100.  
  101. while not nation_que.empty():
  102. if not update_time.empty():
  103. time_update = update_time.get(False)
  104. update_time.task_done()
  105. if not current_quto.empty():
  106. new_rates = current_quto.get(False)
  107. current_quto.task_done()
  108. if not open_quto.empty():
  109. opening = open_quto.get(False)
  110. open_quto.task_done()
  111. if not high_quto.empty():
  112. high = high_quto.get(False)
  113. high_quto.task_done()
  114. if not low_quto.empty():
  115. low = low_quto.get(False)
  116. low_quto.task_done()
  117. if not close_quto.empty():
  118. closing = close_quto.get(False)
  119. close_quto.task_done()
  120.  
  121. ss = nation_que.get(False)
  122. print ss
  123. print low
  124. print high
  125. print time_update
  126. print new_rates
  127. print opening
  128.  
  129. url = 'http://api.q.fx678.com/history.php?symbol=' + ss +'&limit=288&resolution=5&codeType=8100&st=0.8274405615006541'
  130. print url
  131. headers = {'Accept':'application/json, text/javascript, */*; q=0.01',
  132. 'Accept-Encoding':'gzip, deflate',
  133. 'Accept-Language':'zh-CN,zh;q=0.8',
  134. 'Connection':'keep-alive',
  135. 'Host':'api.q.fx678.com',
  136. 'Origin':'http://quote.fx678.com',
  137. 'Referer':'http://quote.fx678.com/symbol/USD',
  138. 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'
  139. }
  140. num_try = 2
  141. while num_try >0:
  142. num_try -= 1
  143. try:
  144. content = requests.get(url, headers=headers)
  145. html = json.loads(content.text)
  146. st = html['h']
  147. T_time = html['t']
  148. if len(st) > 0 and len(T_time) > 0:
  149. draw_pict(ss,T_time,st,time_update,new_rates,opening,high,low,closing)
  150. break
  151. except urllib2.URLError as e:
  152. print 'Download error', e.reason
  153. nation_que.task_done()
  154. List = []
  155. def draw_pict(name,T_time1,high_rate,time_update,new_rate,opening,high,low,closing):
  156.  
  157. High = T_time1
  158. Time = high_rate
  159. High_Rate = []
  160. T_time = []
  161. mmap = "{\"Type\":\"%s\",\"Current_quto\":\"%s\",\"Opening_quto\":\"%s\",\"High_quto\":\"%s\",\"low_quto\":\"%s\",\"Closing_quto\":\"%s\",\"Update_Time\":\"%s\",\"Real_TIme_infor\":{" % ( name, new_rate, opening, high, low, closing, time_update)
  162. print mmap
  163. flag = 0
  164. for each,high1 in zip(T_time1,high_rate):
  165. if flag == 1:
  166. mmap += ","
  167. else:
  168. flag = 1
  169. mm = "\"%s\":\"%s\""%(each,high1)
  170.  
  171. st = time.localtime(float(each))
  172. mmap += mm
  173. if st.tm_min == 0:
  174. T_time.append(st.tm_hour)
  175. High_Rate.append(high1)
  176. else:
  177. pass
  178. mmap += "}}"
  179. mmap1 = json.loads(mmap)
  180. print mmap1
  181. Share.insert(mmap1)
  182. if len(T_time) == len(High_Rate):
  183. quick_sort(T_time,High_Rate,0,len(High_Rate)-1)
  184. List.append(High_Rate)
  185.  
  186. def draw_picture():
  187. colu = len(List)
  188.  
  189. num = 1
  190. for each in List:
  191. plt.subplot(colu/2 + 1,2,num)
  192. num+=1
  193.  
  194. list = each
  195. T_time = []
  196. for i in range(len(list)):
  197. T_time.append(i)
  198. print len(list)
  199. print len(T_time)
  200. plt.plot(T_time, list, marker='*')
  201.  
  202. plt.show()
  203. plt.title('Share Message')
  204.  
  205. if __name__ == '__main__':
  206. get_type_url()
  207. draw_picture()

Python股票信息抓取(三)的更多相关文章

  1. Python股票信息抓取~

    本来想把股票的涨跌抓取出来,用汇通网的股票为例,就找了国际外汇为例. 页面里有xhr请求,并且每个xhr的url请求的 http://api.q.fx678.com/history.php?symbo ...

  2. Python股票信息抓取(二)

    在一的基础上,想着把所有的折线图放在一个图中,然后图的结果如图所示: 不是略丑,是很丑~ 依然的单进程,只是将图标结果放在了一张图里 代码如下: #-*-coding:utf-8 -*- import ...

  3. python 爬虫抓取心得

    quanwei9958 转自 python 爬虫抓取心得分享 urllib.quote('要编码的字符串') 如果你要在url请求里面放入中文,对相应的中文进行编码的话,可以用: urllib.quo ...

  4. Python 爬虫: 抓取花瓣网图片

    接触Python也好长时间了,一直没什么机会使用,没有机会那就自己创造机会!呐,就先从爬虫开始吧,抓点美女图片下来. 废话不多说了,讲讲我是怎么做的. 1. 分析网站 想要下载图片,只要知道图片的地址 ...

  5. Python爬虫----抓取豆瓣电影Top250

    有了上次利用python爬虫抓取糗事百科的经验,这次自己动手写了个爬虫抓取豆瓣电影Top250的简要信息. 1.观察url 首先观察一下网址的结构 http://movie.douban.com/to ...

  6. Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储

    Python爬虫可以说是好玩又好用了.现想利用Python爬取网页股票数据保存到本地csv数据文件中,同时想把股票数据保存到MySQL数据库中.需求有了,剩下的就是实现了. 在开始之前,保证已经安装好 ...

  7. python Web抓取(一)[没写完]

    需要的模块: python web抓取通过: webbrowser:是python自带的,打开浏览器获取指定页面 requests:从因特网上下载文件和网页 Beautiful Soup:解析HTML ...

  8. python requests抓取NBA球员数据,pandas进行数据分析,echarts进行可视化 (前言)

    python requests抓取NBA球员数据,pandas进行数据分析,echarts进行可视化 (前言) 感觉要总结总结了,希望这次能写个系列文章分享分享心得,和大神们交流交流,提升提升. 因为 ...

  9. python数据抓取分析(python + mongodb)

    分享点干货!!! Python数据抓取分析 编程模块:requests,lxml,pymongo,time,BeautifulSoup 首先获取所有产品的分类网址: def step(): try: ...

随机推荐

  1. 【HDU5730】Shell Necklace(多项式运算,分治FFT)

    [HDU5730]Shell Necklace(多项式运算,分治FFT) 题面 Vjudge 翻译: 有一个长度为\(n\)的序列 已知给连续的长度为\(i\)的序列装饰的方案数为\(a[i]\) 求 ...

  2. 洛谷 P4503 [CTSC2014]企鹅QQ 解题报告

    P4503 [CTSC2014]企鹅QQ 题目背景 PenguinQQ是中国最大.最具影响力的SNS(Social Networking Services)网站,以实名制为基础,为用户提供日志.群.即 ...

  3. 洛谷p1017 进制转换(2000noip提高组)

    洛谷P1017 进制转换 题意分析 给出一个数n,要求用负R进制显示. n∈[-32768,32767].R ∈[-20,-2] 考察的是负进制数的转换,需要理解短除法. 看到这道题的时候,我是比较蒙 ...

  4. vim在行首和 行尾加

    在每行开始加入“<a href=”   vim 命令:          :%s/^/<a href=/g 在每行尾加入 “</a>”    vim命令 :           ...

  5. CentOS 7.0 作为服务器注意事项

    配置防火墙,开启80端口.3306端口: CentOS 7.0默认使用的是firewall作为防火墙 关闭firewall: systemctl stop firewalld.service  #停止 ...

  6. 那些你不常用却非常有用的MySql语句和命令

    操作数据库 关于数据库的操作比较少,主要是:看.建.用.删. 查看数据库 获取服务器上的数据库列表通常很有用.执行show databases;命令就可以搞定. 1 mysql> show da ...

  7. Centos7.3 安装 OpenCV3.3.0

    一开始会出现这个错误: CMake Error at CMakeLists.txt: (message): FATAL: In-source builds are not allowed. You s ...

  8. Linux HugePage 特性

    HugePage,就是指的大页内存管理方式.与传统的4kb的普通页管理方式相比,HugePage为管理大内存(8GB以上)更为高效.本文描述了什么是HugePage,以及HugePage的一些特性. ...

  9. 图片虚拟目录--即图片保存在window硬盘上面

    这个是图片保存在电脑的硬盘上面的图片上传设置,既不是在web工程中,也不是在专门的图片服务器中,下面是配置方法: r 这里的Document base 我们这里设置为F:\images 如果在浏览器访 ...

  10. jni里找不到刚添加的C++函数

    使用NDK开发,用到了JNI来连接C++和JAVA. 当C++方增加了一个新函数,jni访问此函数,eclipse会提示找不到改函数,然后前面打个红叉叉表示语法错误,从而阻碍了编译和运行. 当我选择清 ...