Python3.x:定时获取页面数据存入数据库

  1. #间隔五分钟采集一次数据入库
  2. import pymysql
  3. import urllib.request
  4. from bs4 import BeautifulSoup
  5. import threading
  6. import time
  7.  
  8. # 数据入库处理
  9. def doDataWlpc(jjdm, jjmc, dwjz, dwjzrq):
  10. r_code = 0
  11. print('基金信息:' + jjdm + ',' + jjmc + ',' + dwjz + ',' + dwjzrq)
  12. try:
  13. # 打开数据库连接
  14. conn = pymysql.connect(host='localhost', user='root',
  15. passwd='lizm', db='pythondb', port=3306, charset='utf8')
  16. # 获取一个游标
  17. cursor = conn.cursor()
  18. # 查询数据是否已经存在
  19. sql_check = """SELECT * FROM pythondb.t_x01_wlpc WHERE dwjz='""" + \
  20. dwjz + """' and dwjzrq='""" + dwjzrq + """';"""
  21. print('sql_check>>>:' + sql_check)
  22. cursor.execute(sql_check)
  23. results = cursor.fetchall()
  24. # 判断是否有记录数
  25. if len(results) == 0:
  26. check_code = 0
  27. else:
  28. check_code = 1
  29.  
  30. if check_code == 0:
  31. sql = """INSERT INTO pythondb.t_x01_wlpc (jjdm,jjmc,dwjz,dwjzrq,oprdate) VALUES('""" + \
  32. jjdm + """','""" + jjmc + """','""" + dwjz + \
  33. """','""" + dwjzrq + """',sysdate());"""
  34. try:
  35. print('sql>>>:' + sql)
  36. # 执行sql语句
  37. cursor.execute(sql)
  38. # 提交到数据库执行
  39. conn.commit()
  40. r_code = 0
  41. except:
  42. # 如果发生错误则回滚
  43. conn.rollback()
  44. r_code = 1
  45. else:
  46. r_code = 0
  47. print('基金' + jjmc + '数据已存在')
  48. cursor.close() # 关闭游标
  49. conn.close() # 释放数据库资源
  50. except:
  51. r_code = 1
  52. print("失败,异常")
  53.  
  54. return r_code
  55.  
  56. # 获取基金的信息
  57. def getJjInfor(header_, url_):
  58. # 返回数组
  59. r_info = []
  60.  
  61. req = urllib.request.Request(url=url_, headers=header_)
  62. res = urllib.request.urlopen(req)
  63. html = res.read().decode('utf-8')
  64. soup = BeautifulSoup(html, 'html.parser')
  65.  
  66. # css的class获取值
  67. jjdm = soup.find(
  68. 'div', class_='fundDetail-tit').find('span', class_='ui-num')
  69. r_info.append(jjdm.get_text())
  70. #print('基金代码:' + jjdm.get_text())
  71.  
  72. title_name = soup.find('div', class_='fundDetail-tit')
  73. r_info.append(title_name.text.split('(')[0])
  74. #print('基金名称:' + title_name.text.split('(')[0])
  75.  
  76. # 获取估算净值、单位净值、累计净值
  77. for dataNums in soup.find_all('dd', class_='dataNums'):
  78. for jzs_ in dataNums.find_all('span', class_='ui-font-large ui-color-red ui-num'):
  79. r_info.append(jzs_.text)
  80. #print('' + jzs_.text)
  81.  
  82. gz_gztime = soup.find(id='gz_gztime')
  83. r_info.append(gz_gztime.text.replace('(', '').replace(')', ''))
  84. #print('估算净值日期:' + gz_gztime.text.replace('(', '').replace(')', ''))
  85.  
  86. # 输出class为'dataItem02'标签里面的第一个p元素
  87. dwjzrq_s = soup.find('dl', class_='dataItem02').p
  88. r_info.append(dwjzrq_s.text.split('(')[1].split(')')[0])
  89. #print('单位净值日期:' + dwjzrq_s.text.split('(')[1].split(')')[0])
  90.  
  91. return r_info
  92.  
  93. def main():
  94. global timer
  95. url = r'http://fund.eastmoney.com/340007.html?spm=search'
  96. headers = {
  97. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
  98.  
  99. jj_infor = []
  100. jj_infor = getJjInfor(headers, url)
  101.  
  102. print(jj_infor)
  103.  
  104. return_code = doDataWlpc(jj_infor[0], jj_infor[1], jj_infor[3], jj_infor[5])
  105. if return_code ==0:
  106. print('执行成功')
  107. else:
  108. print('执行失败')
  109.  
  110. #重复构造定时器
  111. timer = threading.Timer(5*60,main)
  112. timer.start()
  113.  
  114. # 测试
  115. if __name__ == '__main__':
  116. #定时调度
  117. timer = threading.Timer(1,main)
  118. timer.start()

稍后再加上指定时间段内执行;

Python3.x:定时获取页面数据存入数据库的更多相关文章

  1. 爬虫小探-Python3 urllib.request获取页面数据

    使用Python3 urllib.request中的Requests()和urlopen()方法获取页面源码,并用re正则进行正则匹配查找需要的数据. #forex.py#coding:utf-8 ' ...

  2. 解决:HTML中多文本域(textarea)回车后数据存入数据库,EL表达式取出异常。

    问题描述: 当多文本域(textarea)回车后数据存入数据库. EL表达式取出异常,值换行倒置页面报错. 问题解决: 存值脚本代码,提交前转换\n为<br/>. <script t ...

  3. 运用.NIT将数据存入数据库、读取数据库(运用封装)陈老师作业

    我基础不好,根据所学的知识,书本的例题修改的,也不知道我理解的是否符合老师要求 运用C#将数据存入数据库.并且可以读取数据库里的数据,此项目我运用了封装.我运用了一个窗体将数据存读数据. 我首先创建了 ...

  4. 获取WebBrowser全cookie 和 httpWebRequest 异步获取页面数据

    获取WebBrowser全cookie [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true) ...

  5. 解析Excel文件并把数据存入数据库

    前段时间做一个小项目,为了同时存储多条数据,其中有一个功能是解析Excel并把其中的数据存入对应数据库中.花了两天时间,不过一天多是因为用了"upload"关键字作为URL从而导致 ...

  6. JS获取页面数据执行Ajax请求

    下面这个例子展示了如何使用js获取页面中元素的值,并且将这些值作为参数执行Ajax请求. $("#submit-task").bind("click", fun ...

  7. Scrapy爬虫入门系列3 将抓取到的数据存入数据库与验证数据有效性

    抓取到的item 会被发送到Item Pipeline进行处理 Item Pipeline常用于 cleansing HTML data validating scraped data (checki ...

  8. Django学习系列15:把POST请求中的数据存入数据库

    要修改针对首页中的POST请求的测试.希望视图把新添加的待办事项存入数据库,而不是直接传给响应. 为了测试这个操作,要在现有的测试方法test_can_save_a_post_request中添加3行 ...

  9. Springboot 上传CSV文件并将数据存入数据库

    .xml文件依赖配置 <!--csv依赖 --> <dependency> <groupId>org.apache.commons</groupId> ...

随机推荐

  1. iPad UIPopoverController弹出窗口的位置和坐标

    本文转载至:http://blog.csdn.net/chang6520/article/details/7921181 TodoViewController *contentViewControll ...

  2. Thinkphp 图形验证码无法显示

    不显示验证码的代码: public function verify(){ $verify = new \Think\Verify(); $verify->entry(); } 修改为: publ ...

  3. java基础---->Base64算法的使用

    Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP环境下传递较长的标识信息.详细的Base64信息,可以参见维基百科:https://en.wikipedia.org ...

  4. Docker源码分析(八):Docker Container网络(下)

    1.Docker Client配置容器网络模式 Docker目前支持4种网络模式,分别是bridge.host.container.none,Docker开发者可以根据自己的需求来确定最适合自己应用场 ...

  5. sencha touch 组件选择器getCmp和ComponentQuery.query()的效率解析

    昨天无意中在网上看到一篇讲解sencha touch组件选择器的文章,名为 Sencha touch 2通过Ext.ComponentQuery.query查找组件. 里面对组件选择器的效率讲解完全反 ...

  6. hdu4028 The time of a day[map优化dp]

    The time of a day Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others ...

  7. glassfish任意文件读取漏洞解析

    一.背景: glassfish是一款java编写的跨平台的开源的应用服务器. 二.漏洞原理: 与宽字节SQL注入一致,都是由于unicode编码歧义导致的.具体payload如下构造: http:// ...

  8. Redis字符串类型的操作

    set key value [ex 秒数] / [px 毫秒数] [nx] /[xx] 如: set a 1 ex 10 , 10秒有效 Set a 1 px 9000  , 9秒有效 注: 如果ex ...

  9. angularJs初体验,实现双向数据绑定!使用体会:比较爽

    使用初体验:ng 双向数据绑定: 最简单的双向数据绑定:(使用默认模块控制) <body ng-app> <input type="text" ng-model= ...

  10. HDU_3193_Find the hotel

    Find the hotel Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...