python如何过获取双色球信息_【编程】Python爬虫获取双色球数据
#爬虫获取双色球的全部开奖数据
#使用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爬虫获取双色球数据相关推荐
- python 获取硬盘信息_使用python获取电脑的磁盘信息方法
使用Python获取电脑的磁盘信息需要借助于第三方的模块psutil,这个模块需要自己安装,纯粹的CPython下面不具备这个功能. 在iPython交互界面中进行如下演示: 查看电脑的磁盘分区: I ...
- python获取路由器信息_使用python爬取互联网设备信息
扩大搜索范围 DNS服务器搭建好以后,需要寻找可修改的路由器目标,目标不能太多也不能太少,就从我路由器c段入手吧,65536个IP地址,使用nmap扫描,将所有开放80端口的主机找出来,然后分析结果: ...
- python模拟登录qq获取好友信息_使用Python模拟登录QQ邮箱获取QQ好友列表
最近因开发项目的需要,有一个需求,就是很多SNS网站都有的通过 Email地址 导入好友列表,不过这次要导入的不是Email 列表,而是QQ的好友列表. 实现方式: 通过google一搜,实现的方式大 ...
- python爬取本地天气信息_用Python写一个爬取中国天气网的终端版天气预报爬虫
导语 前几篇文章介绍了爬取静态网站的主要方法.今天写一个小项目实践一下.本项目可以在终端窗口查询全国3400多个区县的当日天气信息和近七天天气信息. 实现效果 [Python爬虫]写一个爬取中国天气网 ...
- 浏览器获取设备信息_一条命令获取 IE 浏览器保存网站的账号和密码信息
渗透攻击红队 一个专注于红队攻击的公众号 大家好,这里是 渗透攻击红队 的第 41 篇文章,本公众号会记录一些我学习红队攻击的复现笔记(由浅到深),不出意外每天一更 Powershell 内网渗透一直 ...
- python爬取网上租房信息_用python爬取租房网站信息的代码
自己在刚学习python时写的,中途遇到很多问题,查了很多资料,下面就是我爬取租房信息的代码: 链家的房租网站 两个导入的包 1.requests 用来过去网页内容 2.BeautifulSoup i ...
- python自动接收钉钉信息_用Python实现阿里钉钉机器人读取数据库内容自动发群通知...
from datetime importdatetimeimportjsonimporturllib.requestimportpymysql as pmsfrom apscheduler.sched ...
- python自动抓取指定信息_使用python自动转发抓取的网页信息
1.[代码][Python]代码 # -*- coding: utf-8 -*- from selenium import webdriver import time from email.heade ...
- opencl获取gpu信息_如果在尝试获取OpenCL gpu设备类型时,Char *语句出现问题
我一直试图验证你的System \ n",gpus)上的哪个OpenCL平台和gpu`s are located in, and at the same time count if ther ...
- uniapp同步获取用户信息_微信小程序云开发教程微信小程序的API入门获取用户身份信息系列API...
同学们大家好,我是小伊同学,上一节我们介绍了一些常用API,今天我们接着来学习一组API,那就是获取用户身份信息的API. 在微信小程序中,我们往往需要获取用户的身份信息,比如昵称.头像.性别.地区等 ...
最新文章
- python爬虫requests实战_Python_爬虫_requests小实战
- window上创建python3虚拟环境
- 《Swift开发实战》——第2章,第2.4节函数和闭包
- “接着奏乐接着舞”,大脑也是这么想的
- php7 passthru,认识PHP 7虚拟机
- 数字化转型的认识模型
- python装饰器使用多吗_如何理解Python装饰器?
- Maven项目打包成可执行Jar文件
- Android 强升逻辑和实现
- 脑电EEG代码开源分享 【2.预处理-静息态篇】
- 数据结构c语言版秦锋,数据结构(C语言版)黄国瑜.pdf
- oppo的手机上如何找回原来的小米的云便签
- 关于机器人创业:学术界vs工业界及中国机器人企业的机会
- C# base64获取图片后缀
- ept技术_EPT与VPID
- (万文)最全、最细前端面试问题总结(答题思路分析、答案解析)
- 201809-3-元素选择器
- 矢量分析 关于∇一些矢量恒等式速记法
- fla文件与as文件之间的绑定
- 男主计算机系大神甜宠小说,《蜜汁炖鱿鱼》后,又一电竞甜宠小说翻拍,男主帅气颜值直击心脏...