1.目标分析:

(1)网址:http://www.zhcw.com/ssq/kaijiangshuju/index.shtml?type=0

(2)查看框架的源代码:在中奖信息表格上右击,选择弹出菜单中的“查看框架的源代码”:

(3)右击下一页的链接,再次查看框架源代码,新的框架源代码是:kaijiang.zhcw.com/zhcw/html/ssq/list_2.html

(4)大致明白了,URL的变化规律了,变化的只有list.html这部分,表格中的每一行的数据都包含在一对

标签内,所以在写爬虫时只需先将标签挑选出来,然后再到其中过滤数据就可以了;

2.项目实施

(1)项目文件结构:

(2)getWinningNum.py文件内容:

#! /usr/bin/env python

#-*- coding:utf-8 -*-

import re

from bs4 import BeautifulSoup

import urllib2

from mylog import MyLog as mylog

class DoubleColorBallItem(object):

date=None #开奖日期

order=None #当年的开奖顺序

red1=None #第一个红色号码

red12=None #第二个红色号码

red3=None #第三个红色号码

red4=None #第四个红色号码

red5=None #第五个红色号码

red6=None #第六个红色号码

blue=None #蓝色号码

money=None #彩池金额

firstPrize=None #一等奖中奖人数

secondPrize=None #二等奖中奖人数

class GetDoubleColorBallNumber(object):

def __init__(self):

self.urls=[ ]

self.log=mylog()

self.getUrls()

self.items=self.spider(self.urls)

self.pipelines(self.items)

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()

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'添加URL:%s到URLS \r\n' %url)

def getResponseContent(self,url):

try:

response=urllib2.urlopen(url.encode('utf8'))

except:

self.log.error(u'python 返回 URL:%s 数据失败' %url)

else:

self.log.info(u'Python 返回URL:%s A数据成功' %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.blue=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'获取日期为:%s 的数据成功' %(item.date))

return items

def pipelines(self,items):

fileName=u'双色球.txt'.encode('GBK')

with open(fileName,'w') as fp:

for item in items:

fp.write('%s %s \t %s %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.blue,item.money,item.firstPrize,item.secondPrize))

self.log.info(u'将日期为:%s 的数据存入"%s"...' %(item.date,fileName.decode('GBK')))

if __name__ == '__main__':

GDCBN=GetDoubleColorBallNumber()

(3)mylog.py文件的内容:

#! /usr/bin/env python

#-*- coding:utf-8 -*-

import logging

import getpass

import sys

class MyLog(object):

###########类MyLog的构造函数

def __init__(self):

self.user=getpass.getuser()

self.logger=logging.getLogger(self.user)

self.logger.setLevel(logging.DEBUG)

#########日志文件名

self.logFile=sys.argv[0][0:-3]+'.log'

self.formatter=logging.Formatter('%(asctime)-12s %(levelname)-8s %(name)-10s %(message)-12s \r\n')

#########日志显示到屏幕并输出到日志文件中

self.logHand=logging.FileHandler(self.logFile,encoding='utf8')

self.logHand.setFormatter(self.formatter)

self.logHand.setLevel(logging.DEBUG)

self.logHandSt=logging.StreamHandler()

self.logHandSt.setFormatter(self.formatter)

self.logHandSt.setLevel(logging.DEBUG)

self.logger.addHandler(self.logHand)

self.logger.addHandler(self.logHandSt)

#####日志的5个级别对应以下5个函数

def debug(self,msg):

self.logger.debug(msg)

def info(self,msg):

self.logger.info(msg)

def warn(self,msg):

self.logger.warn(msg)

def error(self,msg):

self.logger.error(msg)

def critical(self,msg):

self.logger.critical(msg)

if __name__ == '__main__':

mylog=MyLog()

mylog.debug(u"I'm debug 测试中文")

mylog.info("I'm info")

mylog.warn("I'm warn")

mylog.error(u"I'm error 测试中文 ")

mylog.critical("I'm critical")

(4)运行结果:

3.结果保存到Excel中:从第三方库中安装xlwt模块,其中xlrd模块负责从Excel中读取数据,xlwt则是将数据写入到Excel中;

(2)先写一个简单的python程序测试一下,excelWrite.py:

#! /usr/bin/env python

#-*- coding:utf-8 -*-

import xlwt

if __name__ == '__main__':

book=xlwt.Workbook(encoding='utf8',style_compression=0)

sheet=book.add_sheet('dede')

sheet.write(0,0,'hstking')

sheet.write(1,1,u'中文测试'.encode('utf8'))

book.save('F:\\Python\PythonWebScraping\\PythonBeautiSoupProject\\winningNumBS4\\getWinningNum\\1.xls')

在编辑器pycharm中打开1.xls文件:

(3)编写文件sava2excel.py,和getWinningNum.py必须是在同一目录下:

#! /usr/bin/env python

#-*- coding:utf-8 -*-

import xlwt

class SaveBallDate(object):

def __init__(self,items):

self.items=items

self.run(self.items)

def run(self,items):

fileName=u'双色球.xls'.encode('GBK')

book=xlwt.Workbook(encoding='utf8')

sheet=book.add_sheet('ball',cell_overwrite_ok=True)

sheet.write(0,0,u'开奖日期'.encode('utf8'))

sheet.write(0,1,u'期号'.encode('utf8'))

sheet.write(0,2,u'红1'.encode('utf8'))

sheet.write(0,3,u'红2'.encode('utf8'))

sheet.write(0,4,u'红3'.encode('utf8'))

sheet.write(0,5,u'红4'.encode('utf8'))

sheet.write(0,6,u'红5'.encode('utf8'))

sheet.write(0,7,u'红6'.encode('utf8'))

sheet.write(0,8,u'蓝'.encode('utf8'))

sheet.write(0,9,u'销售金额'.encode('utf8'))

sheet.write(0,10,u'一等奖'.encode('utf8'))

sheet.write(0,11,u'二等奖'.encode('utf8'))

i=1

while i

item=items[i-1]

sheet.write(i,0,item.date)

sheet.write(i,1,item.order)

sheet.write(i,2,item.red1)

sheet.write(i,3,item.red2)

sheet.write(i,4,item.red3)

sheet.write(i,5,item.red4)

sheet.write(i,6,item.red5)

sheet.write(i,7,item.red6)

sheet.write(i,8,item.blue)

sheet.write(i,9,item.money)

sheet.write(i,10,item.firstPrize)

sheet.write(i,11,item.secondPrize)

i+=1

book.save(fileName)

if __name__ == '__main__':

pass

(4)修改getWinningNum.py文件:

(5)运行结果,在编辑器中打开文件双色球.xls:

python如何过获取双色球信息_2017.08.17 Python爬虫实战之BS4获取双色球中奖信息相关推荐

  1. Python可以这样学(第十季:网络爬虫实战)-董付国-专题视频课程

    Python可以这样学(第十季:网络爬虫实战)-83人已学习 课程介绍         陆续介绍和分享一些网络爬虫方面的案例,Python基础知识可以参考前面的"Python可以这样学&qu ...

  2. python网络爬虫的论文模板_Python简单网络爬虫实战—下载论文名称,作者信息(上)...

    上学期小师妹的小导师要她收集2009年到现在所有年份的某个方向的全部论文的名称.作者 小师妹看着dblp上茫茫多的论文,心生绝望,弄了一下午+一个晚上才弄好了09和10两年的 于是我自告奋勇,用pyt ...

  3. go爬虫和python爬虫哪个好_python 爬虫实战项目--爬取京东商品信息(价格、优惠、排名、好评率等)-Go语言中文社区...

    利用splash爬取京东商品信息 一.环境 window7 python3.5 pycharm scrapy scrapy-splash MySQL 二.简介 为了体验scrapy-splash 的动 ...

  4. 掌财社:python怎么爬取链家二手房的数据?爬虫实战!

    我们知道爬虫的比较常见的应用都是应用在数据分析上,爬虫作为数据分析的前驱,它负责数据的收集.今天我们以python爬取链家二手房数据为例来进行一个python爬虫实战.(内附python爬虫源代码) ...

  5. 基础爬虫实战案例之获取游戏商品数据

    文章目录 前言 一.爬虫是什么? 二.爬虫实战案例 1.引入库 2.请求网页处理 3.生成访问链接 4.读入数据到mongodb 5.获得数据 6.加入多线程 总结 前言 在想获取网站的一些数据时,能 ...

  6. 爬虫实战-爬取豆瓣读书书籍信息

    1. 豆瓣读书书籍种类列表 在下面这个URL, 我们可以获得所有的种类链接 https://book.douban.com/tag/ 如下图: 可以通过bs4和re库进行筛选, 得到所有图书种类, 结 ...

  7. Python爬虫实战—2345影视获取经典电影信息

    爬虫提前准备包 1)安装解析库lxml lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高. 命令行进行安装:pip install lxml ...

  8. python爬取ajax动态内容肯德基门店_爬虫爬取国内肯德基门店信息

    预期效果 爬取每个城市(300+城市)所有的肯德基门店信息,保存到excel中,效果如下: 代码实现 import requests import csv import json def getDat ...

  9. python+selenium爬取淘宝商品信息+淘宝自动登录——爬虫实战

    1.前言 继续学习爬虫内容,这回是以selenium模拟操作进行抓取,其中有几个需要登陆的注意事项. 2.自动登陆+查找页面 由于现在淘宝的反爬机制,需要登陆才好下一步操作.在搜索输入后页面会调入登陆 ...

最新文章

  1. python生成订单号或生成任意序列
  2. 这段AI的深情告白在外网爆火:我并非真实,从未出生,永不死亡,你能爱我吗?...
  3. python timer使用-python中timer定时器常用的两种实现方法
  4. JavaScript的数据类型---最全,最详细的数据类型,高级的工程师从数据类型开始
  5. Python Django 搭建纯净IP地址返回服务(返回访问者IP地址)
  6. 一款可视化的在线制作H5
  7. /usr/bin/ld: skipping incompatible /usr/lib/mysql/libmysqlclient.so when searching for -lmysqlclient
  8. 菜品三级分类_分类器的惊人替代品
  9. 《WebForm开发系列之控件篇》Item2 ListBox
  10. java写 excel
  11. Weka开发[11]—J48源代码介绍
  12. 一路风景之川藏线徒步笔记
  13. 小名的开源项目【EamonVenti】0.0篇 —— 学习如何搭建一个简单的SpringCloud架构,体验微服务的强大!
  14. 国美易卡的标识符和关键字是什么(国美易卡)
  15. imshow显示图像为纯白
  16. 有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中,谭浩强《c语言程序设计》第六章第四题
  17. ROW_NUMBER、RANK、DENSE_RANK的用法(1)(转)
  18. 制作ubuntu自定义系统镜像
  19. android viewpager
  20. 读心术:从零知识证明中提取「知识」——探索零知识证明系列(三)

热门文章

  1. GIS100例034—ArcGIS河流渐变效果(制图表达)
  2. 【秒杀系统】高并发编程入门学习
  3. Winrunner8,0的安装问题与解决方案;
  4. 在OpenCV里实现视频格式转换
  5. mongo数据库的各种查询语句示例(比较全的)
  6. socket 收不到netty客户端消息_Netty高性能之道
  7. 【财务_会计1_5】会计准则体系
  8. Ueditor文本回显问题
  9. nodejs基于vue 网上商城购物系统
  10. 微型计算机2010年8月下,微型计算机(2008上半年合订本)(上下)(附光盘)