python打开网页并输入数据_使用Python登陆网站读取表格数据
近期有经常使用的数据,需要登陆到某个网站,将其中的表格数据读取出来,为了提高效率节省工作时间,决定写一个程序,使用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登陆网站读取表格数据相关推荐
- python打开浏览器怎么写_使用python调用浏览器并打开一个网址的例子
python 打开浏览器,可以做简单的刷网页的小程序.仅供学习,别用非法用途. python的webbrowser模块支持对浏览器进行一些操作,主要有以下三个方法: webbrowser.open(u ...
- python 打开exe获取窗口句柄_使用Python快速启动多个PC客户端
点击关注,我们共同每天进步一点点! 作为一枚游戏测试,日常工作的时候,经常需要同时开着多个游戏账号进行测试. 以Unity打包出来的PC客户端为例,每次都需要双击运行exe程序,等着游戏启动后,因为同 ...
- python打开软件输入消息_用Python编写一个私人助理程序,为我们起草电子邮件!...
在你的工作中是否有一些你自己经常做重复的任务?这就是编程的乐趣所在.通过一些思考和编程,您可以使您的任务自动化,并为您节省大量时间.在本文中,我们将介绍一些Python工具和技巧,让你可以创建自己的P ...
- python打开qq并登录_使用Python进行QQ批量登录的实例代码
具体代码如下所示: #coding=utf-8 __author__ = 'Eagle' import os import time import win32gui import win32api i ...
- python打开和关闭图片_使用python进行基本的图像操作与处理
原标题:使用python进行基本的图像操作与处理 前言: 与早期计算机视觉领域多数程序都是由 C/C++ 写就的情形不同.随着计算机硬件速度越来越快,研究者在考虑选择实现算法语言的时候会更多地考虑编写 ...
- python打开excel进行编辑_使用Python进行Excel文件处理
本章节选自本人著<Python Basic Tutorial>第十五章 15. Excel文件处理 15.1 引言 数据处理是Python的一大应用场景,正如我在本书之前所反复强调的,基于 ...
- python编写网页游戏脚本_用Python脚本做一些网页游戏中力所能及的自动化任务
下面是一段自动登录360传奇霸业游戏的脚本: from pymouse importPyMouseimporttimeimportwebbrowserfrom pykeyboard importPyK ...
- 用python刷网页浏览量_使用python刷文章阅读量
from bs4 import BeautifulSoup import requests import random import time # 定义变量 proxys_src = [] proxy ...
- python打开csv忽略错误_在python中读取错误的格式csv
我收到的格式错误的csv文件(无法控制生成此CSV的应用程序) CSV和第一行的 Headers 如下所示: "Start Time" "End Time" & ...
最新文章
- 皮一皮:前女友竟然说这种话...
- define 双引号 其他宏_当年宏语言不受欢迎?背后的原因你知道吗?
- myeclipse中配置spring xml自己主动提示
- win7 64 php5ts.dll,windows7 64位 php5.3安装php_mongo.dll方法
- Mysql 监控性能状态 QPS/TPS
- Java Json字符串或Json对象属性查找工具类
- /var/spool/clientmqueue/下的大文件
- linux 简单的cpu压力测试
- Struts2通配符配置
- 裸辞,在上海一点都不“难”
- 学单片机有前途还是嵌入式系统有前途?
- Java程序员辛勤工作7年被裁,背后的思考与总结
- 计算机 打印机型号编码不可用,win10系统查看打印机属性中描述不可用的解决方法...
- 计算机组成原理笔记(王道考研) 第六章:总线
- java代码审计_Java代码审计| Spring框架思路篇
- 王峻涛访谈录(三)6688是干什么的?
- Python制作的足球双人小游戏,你确定你不过来看看?
- 206. echarts的map地图入门案例
- 工业控制系统的安全建议
- 中国电力自动化行业发展态势与前景建议报告2022-2028年版