|
发表于 2019-12-24 14:39:14
|
显示全部楼层
本帖最后由 foxiangzun 于 2019-12-24 14:41 编辑
- # coding=utf-8
- '''
- 福利彩票,抓取2018年全年中奖号码
- '''
- import requests
- import time
- import random
- import openpyxl as opxl
- from lxml import etree
- class lottery() :
- def __init__(self, *avgr):
- self.saveLocation = saveLocation
- self.wb = opxl.Workbook()
- self.sheet = self.wb.active
- def getLottery(self) :
- # 设置sheet页名称
- self.sheet.title = '彩票中奖号码'
- # 为Excel当前页添加标题栏
- self.sheet.append(['开奖日期', '期号', '中奖号码'])
- # 实际地址,经过浏览器捕捉,发现是这个地址后面带上页码再加上.html
- url = r'http://kaijiang.zhcw.com/zhcw/html/ssq/list_'
- headers = {
- 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64)'
- }
- for i in range(8, 16) :
- realURL = url + str(i) + '.html'
- response = requests.get(realURL, headers = headers)
- content = etree.HTML(response.text)
- # 这里是以表格来排布,前两行是表头,无需抓取,
- # 从第三行到倒数第二行为开奖信息,这里用循环处理
- for j in range(3, 23) :
- # 初始化各信息所在的具体位置,为获取信息复用
- # 初始化临时列表,后续用作写入Excel
- label_td, tempList = 1, []
- # 获取开奖日期、期号和中奖号码的标签位置
- lotteryDatePath = "/html/body/table/tr[" + str(j) + "]/td[" + str(label_td) + "]/text()"
- dateNumPath = "/html/body/table/tr[" + str(j) + "]/td[" + str(label_td + 1) + "]/text()"
- ballNumPath = "/html/body/table/tr[" + str(j) + "]/td[" + str(label_td + 2) + "]/em/text()"
- # 获取各标签位的内容
- lotteryDate = content.xpath(lotteryDatePath)[0]
- dateNum = content.xpath(dateNumPath)[0]
- ballNum = content.xpath(ballNumPath)
- realBallNum = ' '.join(ballNum)
- # 数据临时装载,为写入Excel做准备
- tempList.append(lotteryDate)
- tempList.append(dateNum)
- tempList.append(realBallNum)
- # 写入Excel
- self.sheet.append(tempList)
- # 为防止网站禁用 IP,没抓取一页,休眠3到5秒
- time.sleep(random.randint(3, 5))
- # 保存Excel,并将其关闭
- self.wb.save(self.saveLocation)
- self.wb.close()
- del tempList
- print("Excel写入完毕!")
- if __name__ == "__main__" :
- # 设置保存路径
- saveLocation = r'C:\Users\Administrator\Desktop\彩票.xlsx'
- lc = lottery(saveLocation)
- lc.getLottery()
复制代码
怕楼主不知道逻辑,所以注释写的很啰嗦,如果网站没有封锁 IP 的风险,那么休眠那一行可以去掉,time 库和 random 库也可以不要
图片也在本楼的回复里,可以查看效果。 |
-
|