Python3.x:定时获取页面数据存入数据库
Python3.x:定时获取页面数据存入数据库
- #间隔五分钟采集一次数据入库
- import pymysql
- import urllib.request
- from bs4 import BeautifulSoup
- import threading
- import time
- # 数据入库处理
- def doDataWlpc(jjdm, jjmc, dwjz, dwjzrq):
- r_code = 0
- print('基金信息:' + jjdm + ',' + jjmc + ',' + dwjz + ',' + dwjzrq)
- try:
- # 打开数据库连接
- conn = pymysql.connect(host='localhost', user='root',
- passwd='lizm', db='pythondb', port=3306, charset='utf8')
- # 获取一个游标
- cursor = conn.cursor()
- # 查询数据是否已经存在
- sql_check = """SELECT * FROM pythondb.t_x01_wlpc WHERE dwjz='""" + \
- dwjz + """' and dwjzrq='""" + dwjzrq + """';"""
- print('sql_check>>>:' + sql_check)
- cursor.execute(sql_check)
- results = cursor.fetchall()
- # 判断是否有记录数
- if len(results) == 0:
- check_code = 0
- else:
- check_code = 1
- if check_code == 0:
- sql = """INSERT INTO pythondb.t_x01_wlpc (jjdm,jjmc,dwjz,dwjzrq,oprdate) VALUES('""" + \
- jjdm + """','""" + jjmc + """','""" + dwjz + \
- """','""" + dwjzrq + """',sysdate());"""
- try:
- print('sql>>>:' + sql)
- # 执行sql语句
- cursor.execute(sql)
- # 提交到数据库执行
- conn.commit()
- r_code = 0
- except:
- # 如果发生错误则回滚
- conn.rollback()
- r_code = 1
- else:
- r_code = 0
- print('基金' + jjmc + '数据已存在')
- cursor.close() # 关闭游标
- conn.close() # 释放数据库资源
- except:
- r_code = 1
- print("失败,异常")
- return r_code
- # 获取基金的信息
- def getJjInfor(header_, url_):
- # 返回数组
- r_info = []
- req = urllib.request.Request(url=url_, headers=header_)
- res = urllib.request.urlopen(req)
- html = res.read().decode('utf-8')
- soup = BeautifulSoup(html, 'html.parser')
- # css的class获取值
- jjdm = soup.find(
- 'div', class_='fundDetail-tit').find('span', class_='ui-num')
- r_info.append(jjdm.get_text())
- #print('基金代码:' + jjdm.get_text())
- title_name = soup.find('div', class_='fundDetail-tit')
- r_info.append(title_name.text.split('(')[0])
- #print('基金名称:' + title_name.text.split('(')[0])
- # 获取估算净值、单位净值、累计净值
- for dataNums in soup.find_all('dd', class_='dataNums'):
- for jzs_ in dataNums.find_all('span', class_='ui-font-large ui-color-red ui-num'):
- r_info.append(jzs_.text)
- #print('' + jzs_.text)
- gz_gztime = soup.find(id='gz_gztime')
- r_info.append(gz_gztime.text.replace('(', '').replace(')', ''))
- #print('估算净值日期:' + gz_gztime.text.replace('(', '').replace(')', ''))
- # 输出class为'dataItem02'标签里面的第一个p元素
- dwjzrq_s = soup.find('dl', class_='dataItem02').p
- r_info.append(dwjzrq_s.text.split('(')[1].split(')')[0])
- #print('单位净值日期:' + dwjzrq_s.text.split('(')[1].split(')')[0])
- return r_info
- def main():
- global timer
- url = r'http://fund.eastmoney.com/340007.html?spm=search'
- headers = {
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
- jj_infor = []
- jj_infor = getJjInfor(headers, url)
- print(jj_infor)
- return_code = doDataWlpc(jj_infor[0], jj_infor[1], jj_infor[3], jj_infor[5])
- if return_code ==0:
- print('执行成功')
- else:
- print('执行失败')
- #重复构造定时器
- timer = threading.Timer(5*60,main)
- timer.start()
- # 测试
- if __name__ == '__main__':
- #定时调度
- timer = threading.Timer(1,main)
- timer.start()
稍后再加上指定时间段内执行;
Python3.x:定时获取页面数据存入数据库的更多相关文章
- 爬虫小探-Python3 urllib.request获取页面数据
使用Python3 urllib.request中的Requests()和urlopen()方法获取页面源码,并用re正则进行正则匹配查找需要的数据. #forex.py#coding:utf-8 ' ...
- 解决:HTML中多文本域(textarea)回车后数据存入数据库,EL表达式取出异常。
问题描述: 当多文本域(textarea)回车后数据存入数据库. EL表达式取出异常,值换行倒置页面报错. 问题解决: 存值脚本代码,提交前转换\n为<br/>. <script t ...
- 运用.NIT将数据存入数据库、读取数据库(运用封装)陈老师作业
我基础不好,根据所学的知识,书本的例题修改的,也不知道我理解的是否符合老师要求 运用C#将数据存入数据库.并且可以读取数据库里的数据,此项目我运用了封装.我运用了一个窗体将数据存读数据. 我首先创建了 ...
- 获取WebBrowser全cookie 和 httpWebRequest 异步获取页面数据
获取WebBrowser全cookie [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true) ...
- 解析Excel文件并把数据存入数据库
前段时间做一个小项目,为了同时存储多条数据,其中有一个功能是解析Excel并把其中的数据存入对应数据库中.花了两天时间,不过一天多是因为用了"upload"关键字作为URL从而导致 ...
- JS获取页面数据执行Ajax请求
下面这个例子展示了如何使用js获取页面中元素的值,并且将这些值作为参数执行Ajax请求. $("#submit-task").bind("click", fun ...
- Scrapy爬虫入门系列3 将抓取到的数据存入数据库与验证数据有效性
抓取到的item 会被发送到Item Pipeline进行处理 Item Pipeline常用于 cleansing HTML data validating scraped data (checki ...
- Django学习系列15:把POST请求中的数据存入数据库
要修改针对首页中的POST请求的测试.希望视图把新添加的待办事项存入数据库,而不是直接传给响应. 为了测试这个操作,要在现有的测试方法test_can_save_a_post_request中添加3行 ...
- Springboot 上传CSV文件并将数据存入数据库
.xml文件依赖配置 <!--csv依赖 --> <dependency> <groupId>org.apache.commons</groupId> ...
随机推荐
- iPad UIPopoverController弹出窗口的位置和坐标
本文转载至:http://blog.csdn.net/chang6520/article/details/7921181 TodoViewController *contentViewControll ...
- Thinkphp 图形验证码无法显示
不显示验证码的代码: public function verify(){ $verify = new \Think\Verify(); $verify->entry(); } 修改为: publ ...
- java基础---->Base64算法的使用
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP环境下传递较长的标识信息.详细的Base64信息,可以参见维基百科:https://en.wikipedia.org ...
- Docker源码分析(八):Docker Container网络(下)
1.Docker Client配置容器网络模式 Docker目前支持4种网络模式,分别是bridge.host.container.none,Docker开发者可以根据自己的需求来确定最适合自己应用场 ...
- sencha touch 组件选择器getCmp和ComponentQuery.query()的效率解析
昨天无意中在网上看到一篇讲解sencha touch组件选择器的文章,名为 Sencha touch 2通过Ext.ComponentQuery.query查找组件. 里面对组件选择器的效率讲解完全反 ...
- 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 ...
- glassfish任意文件读取漏洞解析
一.背景: glassfish是一款java编写的跨平台的开源的应用服务器. 二.漏洞原理: 与宽字节SQL注入一致,都是由于unicode编码歧义导致的.具体payload如下构造: http:// ...
- Redis字符串类型的操作
set key value [ex 秒数] / [px 毫秒数] [nx] /[xx] 如: set a 1 ex 10 , 10秒有效 Set a 1 px 9000 , 9秒有效 注: 如果ex ...
- angularJs初体验,实现双向数据绑定!使用体会:比较爽
使用初体验:ng 双向数据绑定: 最简单的双向数据绑定:(使用默认模块控制) <body ng-app> <input type="text" ng-model= ...
- HDU_3193_Find the hotel
Find the hotel Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...