目前写的这些爬虫都是些静态网页,对于一些高级网页(像经过JS渲染过的页面),目前技术并不能解决,自己也是在慢慢学习过程中,如有错误,欢迎指正;

对面前端知识本人并不懂,过程中如果涉及到前端知识,也是百度而来,毕竟爬虫还是和前端页面打交道多,前端知识还是要多学习; 

此篇还是继续静态页面,更换了不同的内容,以及涉及到多个python 模块和自己二次封装的模块,个人感觉这些模块不使用在爬虫方面也是很有用的;

第一部分,封装了自带模块logging,其中使用了getpass 模块,用来记录日志的用户名,都是些简单的使用,关于注释,本来已写好,并未上传到git,导致此次上传代码没有下次注意,哈哈;

个人建议:在学习python 过程中多练习写代码,在写的过程中去理解其中的用法;

  1. #!/usr/bin/env python
  2. #coding:utf-8
  3. #author chenjisheng
  4. #date 20171129
  5. import logging
  6. import getpass
  7.  
  8. class MyLog(object):
  9. "this class will create log"
  10. def __init__(self):
  11. user = getpass.getuser()
  12. self.logger = logging.getLogger(user)
  13. self.logger.setLevel(logging.DEBUG)
  14. logFile = './progress.log'
  15. formatter = logging.Formatter(
  16. '%(asctime) -12s %(levelname)-8s %(name) -10s %(message)-12s'
  17. )
  18. '''logfile output screen and files'''
  19. logHand = logging.FileHandler(logFile)
  20. logHand.setFormatter(formatter)
  21. logHand.setLevel(logging.ERROR)
  22. logHandt = logging.StreamHandler()
  23. logHandt.setFormatter(formatter)
  24. self.logger.addHandler(logHand)
  25. self.logger.addHandler(logHandt)
  26.  
  27. '''five level and five functions '''
  28. def debug(self,msg):
  29. self.logger.debug(msg)
  30.  
  31. def info(self,msg):
  32. self.logger.info(msg)
  33.  
  34. def warn(self,msg):
  35. self.logger.warning(msg)
  36.  
  37. def error(self,msg):
  38. self.logger.error(msg)
  39.  
  40. def critical(self,msg):
  41. self.logger.critical(msg)
  42.  
  43. if __name__ == "__main__":
  44. mylog = MyLog()
  45. mylog.debug('i am debug')
  46. mylog.info('i am info')
  47. mylog.warn('i am warning')
  48. mylog.error('i am error')
  49. mylog.critical('i am critical')

第二部分:使用了re,urllib2,xlwt,bs4,sys模块;xlwt模块在之前的博客里已写过;bs4 模块大名鼎鼎,不过多解析,至于为什么用它,因为其简单,其它的爬虫模块也不会;也在学习当中;

  1. #!/usr/bin/env python
  2. #coding:utf-8
  3. """Created on 2017-11-29"""
  4.  
  5. import re
  6. import urllib2
  7. import xlwt
  8. from bs4 import BeautifulSoup
  9. from myLog import MyLog as mylog
  10. import sys
  11. reload(sys)
  12. sys.setdefaultencoding('utf8')
  13.  
  14. class DoubleColorBallItem(object):
  15. date = None
  16. order = None
  17. red1 = None
  18. red2 = None
  19. red3 = None
  20. red4 = None
  21. red5 = None
  22. red6 = None
  23. bule = None
  24. money = None
  25. firstPrize = None
  26. secondPrize = None
  27.  
  28. class GetDoubleColorBallNumber(object):
  29. """capture BallNumbers"""
  30.  
  31. def __init__(self):
  32. self.urls = []
  33. self.log = mylog()
  34. self.getUrls()
  35. self.items = self.spider(self.urls)
  36. self.pipelines(self.items,self)
  37.  
  38. def getUrls(self):
  39. URL = r'http://kaijiang.zhcw.com/zhcw/html/ssq/list_1.html'
  40. htmlContent = self.getResponseContent(URL)
  41. soup = BeautifulSoup(htmlContent,'lxml')
  42. tag = soup.find_all(re.compile('p'))[-1]
  43. # pages = tag.strong.get_text()
  44. pages = 2
  45. for i in xrange(1,int(pages)+1):
  46. url = r'http://kaijiang.zhcw.com/zhcw/html/ssq/list_'+str(i)+'.html'
  47. self.urls.append(url)
  48. self.log.info(u'append URL:%s to URLS \n'%url)
  49.  
  50. def getResponseContent(self,url):
  51. try:
  52. headers = {
  53. 'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'
  54. }
  55. req = urllib2.Request(url,headers=headers)
  56. response = urllib2.urlopen(req)
  57. except Exception,e:
  58. self.log.error(u'return datas failed URL:%s\n'%url)
  59. else:
  60. self.log.info(u'return datas successfuly URL:%s\n'%url)
  61. return response.read()
  62.  
  63. def spider(self,urls):
  64. items = []
  65. for url in urls:
  66. htmlContent = self.getResponseContent(url)
  67. soup = BeautifulSoup(htmlContent,'lxml')
  68. tags = soup.find_all('tr',attrs={})
  69. for tag in tags:
  70. if tag.find('em'):
  71. item = DoubleColorBallItem()
  72. tagTd = tag.find_all('td')
  73. item.date = tagTd[0].get_text()
  74. item.order = tagTd[1].get_text()
  75. tagEm = tagTd[2].find_all('em')
  76. item.red1 = tagEm[0].get_text()
  77. item.red2 = tagEm[1].get_text()
  78. item.red3 = tagEm[2].get_text()
  79. item.red4 = tagEm[3].get_text()
  80. item.red5 = tagEm[4].get_text()
  81. item.red6 = tagEm[5].get_text()
  82. item.bule = tagEm[6].get_text()
  83. item.money = tagTd[3].find('strong').get_text()
  84. item.firstPrize = tagTd[4].find('strong').get_text()
  85. item.secondPrize = tagTd[5].find('strong').get_text()
  86. items.append(item)
  87. self.log.info(u'get date:%s datas OK\n'%item.date)
  88. return items
  89.  
  90. def pipelines(self,items,nu):
  91. # fileName = 'DoubleBall.txt'
  92. # with open(fileName,'w') as fp:
  93. # for item in items:
  94. # 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,
  95. # item.red6,item.bule,item.firstPrize,item.secondPrize))
  96. # self.log.info(u'write date:%s OK '%item.date)
  97. W = xlwt.Workbook('utf-8')
  98. ws = W.add_sheet(u"双色球记录")
  99. # ws.col(1).width = 6666
  100. # ws.col(2).width = 3333
  101. ws.write(0,1,label=u"时间")
  102. ws.write(0,2,label=u"期号")
  103. ws.write(0,3, label=u"红色1")
  104. ws.write(0,4, label=u"红色2")
  105. ws.write(0,5, label=u"红色3")
  106. ws.write(0,6, label=u"红色4")
  107. ws.write(0,7, label=u"红色5")
  108. ws.write(0,8, label=u"红色6")
  109. ws.write(0,9, label=u"蓝色")
  110. ws.write(0,10, label=u"一等奖")
  111. ws.write(0,11, label=u"二等奖")
  112. nu = 1
  113. for item in items:
  114. ws.write(nu,1,label=item.date)
  115. ws.write(nu,2,label=item.order)
  116. ws.write(nu,3,label=item.red1)
  117. ws.write(nu,4,label=item.red2)
  118. ws.write(nu,5,label=item.red3)
  119. ws.write(nu,6,label=item.red4)
  120. ws.write(nu,7,label=item.red5)
  121. ws.write(nu,8,label=item.red6)
  122. ws.write(nu,9,label=item.bule)
  123. ws.write(nu,10,label=item.firstPrize)
  124. ws.write(nu,11,label=item.secondPrize)
  125. nu += 1
  126. W.save(u"双色球记录表.xls")
  127. if __name__ == '__main__':
  128. 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. velocity使用foreach进行遍历时$velocityCount不起作用

    把$velocityCount替换成$foreach.count 例如 #if($foreach.count != $columns.size()),#end

  2. JAVA获取六位随机数

    public static String getSixNum() { String str = "0123456789"; StringBuilder sb = new Strin ...

  3. c++设计模式概述之访问者

    代码写的不够规范,目的是为了缩短篇幅,实际中请注意. 参看: http://c.biancheng.net/view/1397.html 1.概述 类比生活中的场景,购物商场中的商品.顾客.收营员.商 ...

  4. 《Java必须知道的300个问题》读书总结

    这本书是在图书馆随便逛的时候找到的书.花了一下午看完了,感觉有用的地方不是很多,大部分都是些概念,并没有太大用途.不过里边有些东西还是可以看一看的,总结如下. Java语言基础 1.表达式3-2.6= ...

  5. 【LeetCode】270. Closest Binary Search Tree Value 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 动态规划 日期 题目地址:https://leetco ...

  6. 【LeetCode】778. Swim in Rising Water 水位上升的泳池中游泳(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/swim-in- ...

  7. 【LeetCode】725. Split Linked List in Parts 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  8. 【LeetCode】842. Split Array into Fibonacci Sequence 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  9. 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 超参数的选择 的选择 的选择 的选择 一些 ...

  10. 使用子查询获取,使用 all 关键字获取比所有“国内短线游”价格高的线路信息,按照线路类型、线路价格升序显示线路编号、线路名和价格

    查看本章节 查看作业目录 需求说明: 使用子查询获取"国内短线游"及"国内长线游"的线路信息,按照线路类型.线路价格升序显示线路编号.线路名和价格 使用 all ...