python 爬虫爬取历年双色球开奖信息
目前写的这些爬虫都是些静态网页,对于一些高级网页(像经过JS渲染过的页面),目前技术并不能解决,自己也是在慢慢学习过程中,如有错误,欢迎指正;
对面前端知识本人并不懂,过程中如果涉及到前端知识,也是百度而来,毕竟爬虫还是和前端页面打交道多,前端知识还是要多学习;
此篇还是继续静态页面,更换了不同的内容,以及涉及到多个python 模块和自己二次封装的模块,个人感觉这些模块不使用在爬虫方面也是很有用的;
第一部分,封装了自带模块logging,其中使用了getpass 模块,用来记录日志的用户名,都是些简单的使用,关于注释,本来已写好,并未上传到git,导致此次上传代码没有下次注意,哈哈;
个人建议:在学习python 过程中多练习写代码,在写的过程中去理解其中的用法;
- #!/usr/bin/env python
- #coding:utf-8
- #author chenjisheng
- #date 20171129
- import logging
- import getpass
- class MyLog(object):
- "this class will create log"
- def __init__(self):
- user = getpass.getuser()
- self.logger = logging.getLogger(user)
- self.logger.setLevel(logging.DEBUG)
- logFile = './progress.log'
- formatter = logging.Formatter(
- '%(asctime) -12s %(levelname)-8s %(name) -10s %(message)-12s'
- )
- '''logfile output screen and files'''
- logHand = logging.FileHandler(logFile)
- logHand.setFormatter(formatter)
- logHand.setLevel(logging.ERROR)
- logHandt = logging.StreamHandler()
- logHandt.setFormatter(formatter)
- self.logger.addHandler(logHand)
- self.logger.addHandler(logHandt)
- '''five level and five functions '''
- def debug(self,msg):
- self.logger.debug(msg)
- def info(self,msg):
- self.logger.info(msg)
- def warn(self,msg):
- self.logger.warning(msg)
- def error(self,msg):
- self.logger.error(msg)
- def critical(self,msg):
- self.logger.critical(msg)
- if __name__ == "__main__":
- mylog = MyLog()
- mylog.debug('i am debug')
- mylog.info('i am info')
- mylog.warn('i am warning')
- mylog.error('i am error')
- mylog.critical('i am critical')
第二部分:使用了re,urllib2,xlwt,bs4,sys模块;xlwt模块在之前的博客里已写过;bs4 模块大名鼎鼎,不过多解析,至于为什么用它,因为其简单,其它的爬虫模块也不会;也在学习当中;
- #!/usr/bin/env python
- #coding:utf-8
- """Created on 2017-11-29"""
- import re
- import urllib2
- import xlwt
- from bs4 import BeautifulSoup
- from myLog import MyLog as mylog
- import sys
- reload(sys)
- sys.setdefaultencoding('utf8')
- class DoubleColorBallItem(object):
- date = None
- order = None
- red1 = None
- red2 = None
- red3 = None
- red4 = None
- red5 = None
- red6 = None
- bule = None
- money = None
- firstPrize = None
- secondPrize = None
- class GetDoubleColorBallNumber(object):
- """capture BallNumbers"""
- def __init__(self):
- self.urls = []
- self.log = mylog()
- self.getUrls()
- self.items = self.spider(self.urls)
- self.pipelines(self.items,self)
- def getUrls(self):
- URL = r'http://kaijiang.zhcw.com/zhcw/html/ssq/list_1.html'
- htmlContent = self.getResponseContent(URL)
- soup = BeautifulSoup(htmlContent,'lxml')
- tag = soup.find_all(re.compile('p'))[-1]
- # pages = tag.strong.get_text()
- pages = 2
- for i in xrange(1,int(pages)+1):
- url = r'http://kaijiang.zhcw.com/zhcw/html/ssq/list_'+str(i)+'.html'
- self.urls.append(url)
- self.log.info(u'append URL:%s to URLS \n'%url)
- def getResponseContent(self,url):
- try:
- headers = {
- 'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'
- }
- req = urllib2.Request(url,headers=headers)
- response = urllib2.urlopen(req)
- except Exception,e:
- self.log.error(u'return datas failed URL:%s\n'%url)
- else:
- self.log.info(u'return datas successfuly URL:%s\n'%url)
- return response.read()
- def spider(self,urls):
- items = []
- for url in urls:
- htmlContent = self.getResponseContent(url)
- soup = BeautifulSoup(htmlContent,'lxml')
- tags = soup.find_all('tr',attrs={})
- for tag in tags:
- if tag.find('em'):
- item = DoubleColorBallItem()
- tagTd = tag.find_all('td')
- item.date = tagTd[0].get_text()
- item.order = tagTd[1].get_text()
- tagEm = tagTd[2].find_all('em')
- item.red1 = tagEm[0].get_text()
- item.red2 = tagEm[1].get_text()
- item.red3 = tagEm[2].get_text()
- item.red4 = tagEm[3].get_text()
- item.red5 = tagEm[4].get_text()
- item.red6 = tagEm[5].get_text()
- item.bule = tagEm[6].get_text()
- item.money = tagTd[3].find('strong').get_text()
- item.firstPrize = tagTd[4].find('strong').get_text()
- item.secondPrize = tagTd[5].find('strong').get_text()
- items.append(item)
- self.log.info(u'get date:%s datas OK\n'%item.date)
- return items
- def pipelines(self,items,nu):
- # fileName = 'DoubleBall.txt'
- # with open(fileName,'w') as fp:
- # for item in items:
- # fp.write('%s %s \t %s %s %s %s %s %s \t %s \t %s %s \n'%(item.date,item.order,item.red1,item.red2,item.red3,item.red4,item.red5,
- # item.red6,item.bule,item.firstPrize,item.secondPrize))
- # self.log.info(u'write date:%s OK '%item.date)
- W = xlwt.Workbook('utf-8')
- ws = W.add_sheet(u"双色球记录")
- # ws.col(1).width = 6666
- # ws.col(2).width = 3333
- ws.write(0,1,label=u"时间")
- ws.write(0,2,label=u"期号")
- ws.write(0,3, label=u"红色1")
- ws.write(0,4, label=u"红色2")
- ws.write(0,5, label=u"红色3")
- ws.write(0,6, label=u"红色4")
- ws.write(0,7, label=u"红色5")
- ws.write(0,8, label=u"红色6")
- ws.write(0,9, label=u"蓝色")
- ws.write(0,10, label=u"一等奖")
- ws.write(0,11, label=u"二等奖")
- nu = 1
- for item in items:
- ws.write(nu,1,label=item.date)
- ws.write(nu,2,label=item.order)
- ws.write(nu,3,label=item.red1)
- ws.write(nu,4,label=item.red2)
- ws.write(nu,5,label=item.red3)
- ws.write(nu,6,label=item.red4)
- ws.write(nu,7,label=item.red5)
- ws.write(nu,8,label=item.red6)
- ws.write(nu,9,label=item.bule)
- ws.write(nu,10,label=item.firstPrize)
- ws.write(nu,11,label=item.secondPrize)
- nu += 1
- W.save(u"双色球记录表.xls")
- if __name__ == '__main__':
- GDCBN = GetDoubleColorBallNumber()
以上部分,也是学习了别人经验,也从代码中学到了不少知识,愿本文也能给你带来灵感;
python 爬虫爬取历年双色球开奖信息的更多相关文章
- python爬虫—爬取英文名以及正则表达式的介绍
python爬虫—爬取英文名以及正则表达式的介绍 爬取英文名: 一. 爬虫模块详细设计 (1)整体思路 对于本次爬取英文名数据的爬虫实现,我的思路是先将A-Z所有英文名的连接爬取出来,保存在一个cs ...
- Python爬虫 - 爬取百度html代码前200行
Python爬虫 - 爬取百度html代码前200行 - 改进版, 增加了对字符串的.strip()处理 源代码如下: # 改进版, 增加了 .strip()方法的使用 # coding=utf-8 ...
- 用Python爬虫爬取广州大学教务系统的成绩(内网访问)
用Python爬虫爬取广州大学教务系统的成绩(内网访问) 在进行爬取前,首先要了解: 1.什么是CSS选择器? 每一条css样式定义由两部分组成,形式如下: [code] 选择器{样式} [/code ...
- 使用Python爬虫爬取网络美女图片
代码地址如下:http://www.demodashi.com/demo/13500.html 准备工作 安装python3.6 略 安装requests库(用于请求静态页面) pip install ...
- Python爬虫|爬取喜马拉雅音频
"GOOD Python爬虫|爬取喜马拉雅音频 喜马拉雅是知名的专业的音频分享平台,用户规模突破4.8亿,汇集了有声小说,有声读物,儿童睡前故事,相声小品等数亿条音频,成为国内发展最快.规模 ...
- python爬虫爬取内容中,-xa0,-u3000的含义
python爬虫爬取内容中,-xa0,-u3000的含义 - CSDN博客 https://blog.csdn.net/aiwuzhi12/article/details/54866310
- Python爬虫爬取全书网小说,程序源码+程序详细分析
Python爬虫爬取全书网小说教程 第一步:打开谷歌浏览器,搜索全书网,然后再点击你想下载的小说,进入图一页面后点击F12选择Network,如果没有内容按F5刷新一下 点击Network之后出现如下 ...
- 一个简单的python爬虫,爬取知乎
一个简单的python爬虫,爬取知乎 主要实现 爬取一个收藏夹 里 所有问题答案下的 图片 文字信息暂未收录,可自行实现,比图片更简单 具体代码里有详细注释,请自行阅读 项目源码: # -*- cod ...
- python爬虫-爬取百度图片
python爬虫-爬取百度图片(转) #!/usr/bin/python# coding=utf-8# 作者 :Y0010026# 创建时间 :2018/12/16 16:16# 文件 :spider ...
随机推荐
- velocity使用foreach进行遍历时$velocityCount不起作用
把$velocityCount替换成$foreach.count 例如 #if($foreach.count != $columns.size()),#end
- JAVA获取六位随机数
public static String getSixNum() { String str = "0123456789"; StringBuilder sb = new Strin ...
- c++设计模式概述之访问者
代码写的不够规范,目的是为了缩短篇幅,实际中请注意. 参看: http://c.biancheng.net/view/1397.html 1.概述 类比生活中的场景,购物商场中的商品.顾客.收营员.商 ...
- 《Java必须知道的300个问题》读书总结
这本书是在图书馆随便逛的时候找到的书.花了一下午看完了,感觉有用的地方不是很多,大部分都是些概念,并没有太大用途.不过里边有些东西还是可以看一看的,总结如下. Java语言基础 1.表达式3-2.6= ...
- 【LeetCode】270. Closest Binary Search Tree Value 解题报告(C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 动态规划 日期 题目地址:https://leetco ...
- 【LeetCode】778. Swim in Rising Water 水位上升的泳池中游泳(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/swim-in- ...
- 【LeetCode】725. Split Linked List in Parts 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- 【LeetCode】842. Split Array into Fibonacci Sequence 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- Differential Evolution: A Survey of the State-of-the-Art
@ 目录 概 主要内容 DE/rand/1/bin DE/?/?/? DE/rand/1/exp DE/best/1 DE/best/2 DE/rand/2 超参数的选择 的选择 的选择 的选择 一些 ...
- 使用子查询获取,使用 all 关键字获取比所有“国内短线游”价格高的线路信息,按照线路类型、线路价格升序显示线路编号、线路名和价格
查看本章节 查看作业目录 需求说明: 使用子查询获取"国内短线游"及"国内长线游"的线路信息,按照线路类型.线路价格升序显示线路编号.线路名和价格 使用 all ...