百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

使用Python登陆网站读取表格数据

toyiye 2024-06-24 19:29 11 浏览 0 评论

近期有经常使用的数据,需要登陆到某个网站,将其中的表格数据读取出来,为了提高效率节省工作时间,决定写一个程序,使用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里面带的还有<td>标签,显然不是所想要的,因此需要将这里的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文件中。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码