python如何过获取双色球信息_2017.08.17 Python爬虫实战之BS4获取双色球中奖信息
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获取双色球中奖信息相关推荐
- Python可以这样学(第十季:网络爬虫实战)-董付国-专题视频课程
Python可以这样学(第十季:网络爬虫实战)-83人已学习 课程介绍 陆续介绍和分享一些网络爬虫方面的案例,Python基础知识可以参考前面的"Python可以这样学&qu ...
- python网络爬虫的论文模板_Python简单网络爬虫实战—下载论文名称,作者信息(上)...
上学期小师妹的小导师要她收集2009年到现在所有年份的某个方向的全部论文的名称.作者 小师妹看着dblp上茫茫多的论文,心生绝望,弄了一下午+一个晚上才弄好了09和10两年的 于是我自告奋勇,用pyt ...
- go爬虫和python爬虫哪个好_python 爬虫实战项目--爬取京东商品信息(价格、优惠、排名、好评率等)-Go语言中文社区...
利用splash爬取京东商品信息 一.环境 window7 python3.5 pycharm scrapy scrapy-splash MySQL 二.简介 为了体验scrapy-splash 的动 ...
- 掌财社:python怎么爬取链家二手房的数据?爬虫实战!
我们知道爬虫的比较常见的应用都是应用在数据分析上,爬虫作为数据分析的前驱,它负责数据的收集.今天我们以python爬取链家二手房数据为例来进行一个python爬虫实战.(内附python爬虫源代码) ...
- 基础爬虫实战案例之获取游戏商品数据
文章目录 前言 一.爬虫是什么? 二.爬虫实战案例 1.引入库 2.请求网页处理 3.生成访问链接 4.读入数据到mongodb 5.获得数据 6.加入多线程 总结 前言 在想获取网站的一些数据时,能 ...
- 爬虫实战-爬取豆瓣读书书籍信息
1. 豆瓣读书书籍种类列表 在下面这个URL, 我们可以获得所有的种类链接 https://book.douban.com/tag/ 如下图: 可以通过bs4和re库进行筛选, 得到所有图书种类, 结 ...
- Python爬虫实战—2345影视获取经典电影信息
爬虫提前准备包 1)安装解析库lxml lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高. 命令行进行安装:pip install lxml ...
- python爬取ajax动态内容肯德基门店_爬虫爬取国内肯德基门店信息
预期效果 爬取每个城市(300+城市)所有的肯德基门店信息,保存到excel中,效果如下: 代码实现 import requests import csv import json def getDat ...
- python+selenium爬取淘宝商品信息+淘宝自动登录——爬虫实战
1.前言 继续学习爬虫内容,这回是以selenium模拟操作进行抓取,其中有几个需要登陆的注意事项. 2.自动登陆+查找页面 由于现在淘宝的反爬机制,需要登陆才好下一步操作.在搜索输入后页面会调入登陆 ...
最新文章
- python生成订单号或生成任意序列
- 这段AI的深情告白在外网爆火:我并非真实,从未出生,永不死亡,你能爱我吗?...
- python timer使用-python中timer定时器常用的两种实现方法
- JavaScript的数据类型---最全,最详细的数据类型,高级的工程师从数据类型开始
- Python Django 搭建纯净IP地址返回服务(返回访问者IP地址)
- 一款可视化的在线制作H5
- /usr/bin/ld: skipping incompatible /usr/lib/mysql/libmysqlclient.so when searching for -lmysqlclient
- 菜品三级分类_分类器的惊人替代品
- 《WebForm开发系列之控件篇》Item2 ListBox
- java写 excel
- Weka开发[11]—J48源代码介绍
- 一路风景之川藏线徒步笔记
- 小名的开源项目【EamonVenti】0.0篇 —— 学习如何搭建一个简单的SpringCloud架构,体验微服务的强大!
- 国美易卡的标识符和关键字是什么(国美易卡)
- imshow显示图像为纯白
- 有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中,谭浩强《c语言程序设计》第六章第四题
- ROW_NUMBER、RANK、DENSE_RANK的用法(1)(转)
- 制作ubuntu自定义系统镜像
- android viewpager
- 读心术:从零知识证明中提取「知识」——探索零知识证明系列(三)
热门文章
- GIS100例034—ArcGIS河流渐变效果(制图表达)
- 【秒杀系统】高并发编程入门学习
- Winrunner8,0的安装问题与解决方案;
- 在OpenCV里实现视频格式转换
- mongo数据库的各种查询语句示例(比较全的)
- socket 收不到netty客户端消息_Netty高性能之道
- 【财务_会计1_5】会计准则体系
- Ueditor文本回显问题
- nodejs基于vue 网上商城购物系统
- 微型计算机2010年8月下,微型计算机(2008上半年合订本)(上下)(附光盘)