近期有经常使用的数据,需要登陆到某个网站,将其中的表格数据读取出来,为了提高效率节省工作时间,决定写一个程序,使用Python自动登陆到该网站然后将某日(参数)的数据读取并存放于excel表格中。

1登陆网站

通过IE等浏览器登陆到一个网站比较简单,输入账号、密码,点击确定就登陆到了一个网站,但是如果想实现自动化,就必须得通过http协议与服务器进行通信。常见的http协议工具有curl,由于curl使用比较麻烦,得自已处理像cookie之类的细节,这里就直接使用Python的urllib库。

首先使用wireShark抓包工具,分析登陆过程中传输的数据,登陆网站时是将用户名和密码(通常为MD5加密的密码)post到一个目标页面进行处理,如果用户名和密码正确,就会redirect到成功页面。登陆成功后,返回的header中包括一个cookie,必须对该cookie正确处理,才能正常访问登陆成功后的网站内容。

import urllib

import urllib2

import cookielib

from bs4 import BeautifulSoup

#登陆时检验账户的页面

auth_url = ‘http://localhost/check.php’

#所需数据的页面

data_url = ‘ http://localhost/data.php’

#用户名和密码

para={“name”:”user”,”password”:123}

#对参数进行编码(常用于汉字)

post_data=urllib.urlencode(para)

#自动处理cookie的类

cookieJar=cookielib.CookieJar()

opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar))

req=urllib2.Request(auth_url,post_data)

result = opener.open(req)

到此,就算登陆成功并保存登陆后的cookie了,为了以防万一,可以打印result.status和result.reason,如果一功正常,那么result.status就是200,result.reason就是OK。

2提供参数访问某页面

上一步已经登陆成功,根据参数访问数据页面,也是要将数据提交到一个具体的页面,通过观察数据的传输,可以发现要传递的参数。

para={“date”:”2015-11-10”}

post_data=urllib.urlencode(para)

post_data=urllib.urlencode(post_data)

result = opener.open(data_url +”?”+post_data)

到此,通过参数就能打开具体的数据页面了,如果还不放心,同上面一样,打印result.status和result.reason,看返回的结果。

3解析网页中表格的数据

目标页面比较简单,就一个表格(使用的是传统的table标签,而不是div),为了顺利得到里面的数据,比如第几行第几列,那么就得使用解析html的工具,网友推荐的是BeautifulSoup这个包,利用这个包来分析html文档的树形结构,很容易取得页面的某个数据。前面已经导入了这个包,登陆成功,并且提交参数打开了所需数据的页面,现在就对这个页面进行解析:

#目标页面是GB2312编码,而Python默认是UTF-8的编码,所以要指定编码

soup = BeautifulSoup(result.read(), ‘html.parser’,from_encoding=’gb2312′)

dataDict={}    #用于存放读取数据的字典

iRow=1       #用于忽略第一行标题行的内容

for item in soup.find_all(‘tr’):

if iRow!=1:

if item.contents[1] not in list(dataDict): #第一列为姓名不能重复

dataDict[item.contents[1]]= (item.contents[2], item.contents[3])

iRow=iRow+1

实战中发现,item.contents里面带的还有

标签,显然不是所想要的,因此需要将这里的html标签去掉,直接自定义一个函数就满足需要了:

def myReplace(data=None):

dataStr=””

if data is None:

print “Error!”

else:

for i in data:

if i not in (‘’,’t’,’d’,’/’):

dataStr=dataStr+i

return dataStr.strip()

至此,表格中所有行的第一、二、三列都存入dataDict字典中,其中第一列为姓名,比较重要,也不重复,所以当key,等待写入excel表格中。

4写入excel中

读取并写入excel表格,网上有很多介绍的包,比如xlrd/xlwt/openpyxl,实战中发现前两个包一个只能读一个只能写,即使有xlutils来连接这两个包,但还是不方便;openpyxl能读能写就跟vba一样,但是生成的表格电脑上看正常看,手机上不知道为什么打不开(最终要在手机上看),所以最终使用win32com包通过com的方式调用excel,一切正常:

#最前面别忘了导入下面的两个包:

import win32com.client

from win32com.client import Dispatch

#操作excel的类网上是现成的,这里就不复制代码了,类的名字是easyExcel,复制下来直接使用,会比较省事:

#打开模板(已经做好了格式,写好了表头,第一列是姓名)

xls = easyExcel(‘template.xlsx’)

for i in range(2,28):  #第一行为标题,从第二行开始写入;第一列是姓名,因此数据不能错行。

xls.setCell(u’Sheet1′,i,1, dataDict [xls.getCell(u’Sheet1′,i,1)][0])

xls.setCell(u’Sheet1′,i,2, dataDict [xls.getCell(u’Sheet1′,i,1)][1])

xls.setCell(u’Sheet1′,i,3 ,dataDict [xls.getCell(u’Sheet1′,i,1)][2])

xls.save(newfilename) #另存为新的文件

xls.close()

最后一切顺利,将数据成功读取并保存到了excel文件中。

python打开网页并输入数据_使用Python登陆网站读取表格数据相关推荐

  1. python打开浏览器怎么写_使用python调用浏览器并打开一个网址的例子

    python 打开浏览器,可以做简单的刷网页的小程序.仅供学习,别用非法用途. python的webbrowser模块支持对浏览器进行一些操作,主要有以下三个方法: webbrowser.open(u ...

  2. python 打开exe获取窗口句柄_使用Python快速启动多个PC客户端

    点击关注,我们共同每天进步一点点! 作为一枚游戏测试,日常工作的时候,经常需要同时开着多个游戏账号进行测试. 以Unity打包出来的PC客户端为例,每次都需要双击运行exe程序,等着游戏启动后,因为同 ...

  3. python打开软件输入消息_用Python编写一个私人助理程序,为我们起草电子邮件!...

    在你的工作中是否有一些你自己经常做重复的任务?这就是编程的乐趣所在.通过一些思考和编程,您可以使您的任务自动化,并为您节省大量时间.在本文中,我们将介绍一些Python工具和技巧,让你可以创建自己的P ...

  4. python打开qq并登录_使用Python进行QQ批量登录的实例代码

    具体代码如下所示: #coding=utf-8 __author__ = 'Eagle' import os import time import win32gui import win32api i ...

  5. python打开和关闭图片_使用python进行基本的图像操作与处理

    原标题:使用python进行基本的图像操作与处理 前言: 与早期计算机视觉领域多数程序都是由 C/C++ 写就的情形不同.随着计算机硬件速度越来越快,研究者在考虑选择实现算法语言的时候会更多地考虑编写 ...

  6. python打开excel进行编辑_使用Python进行Excel文件处理

    本章节选自本人著<Python Basic Tutorial>第十五章 15. Excel文件处理 15.1 引言 数据处理是Python的一大应用场景,正如我在本书之前所反复强调的,基于 ...

  7. python编写网页游戏脚本_用Python脚本做一些网页游戏中力所能及的自动化任务

    下面是一段自动登录360传奇霸业游戏的脚本: from pymouse importPyMouseimporttimeimportwebbrowserfrom pykeyboard importPyK ...

  8. 用python刷网页浏览量_使用python刷文章阅读量

    from bs4 import BeautifulSoup import requests import random import time # 定义变量 proxys_src = [] proxy ...

  9. python打开csv忽略错误_在python中读取错误的格式csv

    我收到的格式错误的csv文件(无法控制生成此CSV的应用程序) CSV和第一行的 Headers 如下所示: "Start Time" "End Time" & ...

最新文章

  1. 皮一皮:前女友竟然说这种话...
  2. define 双引号 其他宏_当年宏语言不受欢迎?背后的原因你知道吗?
  3. myeclipse中配置spring xml自己主动提示
  4. win7 64 php5ts.dll,windows7 64位 php5.3安装php_mongo.dll方法
  5. Mysql 监控性能状态 QPS/TPS
  6. Java Json字符串或Json对象属性查找工具类
  7. /var/spool/clientmqueue/下的大文件
  8. linux 简单的cpu压力测试
  9. Struts2通配符配置
  10. 裸辞,在上海一点都不“难”
  11. 学单片机有前途还是嵌入式系统有前途?
  12. Java程序员辛勤工作7年被裁,背后的思考与总结
  13. 计算机 打印机型号编码不可用,win10系统查看打印机属性中描述不可用的解决方法...
  14. 计算机组成原理笔记(王道考研) 第六章:总线
  15. java代码审计_Java代码审计| Spring框架思路篇
  16. 王峻涛访谈录(三)6688是干什么的?
  17. Python制作的足球双人小游戏,你确定你不过来看看?
  18. 206. echarts的map地图入门案例
  19. 工业控制系统的安全建议
  20. 中国电力自动化行业发展态势与前景建议报告2022-2028年版

热门文章

  1. Premiere 素材预览与基本剪辑
  2. 第一本十五章上级2注册账号
  3. 财务计算机专业英文怎么说,财务与计算机英文简历
  4. 计算机体系结构 第七章 网络
  5. 8、接口与面向接口编程
  6. NewstartHA 配置技巧
  7. access 升迁 mysql_随说秋色园从Access升迁到MSSQL过程
  8. 编写一个能求解各种柱体表面积和体积的程序
  9. 将jar安装到本地mvn仓库
  10. 《时代》2022年全球最具影响力100家公司榜单公布,防弹少年团、亚马逊新CEO登上封面 | 美通社头条...