目前写的这些爬虫都是些静态网页,对于一些高级网页(像经过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 爬虫爬取历年双色球开奖信息的更多相关文章

  1. python爬虫—爬取英文名以及正则表达式的介绍

    python爬虫—爬取英文名以及正则表达式的介绍 爬取英文名: 一.  爬虫模块详细设计 (1)整体思路 对于本次爬取英文名数据的爬虫实现,我的思路是先将A-Z所有英文名的连接爬取出来,保存在一个cs ...

  2. Python爬虫 - 爬取百度html代码前200行

    Python爬虫 - 爬取百度html代码前200行 - 改进版,  增加了对字符串的.strip()处理 源代码如下: # 改进版, 增加了 .strip()方法的使用 # coding=utf-8 ...

  3. 用Python爬虫爬取广州大学教务系统的成绩(内网访问)

    用Python爬虫爬取广州大学教务系统的成绩(内网访问) 在进行爬取前,首先要了解: 1.什么是CSS选择器? 每一条css样式定义由两部分组成,形式如下: [code] 选择器{样式} [/code ...

  4. 使用Python爬虫爬取网络美女图片

    代码地址如下:http://www.demodashi.com/demo/13500.html 准备工作 安装python3.6 略 安装requests库(用于请求静态页面) pip install ...

  5. Python爬虫|爬取喜马拉雅音频

    "GOOD Python爬虫|爬取喜马拉雅音频 喜马拉雅是知名的专业的音频分享平台,用户规模突破4.8亿,汇集了有声小说,有声读物,儿童睡前故事,相声小品等数亿条音频,成为国内发展最快.规模 ...

  6. python爬虫爬取内容中,-xa0,-u3000的含义

    python爬虫爬取内容中,-xa0,-u3000的含义 - CSDN博客 https://blog.csdn.net/aiwuzhi12/article/details/54866310

  7. Python爬虫爬取全书网小说,程序源码+程序详细分析

    Python爬虫爬取全书网小说教程 第一步:打开谷歌浏览器,搜索全书网,然后再点击你想下载的小说,进入图一页面后点击F12选择Network,如果没有内容按F5刷新一下 点击Network之后出现如下 ...

  8. 一个简单的python爬虫,爬取知乎

    一个简单的python爬虫,爬取知乎 主要实现 爬取一个收藏夹 里 所有问题答案下的 图片 文字信息暂未收录,可自行实现,比图片更简单 具体代码里有详细注释,请自行阅读 项目源码: # -*- cod ...

  9. python爬虫-爬取百度图片

    python爬虫-爬取百度图片(转) #!/usr/bin/python# coding=utf-8# 作者 :Y0010026# 创建时间 :2018/12/16 16:16# 文件 :spider ...

随机推荐

  1. JAVA通过经纬度获取两点之间的距离

    private static double EARTH_RADIUS = 6378.137; private static double rad(double d) { return d * Math ...

  2. vue的一些细节

    注意区别 //鼠标滚轮事件 @wheel = "demo"demo()注意执行顺序,用户滚动鼠标滚轮,触发事件执行demo()函数,函数执行完毕后,页面滚动条滚动所以,当demo( ...

  3. 【LeetCode】259. 3Sum Smaller 解题报告 (C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 二分查找 双指针 日期 题目地址:https://le ...

  4. Codeforces Round #327 (Div. 1), problem: (A) Median Smoothing

    http://codeforces.com/problemset/problem/590/A: 在CF时没做出来,当时直接模拟,然后就超时喽. 题意是给你一个0 1串然后首位和末位固定不变,从第二项开 ...

  5. 【感悟】观《BBC彩色二战纪录片》有感

    2020年7月2日到3日我看了纪录片,以下是我的一些感悟 1.作为进攻者,无论大事还是小事都需要一鼓作气做完,以免留给对手喘息的机会.(指:未消灭) 2.作为防守者,要有顽强抵抗的精神,但要保留撤退的 ...

  6. 数据结构作业——P53算法设计题(6):设计一个算法,通过一趟遍历确定长度为n的单链表中值最大的结点

    思路: 设单链表首个元素为最大值max 通过遍历元素,与最大值max作比较,将较大值附给max 输出最大值max 算法: /* *title:P53页程序设计第6题 *writer:weiyuexin ...

  7. DeepFool: a simple and accurate method to fool deep neural networks

    目录 概 主要内容 二分类模型 为线性 为一般二分类 多分类问题 仿射 为一般多分类 Moosavidezfooli S, Fawzi A, Frossard P, et al. DeepFool: ...

  8. Java基础周测一、二(50题)

    一.单选题 (共50题,250分) 1.下列选项不可作为Java语言变量名的是(    ). A. a1 B. $1 C. _1 D. 21 正确答案: D 2.有一段Java应用程序,它的类名是a1 ...

  9. 「旅游信息管理系统」 · Java Swing + MySQL 开发

    代码写得烂,写博客纯属记录! 微信公众号:BugLass 码云仓库地址:https://gitee.com/ynavc/tourism_sys 源代码及文档打包下载:https://download. ...

  10. 美和易思 - JAVA开发&移动互联网 阶段性教学效果检测考试机试试题【题目:维护洗衣店消费项数据】

    一. 语言和环境 1. 实现语言:Java 语言. 2. 环境要求:Eclipse 或 Myeclipse+MySQL. 二. 功能需求 利用 Java Swing 和 JDBC 技术维护洗衣店消费项 ...