python web excel_使用Python采集web质量数据到Excel表

众所周知,Python有很对第三方模块,只要熟练应用这些模块即可完成各种任务,在开始采集数据之前需要存在一个目标站点,然后使用Python脚本进行质量数据采集。探测web质量需要用到Python的pycurl模块,它可以获取HTTP请求的状态码,DNS解析时间、建立连接时间、传输结束总时间,下载数据包大小,HTTP头部大小、平均下载速度等参数。从这些参数中可以了解web的服务质量如何,然后进行优化等操作。将获取的数据写到Excel表格中,这里使用的是Python的xlsxwrite模块,实现的思路是将获取的数据保存到一个文件里面,然后再去创建一个Excel表,将数据写入到表格中然后绘制图表,以此类推,文件里的数据会追加,之后创建的Excel表会被完全覆盖,当然创建Excel表格的模块会很多,这里不再细说。

Python脚本编写前的准备:

下载pycurl模块,直接双击安装即可。

xlsxwriter使用pip命令安装,此处需要注意环境变量是否配置。

1、由于pycurl是下载下来直接安装的,这里就不写了,比较简单。

2、安装xlsxwriter模块(需可连接Internet)

e0c883c91976b79b6f85b673e9506f4f.png

3、采集数据的脚本如下:

# _._ coding:utf-8 _._

import os,sys

import pycurl

import xlsxwriter

URL="www.baidu.com" #探测目标的url,需要探测哪个目标,这里改哪个即可

c = pycurl.Curl() #创建一个curl对象

c.setopt(pycurl.URL, URL) #定义请求的url常量

c.setopt(pycurl.CONNECTTIMEOUT, 10) #定义请求连接的等待时间

c.setopt(pycurl.TIMEOUT, 10) #定义请求超时时间

c.setopt(pycurl.NOPROGRESS, 1) #屏蔽下载进度条

c.setopt(pycurl.FORBID_REUSE, 1) #完成交互后强制断开连接,不重用

c.setopt(pycurl.MAXREDIRS, 1) #指定HTTP重定向的最大数为1

c.setopt(pycurl.DNS_CACHE_TIMEOUT, 30)

#创建一个文件对象,以’wb’方式打开,用来存储返回的http头部及页面内容

indexfile = open(os.path.dirname(os.path.realpath(__file__))+"/content.txt","wb")

c.setopt(pycurl.WRITEHEADER, indexfile) #将返回的http头部定向到indexfile文件

c.setopt(pycurl.WRITEDATA, indexfile) #将返回的html内容定向到indexfile文件

c.perform()

NAMELOOKUP_TIME = c.getinfo(c.NAMELOOKUP_TIME) #获取DNS解析时间

CONNECT_TIME = c.getinfo(c.CONNECT_TIME) #获取建立连接时间

TOTAL_TIME = c.getinfo(c.TOTAL_TIME) #获取传输的总时间

HTTP_CODE = c.getinfo(c.HTTP_CODE) #获取HTTP状态码

SIZE_DOWNLOAD = c.getinfo(c.SIZE_DOWNLOAD) #获取下载数据包大小

HEADER_SIZE = c.getinfo(c.HEADER_SIZE) #获取HTTP头部大小

SPEED_DOWNLOAD=c.getinfo(c.SPEED_DOWNLOAD) #获取平均下载速度

print u"HTTP状态码: %s" %(HTTP_CODE) #输出状态码

print u"DNS解析时间: %.2f ms" %(NAMELOOKUP_TIME*1000) #输出DNS解析时间

print u"建立连接时间: %.2f ms" %(CONNECT_TIME*1000) #输出建立连接时间

print u"传输结束总时间: %.2f ms" %(TOTAL_TIME*1000) #输出传输结束总时间

print u"下载数据包大小: %d bytes/s" %(SIZE_DOWNLOAD) #输出下载数据包大小

print u"HTTP头部大小: %d byte" %(HEADER_SIZE) #输出HTTP头部大小

print u"平均下载速度: %d bytes/s" %(SPEED_DOWNLOAD) #输出平均下载速度

indexfile.close() #关闭文件

c.close() #关闭curl对象

f = file('chart.txt','a') #打开一个chart.txt文件,以追加的方式

f.write(str(HTTP_CODE)+','+str(NAMELOOKUP_TIME*1000)+','+str(CONNECT_TIME*1000)+','+str(TOTAL_TIME*1000)+','+str(SIZE_DOWNLOAD/1024)+','+str(HEADER_SIZE)+','+str(SPEED_DOWNLOAD/1024)+'\n') #将上面输出的结果写入到chart.txt文件

f.close() #关闭chart.txt文件

workbook = xlsxwriter.Workbook('chart.xlsx') #创建一个chart.xlsx的excel文件

worksheet = workbook.add_worksheet() #创建一个工作表对象,默认为Sheet1

chart = workbook.add_chart({'type': 'column'}) #创建一个图表对象

title = [URL , u' HTTP状态码',u' DNS解析时间',u' 建立连接时间',u' 传输结束时间',u' 下载数据包大小',u' HTTP头部大小',u' 平均下载速度'] #定义数据表头列表

format=workbook.add_format() #定义format格式对象

format.set_border(1) #定义format对象单元格边框加粗(1像素)的格式

format_title=workbook.add_format() #定义format_title格式对象

format_title.set_border(1) #定义format_title对象单元格边框加粗(1像素)的格式

format_title.set_bg_color('#00FF00') #定义format_title对象单元格背景颜色为’#cccccc’

format_title.set_align('center') #定义format_title对象单元格居中对齐的格式

format_title.set_bold() #定义format_title对象单元格内容加粗的格式

worksheet.write_row(0, 0,title,format_title) #将title的内容写入到第一行

f = open('chart.txt','r') #以只读的方式打开chart.txt文件

line = 1 #定义变量line等于1

for i in f: #开启for循环读文件

head = [line] #定义变量head等于line

lineList = i.split(',') #将字符串转化为列表形式

lineList = map(lambda i2:int(float(i2.replace("\n", ''))), lineList) #将列表中的最后\n删除,将小数点后面的数字删除,将浮点型转换成整型

lineList = head + lineList #两个列表相加

worksheet.write_row(line, 0, lineList, format) #将数据写入到execl表格中

line += 1

average = [u'平均值', '=AVERAGE(B2:B' + str((line - 1)) +')', '=AVERAGE(C2:C' + str((line - 1)) +')', '=AVERAGE(D2:D' + str((line - 1)) +')', '=AVERAGE(E2:E' + str((line - 1)) +')', '=AVERAGE(F2:F' + str((line - 1)) +')', '=AVERAGE(G2:G' + str((line - 1)) +')', '=AVERAGE(H2:H' + str((line - 1)) +')'] #求每一列的平均值

worksheet.write_row(line, 0, average, format) #在最后一行数据下面写入平均值

f.close() #关闭文件

def chart_series(cur_row, line): #定义一个函数

chart.add_series({

'categories': '=Sheet1!$B$1:$H$1', #将要输出的参数作为图表数据标签(X轴)

'values': '=Sheet1!$B$'+cur_row+':$H$'+cur_row, #获取B列到H列的数据

'line': {'color': 'black'}, #线条颜色定义为black

'name': '=Sheet1!$A'+ cur_row, #引用业务名称为图例项

})

for row in range(2, line + 1): #从第二行开始到最后一次取文本中的行的数据系列函数调用

chart_series(str(row), line)

chart.set_size({'width':876,'height':287}) #定义图表的宽度及高度

worksheet.insert_chart(line + 2, 0, chart) #在最后一行数据下面的两行处插入图表

workbook.close() #关闭execl文档

4、运行脚本后,会在脚本所在的目录下产生三个文件,两个是txt文本文件,一个是Excel文件,执行脚本后,会显示如下信息:

e3e534fcace0a4f7b23e32a7ca80dc51.png

5、当前目录下产生的文件如下:

04090a36a9be7d3b45172f5121fdd2f7.png

其中,两个txt格式的文件都是为了给Excel做铺垫的,所以可以选择性忽略即可,主要是看Excel中的数据。Excel中的数据如下(以下是执行6次脚本后的显示结果,也就是说探测了6次):

0e822758c6e776fe0f6d18fe1db96c13.png

———————— 本文至此结束,感谢阅读 ————————

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值