我最近在挖门罗币,有监控钱包数据的需求。但矿池只会保存最近24小时的数据,如果我需要查看过往记录,比如我这个月总共挖了多少,就没办法了。所以我就需要自己做一个爬虫定期抓取矿池查询页面的数据并将其保存。
24小时
这个月总共挖了多少
我使用的系统是WSL-Ubuntu18.04,自带了python3,该项目需要使用{% label success@xlrd、xlwt、xlutils%}库,如果没有安装使用以下命令安装:
python3
pip3 install xlrd xlwt xlutils
如果没有安装python3或pip3使用以下命令安装:
pip3
sudo apt-get install python3 sudo apt-get install python3-pip
因为保存excel的时候要按时间将数据排序所以需要先获取时间戳:
# coding=utf-8 import time now = int(round(time.time()*1000)) now02 = time.strftime('%m-%d %H:%M',time.localtime(now/1000))
这样now02内就包含了时间戳。
爬虫嘛,先把整个页面抓下来,然后使用正则或其他工具进行筛选数据,
import re import urllib.request url = r'https://你需要爬取的页面' #这里我就不把查询页面贴出来了,引号内链接前面必须要有http://或https:// 否则会报错 headers ={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'} #模拟浏览器 req = urllib.request.Request(url=url,headers=headers) res = urllib.request.urlopen(req) html = res.read().decode('utf-8') #将文件用utf-8编码
这里根据你需要获取的数据不同选择不一样的正则表达式,我需要的数据是一串这样的数0.00000000,连续四次中间有其他字符。(当然不全是0,可能是0-9的任何数字。
re1='.*?' # Non-greedy match on filler re2='([+-]?\\d*\\.\\d{8})(?![-+0-9\\.])'# Float 1 re3='.*?' # Non-greedy match on filler re4='([+-]?\\d*\\.\\d+)(?![-+0-9\\.])' # Float 2 re5='.*?' # Non-greedy match on filler re6='([+-]?\\d*\\.\\d+)(?![-+0-9\\.])' # Float 3 re7='.*?' # Non-greedy match on filler re8='([+-]?\\d*\\.\\d+)(?![-+0-9\\.])' # Float 4 rg = re.compile(re1+re2+re3+re4+re5+re6+re7+re8,re.IGNORECASE|re.DOTALL) m = rg.search(html) if m: #m内就是我需要的4串数字了。 float1=m.group(1) float2=m.group(2) float3=m.group(3) float4=m.group(4)
因为我要持续在一个excel内写入数据,所以需要获取它的行、列数据,以确定数据的写入位置。
import xlrd from xlrd import open_workbook data = xlrd.open_workbook('data.xls') #读取数据 page = len(data.sheets()) #获取sheet的数量 table = data.sheets()[0]#打开第一张表 nrows = table.nrows#获取总行数 ncols = table.ncols#获取总列数 h = table.nrows #将行数保存下来后面写入数据的时候用
将源文件复制到内存,然后在内存里编辑数据然后设置下列表宽度,最后保存。
rexcel = open_workbook("data.xls") # 用wlrd提供的方法读取一个excel文件 rows = rexcel.sheets()[0].nrows # 用wlrd提供的方法获得现在已有的行数 excel = copy(rexcel) # 用xlutils提供的copy方法将xlrd的对象转化为xlwt的对象 table = excel.get_sheet(0) # 用xlwt对象的方法获得要操作的sheet values = ["1"] a1=table.col(0) #设置单元格宽度 a1.width=150*20 a2=table.col(1) a2.width=150*20 a3=table.col(2) a3.width=150*20 a4=table.col(3) a4.width=150*20 a5=table.col(4) a5.width=150*20 for time1 in values: table.write(h,0,now02) # xlwt对象的写方法,参数分别是行、列、值 table.write(h,1,float1) table.write(h,2,float2) table.write(h,3,float3) table.write(h,4,float4) excel.save("data.xls") # xlwt对象的保存方法,这时便覆盖掉了原来的excel
脚本运行命令要以python3开头,python会报错。运行脚本前需要在脚本目录内新建一个data.xls,用来保存文件。
data.xls
兴趣是最好的老师,以前学习python的时候总是在数组这里感觉头大便放下了书,但是现在有一个想法在脑海里,就会想去找解决方案,所以就有了这个蜘蛛。
这代码里有很多东西我还不是很懂,但是又不是不能用,至少现在脚本能按照我想的方式正常运作。我觉得这个就很好了。
完整代码:
# coding=utf-8 import time import xlrd import xlwt import urllib.request import re from xlrd import open_workbook from xlutils.copy import copy import os now = int(round(time.time()*1000)) now02 = time.strftime('%m-%d %H:%M',time.localtime(now/1000)) url = r'https://你需要爬取的页面' #这里我就不把查询页面贴出来了,引号内链接前面必须要有http://或https:// 否则会报错 headers ={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'} req = urllib.request.Request(url=url,headers=headers) #模拟浏览器 res = urllib.request.urlopen(req) html = res.read().decode('utf-8') #将文件用utf-8编码 re1='.*?' # Non-greedy match on filler re2='([+-]?\\d*\\.\\d{8})(?![-+0-9\\.])'# Float 1 re3='.*?' # Non-greedy match on filler re4='([+-]?\\d*\\.\\d+)(?![-+0-9\\.])' # Float 2 re5='.*?' # Non-greedy match on filler re6='([+-]?\\d*\\.\\d+)(?![-+0-9\\.])' # Float 3 re7='.*?' # Non-greedy match on filler re8='([+-]?\\d*\\.\\d+)(?![-+0-9\\.])' # Float 4 rg = re.compile(re1+re2+re3+re4+re5+re6+re7+re8,re.IGNORECASE|re.DOTALL) m = rg.search(html) if m: #m内就是我需要的4串数字了。 float1=m.group(1) float2=m.group(2) float3=m.group(3) float4=m.group(4) data = xlrd.open_workbook('data.xls') #读取数据 page = len(data.sheets()) #获取sheet的数量 table = data.sheets()[0]#打开第一张表 nrows = table.nrows#获取总行数 ncols = table.ncols#获取总列数 h = table.nrows #将行数保存下来后面写入数据的时候用 rexcel = open_workbook("data.xls") # 用wlrd提供的方法读取一个excel文件 rows = rexcel.sheets()[0].nrows # 用wlrd提供的方法获得现在已有的行数 excel = copy(rexcel) # 用xlutils提供的copy方法将xlrd的对象转化为xlwt的对象 table = excel.get_sheet(0) # 用xlwt对象的方法获得要操作的sheet values = ["1"] a1=table.col(0) #设置单元格宽度 a1.width=150*20 a2=table.col(1) a2.width=150*20 a3=table.col(2) a3.width=150*20 a4=table.col(3) a4.width=150*20 a5=table.col(4) a5.width=150*20 for time1 in values: table.write(h,0,now02) # xlwt对象的写方法,参数分别是行、列、值 table.write(h,1,float1) table.write(h,2,float2) table.write(h,3,float3) table.write(h,4,float4) excel.save("data.xls") # xlwt对象的保存方法,这时便覆盖掉了原来的excel
想要清空qq空间的说说,自己手点又太慢,找到了一个简单的方法。
gitbook特别适合我,纯静态的页面并且部署十分方便。
这个路由器是我最近最失败的购物经历。
设计并构建了一个基于telegram的电子书搜索机器人
但是应该是Dash to dock的设置接管了系统的dock设置,你开启Dash to dock的时候导致出现双dock。
目录
热门标签
更多语言
站点信息