文档章节

python + urllib + re 爬取网易彩票大乐透开奖期号

MedivhXu
 MedivhXu
发布于 2017/06/23 17:03
字数 572
阅读 54
收藏 0

一、需求

    1、要求没10分钟扒取一次网易彩票网站的大乐透彩种最新期号;

    2、把最新的期号插入到数据库,如果不是最新的就不插入;

二、实现

1、方法很多种,我这里想到的用urllib获取返回页面元素,然后对页面元素进行过滤

2、上代码

#!/usr/bin/env python
# -*- coding:utf-8 -*-


from threading import Timer
import urllib
import urllib2
import re
import copy
import time
import MySQLdb


class GetNewIssue:
    '''
    获取网易彩票最新大乐透彩种的期号
    '''

    def __init__(self, url=0, page=0):
        '''
        初始化URL地址
        '''
        self.url = url
        self.page = page

    def get_page(self):
        try:
            self.url = 'http://caipiao.163.com/order/dlt/#from=leftnav'
            self.page = urllib.urlopen(self.url).read().decode('utf8')
        except urllib2.URLError:
            print u'请检查URL地址!!!'
        return self.page

    def get_issue(self):
        '''
        处理网易彩票页面返回的元素,返回最新的期号
        '''
        RE1 = re.compile('id="bet_period">\d{5}', re.S)
        page = self.get_page()
        issue_number_lis = re.findall(RE1, page)
        for issues in issue_number_lis:
            issue = int(issues[16:21])
            return issue

    def get_end_time(self):
        '''
        处理网易彩票页面返回的元素,返回当期的截止时间
        '''
        RE2 = re.compile(ur'id="bet_time">代购截止: .*')
        page = self.get_page()
        end_time_list = re.findall(RE2, page)
        for end_times in end_time_list:
            end_time = str(end_times[20:36] + ':00')
            return end_time

    @staticmethod
    def get_sys_time():
        '''
        取系统时间
        '''
        create_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
        return create_time

    def send_data(self):
        '''
        连接数据库,提交获取到的期号、截止时间和系统时间
        '''
        conn = MySQLdb.connect(
            host='192.168.0.0',
            port=3306,
            user='username',
            passwd='password',
            db='db_name',
            charset='utf8'
        )
        cur = conn.cursor()

        issue = self.get_issue()
        print u'扒取到的最新期号为:%s' % issue
        end_time = repr(self.get_end_time())
        create = repr(self.get_sys_time())
        get_data = [(issue, create, end_time)]

        try:
            cur.execute("SELECT	issue FROM	dlt_issue ORDER BY	issue DESC LIMIT 1")
            select_db_results = cur.fetchall()

            for i in xrange(len(select_db_results)):
                for j in xrange(len(select_db_results[i])):
                    pass
                    # print u'数据库存储期号为:%s' % (select_db_results[i][j])
            select_db_result = select_db_results[i][j]
            print u'数据库存储期号为:%s' % select_db_result

            if int(select_db_result) >= issue:
                print u'*****<<数据已经是最新的,不需要更新!>>*****'
            else:
                cur.execute(
                    "INSERT INTO dlt_issue(issue,create_time,end_time) VALUES(%s,%s,%s)" % (issue, create, end_time)
                )
                conn.commit()
                print u'*****<<更新期号成功,更新内容是:%s>>*****' % str(get_data)
        except Exception, e:
            print e
        finally:
            cur.close()
            conn.close()

if __name__ == '__main__':
    def run_func():
        while True:
            run = GetNewIssue()
            run.send_data()
        global timer
        # (3, run_func) 3控制函数调用的时间间隔
        timer = Timer(3, run_func)
        timer.start()
    run = GetNewIssue()
    # Timer(1, run_func) 1控制函数开始调用的等待时间
    timer = Timer(1, run_func)
    timer.start()
    # sleep(15) 15控制函数的总运行时间
    time.sleep(15)
    timer.cancel()

 

© 著作权归作者所有

MedivhXu
粉丝 13
博文 34
码字总数 10426
作品 0
东城
QA/测试工程师
私信 提问
Python3 趣味系列题6 ------ 彩票号码优选方案

本文只介绍双色球红球、大乐透前区号码的选择方法。并且假定读者对以上2种彩票的玩法熟知。 一、数据 双色球 03001期至18134期双色球开奖号码顺序数据,数据条数:2340条,爬虫获得。 大乐透...

AiFan
2018/11/16
0
0
Python爬取彩票双色球并存到把数据excel表格里

环境:python3 目的:爬取15年的双色球开奖号以及期数和开奖日期: 上代码 #!/usr/bin/env python3 --coding:utf-8-- @Author : 杜文涛 @Time : 2018/4/19 16:01 @File : cpssq.py 彩票双色球...

天道酬勤VIP
2018/06/29
0
0
用python统计3d彩票热门数据,看今天运势如何

快下班了,正好准备去买彩票,就顺手写了2个脚本,一个用来下载最近的彩票数据,一个用来统计彩票数字,分享给大家! 彩票数据获取并写入excel表格 数据来源自己看吧~用外链通不过。。。 所用...

猫咪编程
2018/07/06
48
0
福利 | Python专场竞技,这些书给你加把力!

端午节将至,各地龙舟备战竞技,粽子部队也整装待发。小编掐指一算,这种热闹的时节,是时候展现真正的技(fu)术(li)了! (“Python号”龙舟闪亮登场!) Python作为当下最流行的编程语言...

2018/06/15
0
0
python各类爬虫案例,爬到你手软!

小编整理了一些爬虫的案例,代码都整理出来了~ 先来看看有哪些项目呢: python爬虫小工具(文件下载助手) 爬虫实战(笔趣看小说下载) 爬虫实战(VIP视频下载) 爬虫实战(百度文库文章下载...

糖宝lsh
04/14
628
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Cloud 笔记之Spring cloud config client

观察者模式它的数据的变化是被动的。 观察者模式在java中的实现: package com.hxq.springcloud.springcloudconfigclient;import org.springframework.context.ApplicationListener;i...

xiaoxiao_go
今天
4
0
CentOS7.6中安装使用fcitx框架

内容目录 一、为什么要使用fcitx?二、安装fcitx框架三、安装搜狗输入法 一、为什么要使用fcitx? Gnome3桌面自带的输入法框架为ibus,而在使用ibus时会时不时出现卡顿无法输入的现象。 搜狗和...

技术训练营
今天
4
0
《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
今天
7
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
今天
7
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部