#爬虫获取双色球的全部开奖数据

#使用class,

#格式:

import urllib.request

import platform

from bs4 import BeautifulSoup

import os

import sys

import inspect

import operator

import time

import datetime

import re

import shutil

FILE_DIR = os.path.dirname(os.path.abspath(__file__))

PYTHON_DIR = os.path.dirname(FILE_DIR) # 找到父级目录的父级目录

TEMP_DIR = os.path.dirname(PYTHON_DIR) # 找到父级目录的父级目录

TEMP_DIR = TEMP_DIR + "\\tempfile\\"

sys.path.append(TEMP_DIR) # 添加环境变量

CONST_MAX_NR = 0xFFFF

class FetchDoubleBallFromNet():

def __init__(self, _iBallTotalCount=154, _iMaxDayLimit=365):

self.m_strUrlPart = 'http://kaijiang.zhcw.com/zhcw/inc/ssq/ssq_wqhg.jsp?pageNum='

self.m_strBeginUrl = 'http://kaijiang.zhcw.com/zhcw/html/ssq/list_1.html'

self.m_iBallTotalPage = 0

self.m_iEveryPageCount = 20 # 每页的记录数

self.m_iBallTotalCount = _iBallTotalCount

self.m_iMaxDayLimit = -(_iMaxDayLimit*1) # 获取记录为向前N年内的开奖记录,超过的不再需要

self.m_strResPath = TEMP_DIR + "doubleball.txt"

self.m_strResPathTemp = TEMP_DIR + "doubleball_old.txt"

self.m_strNumyPath = TEMP_DIR + "doubleballnum.txt" # 算法序列号路径

self.m_bDebug = True

# ==============================================================================

def __cPrint(self, _strContext):

if self.m_bDebug:

print(_strContext)

# ==============================================================================

def initSysType(self):

self.m_strSysType = platform.system()

self.__cPrint(("Current OS is:", self.m_strSysType))

# ==============================================================================

def __urlOpen(self, _strUrl):

try:

req = urllib.request.Request(_strUrl)

req.add_header(

'User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6')

html = urllib.request.urlopen(req).read()

time.sleep(0.2)

return html

except:

self.__cPrint(('error:'+_strUrl))

# ===============================================================================

# 获取url总页数

def __getTotalPageNum(self, _strUrl):

if len(_strUrl) == 0:

return 0

num = 0

page = self.__urlOpen(_strUrl)

soup = BeautifulSoup(page, "lxml")

strong = soup.find('td', colspan='7')

if strong:

result = strong.get_text().split(' ')

list_num = re.findall("[0-9]{1}", result[1])

for i in range(len(list_num)):

num = num*10 + int(list_num[i])

self.__cPrint(str("__getPageNum = " + str(num)))

return num

else:

return 0

# ===============================================================================

# 获取开奖号码总数

def __getBallTotalCount(self, _strUrl):

if len(_strUrl) == 0:

return 0

num = 0

page = self.__urlOpen(_strUrl)

soup = BeautifulSoup(page, "lxml")

strong = soup.find('td', colspan='7')

if strong:

result = strong.get_text().split(' ')

list_num = re.findall("[0-9]{1}", result[3])

for i in range(len(list_num)):

num = num*10 + int(list_num[i])

self.__cPrint(str("__getBallTotalCount = " + str(num)))

return num

else:

return 0

# ===============================================================================

def __createNew(self, _dtLimitDay):

if os.path.exists(self.m_strResPath):

os.remove(self.m_strResPath)

if os.path.exists(self.m_strResPathTemp):

os.remove(self.m_strResPathTemp)

# (‘2016-05-01’, ‘06,08,13,14,22,27,10’)

if os.path.exists(self.m_strNumyPath):

os.remove(self.m_strNumyPath)

lstContent = list()

fp = open(self.m_strResPath, "a")

fpnum = open(self.m_strNumyPath, "a")

bOverRun = False

iBallCount = 0

# range()象是一个迭代器,它只会输出信息,而不能修改迭代器的内容

for iPage in range(0, self.m_iBallTotalPage):

if bOverRun:

break

lstContent = self.__getBallContentByPage(iPage + 1)

for each in lstContent:

strDateTime = str(each.strip('\n').split(':')[0])

strCode = str(each.strip('\n').split(':')[2])

dtItemDate = datetime.datetime.strptime(

strDateTime, '%Y-%m-%d')

if dtItemDate <= _dtLimitDay or iBallCount >= self.m_iBallTotalCount:

bOverRun = True

break

self.__cPrint(each)

fp.write(each)

fpnum.write(""+strDateTime + "," + strCode+"\n")

iBallCount += 1

time.sleep(0.1)

fp.flush()

fpnum.flush()

fp.close()

fpnum.close()

# ===============================================================================

# 获取每页双色球的信息 2018-07-08:2018078:03,10,14,17,18,30,12

def __getBallContent(self):

# 获取当前的日期,时间,月

dtNow = datetime.datetime.now()

dtTimeSpan = datetime.timedelta(days=self.m_iMaxDayLimit)

dtLimitDay = dtNow + dtTimeSpan # 得到新的日期,2年前的今天,txt里面保留这些日期的内容

dtLimitDay = datetime.datetime.strptime("1970-01-01", '%Y-%m-%d')

self.m_iBallTotalPage = self.__getTotalPageNum(self.m_strBeginUrl)

self.__createNew(dtLimitDay)

# ==============================================================================

# 通过旧文件获取内容

def __getBallContentByOldFile(self, _iStartLine, _iGetCount):

lstOldContent = list()

if os.path.exists(self.m_strResPathTemp):

fp = open(self.m_strResPathTemp, "r")

fp.seek(0, 0)

for line in fp.readlines()[_iStartLine:_iGetCount]:

lstOldContent.append(str(line))

fp.close()

return lstOldContent

# ==============================================================================

# 获取指定页码的双色球的信息

def __getBallContentByPage(self, _iPageNo):

if _iPageNo == 0:

return

href = self.m_strUrlPart + str(_iPageNo) # + '.html' # 调用新url链接

# for listnum in len(list_num):

page = BeautifulSoup(self.__urlOpen(href), "lxml")

time.sleep(0.2)

em_list = page.find_all('em') # 匹配em内容

# 匹配

这样的内容

div_list = page.find_all('td', {'align': 'center'})

# 匹配

这样的内容

num_list = page.find_all('td', {'align': 'center'})

# 初始化

strCodeNoList = list() # 开奖期号

dtDatetimeList = list() # 开奖日期

strBallCodeList = list() # 开奖号码

strDataList = list()

# 开奖号码

strCode = ''

n = 0

for div in em_list:

text = div.get_text()

text = text.encode('utf-8')

n = n + 1

if n == 7:

text = text.decode()

strCode += text

strBallCodeList.append(str(strCode))

strCode = ''

n = 0

else:

text = text.decode() + ","

strCode += text

# 开奖日期

for div2 in div_list: #

2018-06-24

text = div2.get_text().strip('')

# print text

list_num = re.findall(r'\d{4}-\d{2}-\d{2}', text)

list_num = str(list_num[::1])

list_num = list_num[2:12]

if len(list_num) == 0:

continue

elif len(list_num) > 1:

dtDatetimeList.append(str(list_num))

# 开奖期号

for div in num_list: #

2018072

text = div.get_text().strip('')

list_num1 = re.findall(r'\d{7}', text)

list_num1 = str(list_num1[::1])

list_num1 = list_num1[2:9]

if len(list_num1) == 0:

continue

elif len(list_num1) > 1:

strCodeNoList.append(str(list_num1))

# i = 0

for i in range(len(dtDatetimeList)):

strDataList.append(str(dtDatetimeList[i]) + ":" +

str(strCodeNoList[i]) + ":" +

str(strBallCodeList[i]) + "\n")

# i = i + 1

return strDataList

# ==============================================================================

# 对外接口,触发调用,获取开奖号码

# _iCreateType:0-新建,1-扩展

# _iLimitEnable:0-全部开奖号码,1-默认上限期数的开奖号码

def GetBallDataFromNet(self):

self.__getBallContent()

# ===============================================================================

if __name__ == "__main__":

ballget = FetchDoubleBallFromNet(CONST_MAX_NR, CONST_MAX_NR) # 开奖信息获取对象

ballget.initSysType()

ballget.GetBallDataFromNet()

python如何过获取双色球信息_【编程】Python爬虫获取双色球数据相关推荐

  1. python 获取硬盘信息_使用python获取电脑的磁盘信息方法

    使用Python获取电脑的磁盘信息需要借助于第三方的模块psutil,这个模块需要自己安装,纯粹的CPython下面不具备这个功能. 在iPython交互界面中进行如下演示: 查看电脑的磁盘分区: I ...

  2. python获取路由器信息_使用python爬取互联网设备信息

    扩大搜索范围 DNS服务器搭建好以后,需要寻找可修改的路由器目标,目标不能太多也不能太少,就从我路由器c段入手吧,65536个IP地址,使用nmap扫描,将所有开放80端口的主机找出来,然后分析结果: ...

  3. python模拟登录qq获取好友信息_使用Python模拟登录QQ邮箱获取QQ好友列表

    最近因开发项目的需要,有一个需求,就是很多SNS网站都有的通过 Email地址 导入好友列表,不过这次要导入的不是Email 列表,而是QQ的好友列表. 实现方式: 通过google一搜,实现的方式大 ...

  4. python爬取本地天气信息_用Python写一个爬取中国天气网的终端版天气预报爬虫

    导语 前几篇文章介绍了爬取静态网站的主要方法.今天写一个小项目实践一下.本项目可以在终端窗口查询全国3400多个区县的当日天气信息和近七天天气信息. 实现效果 [Python爬虫]写一个爬取中国天气网 ...

  5. 浏览器获取设备信息_一条命令获取 IE 浏览器保存网站的账号和密码信息

    渗透攻击红队 一个专注于红队攻击的公众号 大家好,这里是 渗透攻击红队 的第 41 篇文章,本公众号会记录一些我学习红队攻击的复现笔记(由浅到深),不出意外每天一更 Powershell 内网渗透一直 ...

  6. python爬取网上租房信息_用python爬取租房网站信息的代码

    自己在刚学习python时写的,中途遇到很多问题,查了很多资料,下面就是我爬取租房信息的代码: 链家的房租网站 两个导入的包 1.requests 用来过去网页内容 2.BeautifulSoup i ...

  7. python自动接收钉钉信息_用Python实现阿里钉钉机器人读取数据库内容自动发群通知...

    from datetime importdatetimeimportjsonimporturllib.requestimportpymysql as pmsfrom apscheduler.sched ...

  8. python自动抓取指定信息_使用python自动转发抓取的网页信息

    1.[代码][Python]代码 # -*- coding: utf-8 -*- from selenium import webdriver import time from email.heade ...

  9. opencl获取gpu信息_如果在尝试获取OpenCL gpu设备类型时,Char *语句出现问题

    我一直试图验证你的System \ n",gpus)上的哪个OpenCL平台和gpu`s are located in, and at the same time count if ther ...

  10. uniapp同步获取用户信息_微信小程序云开发教程微信小程序的API入门获取用户身份信息系列API...

    同学们大家好,我是小伊同学,上一节我们介绍了一些常用API,今天我们接着来学习一组API,那就是获取用户身份信息的API. 在微信小程序中,我们往往需要获取用户的身份信息,比如昵称.头像.性别.地区等 ...

最新文章

  1. python爬虫requests实战_Python_爬虫_requests小实战
  2. window上创建python3虚拟环境
  3. 《Swift开发实战》——第2章,第2.4节函数和闭包
  4. “接着奏乐接着舞”,大脑也是这么想的
  5. php7 passthru,认识PHP 7虚拟机
  6. 数字化转型的认识模型
  7. python装饰器使用多吗_如何理解Python装饰器?
  8. Maven项目打包成可执行Jar文件
  9. Android 强升逻辑和实现
  10. 脑电EEG代码开源分享 【2.预处理-静息态篇】
  11. 数据结构c语言版秦锋,数据结构(C语言版)黄国瑜.pdf
  12. oppo的手机上如何找回原来的小米的云便签
  13. 关于机器人创业:学术界vs工业界及中国机器人企业的机会
  14. C# base64获取图片后缀
  15. ept技术_EPT与VPID
  16. (万文)最全、最细前端面试问题总结(答题思路分析、答案解析)
  17. 201809-3-元素选择器
  18. 矢量分析 关于∇一些矢量恒等式速记法
  19. fla文件与as文件之间的绑定
  20. 男主计算机系大神甜宠小说,《蜜汁炖鱿鱼》后,又一电竞甜宠小说翻拍,男主帅气颜值直击心脏...

热门文章

  1. 收获荣誉证书,显摆一下
  2. 【前沿】凌空手势识别综述
  3. 用php做论坛头像代码,详细介绍PHP针对多用户实现头像更换代码示例
  4. HOTR: End-to-End Human-Object Interaction Detection with Transformers
  5. unity3d广东麻将算法
  6. 波特率自适应的RS-485中继器设计
  7. h5中iOS页面显示缩放问题
  8. 跟着大神学习,超写实高级影视肖像,《傲慢女爵》教程
  9. 爱情树代码的修改(MAC)
  10. tcp序列号为什么是随机的_TCP学习笔记