使用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)

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文件,执行脚本后,会显示如下信息:

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

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

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

原文地址:https://blog.51cto.com/14154700/2440383

时间: 2025-01-06 09:58:32

使用Python采集web质量数据到Excel表的相关文章

asp.net使用MVC4框架基于NPOI做导出数据到Excel表

NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写.NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/Excel文档进行读写操作.使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写.NPOI是构建在POI 3.x版本

使用python在WEB页面上生成EXCEL文件

来自:http://blog.sina.com.cn/s/blog_5d18f85f0101bxo7.html 近日写的一个程序需要在WEB服务器上生成EXCEL文件供用户下载,研究了一下找到了以下比较可行的实现方案,下面以web.py为例,把相关代码贴出来供大家参考: 首先需要下载生成EXCEL的模块,推荐使用xlwt import xlwt import StringIO import web urls = ( '/rim_request','rim_request', '/rim_expo

python从mysql导出数据导excel

# coding:utf8 import sys reload(sys) sys.setdefaultencoding('utf8') # author: 'zkx' # date: '2018/3/11' # Desc:从数据库中导出数据到excel数据表中 #已封装,可以直接使用,只需更改sql语句即可 import xlwt import MySQLdb def export(host,user,password,dbname,table_name,outputpath): conn =

使用Python从 MySQL写数据到Excel

直接上代码: #!/usr/bin/env python #coding:utf-8 import xlwt import MySQLdb import datetime database = MySQLdb.connect(host='192.168.1.30',user='root',passwd='123456',db='crm') #设置字符集 database.set_character_set('utf8') cursor = database.cursor() cursor.exe

[ES]Python查询ES导出数据为Excel

版本 elasticsearch==5.5.0 python==3.7 说明 用python查询es上存储的状态数据,将查询到的数据用pandas处理成excel code # -*- coding: utf-8 -*- # @Time : 2019/7/22 10:41 # @Author : Skyell Wang # @FileName: es_data_get.py from elasticsearch import Elasticsearch import pandas as pd i

导出大量数据到excel表

set_time_limit(0);error_reporting(0); // 输出Excel文件头,可把user.csv换成你要的文件名header('Content-Type: application/vnd.ms-excel');header('Content-Disposition: attachment;filename="user.csv"');header('Cache-Control: max-age=0'); $fp = fopen('/tmp/export/dat

使用NPOI方法导出数据到excel表中

使用NPOI方法导出到excel可以大量提高导出速度!步骤如下: (1)使用NPOI首先要有NPOI开发包(网上直接搜资源有的) (2)解压后把下边两个文件拷贝到自己的项目下(在bin目录下 .net4.0 下的 NPOI.dll和NPOI.xml) 我的项目结构大致如下 使用的是DAL结构 我把NPOI工具集放到了UI层 (3)添加引用(以我的项目为例:在我项目的UI点击引用--游览--然后找到刚才拷贝的两个文件 即可) (4)编写代码: 我的是一个点击事件 "导出" 前提条件就不说

利用数据库管理工具(Navicat)导出数据到Excel表中

如果只是想把数据库表中数据简单导出来,可以利用数据库管理工具中的工具 1.先查询 2.在查询出结果中全选 3.导出向导 4.选择Excel 5.选择导出地址并命名 原文地址:https://www.cnblogs.com/sanhao/p/9789232.html

数据导出excel表功能

原理主要是php代码生成excel文件,被输出内容以','隔开,自动识别逗号符隔开的内容放入excel内不同的表格内,需要换行处加上转义符\n,输出内容涉及中文的需转化编码utf-8为gbk. header("Content-type:application/vnd.ms-excel"); header("Content-Disposition:attachment;filename=pay-".time().".xls"); header('P