#-*- coding:utf-8 -*-
import gzip
import re
import http.cookiejar
import urllib.request
import urllib.parse
import xlwt
import time,os def saveexcel(flow,filename,coding='gbk'):
#flow 需要转换为excel的里面,格式为双层列表
#coding excel页面编码
try:
workbook = xlwt.Workbook(encoding=coding)
sheet = workbook.add_sheet('Sheet1')
for row,rowdata in enumerate(flow):
for col,val in enumerate(rowdata):
sheet.write(row,col,val.strip(),style = xlwt.Style.default_style)
excelname = '\\%s.xls'%filename
workbook.save(excelname)
return excelname except Exception as e:
if hasattr(e,"code"):
print ('excel写入失败,错误原因' +str(e.code))
if hasattr(e,"reason"):
print ('excel写入失败,错误原因' +str(e.reason))
return None #从指定页面中取表单参数
def getParm(data,parm):
cer = re.compile('name="'+parm+'".* value="(.*?)"', flags = 0)
strlist = cer.findall(data) if strlist:
return strlist[0]
else:
return None def getOpener():
#自动设置COOKIER
# deal with the Cookies
print( '正在设置cookie')
cj = http.cookiejar.CookieJar()
pro = urllib.request.HTTPCookieProcessor(cj)
opener = urllib.request.build_opener(pro, urllib.request.HTTPHandler)
urllib.request.install_opener(opener)
print( '设置cookie成功')
return opener header = {
'Connection': 'Keep-Alive',
'Accept': 'text/html, application/xhtml+xml, */*',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko'
} url = 'http://115.231.58.130:8021/Default.aspx'
header['Referer']='http://115.231.58.130:8021/'
#1、设置Cookie
opener = getOpener() ##2、初始化数据开始
request = urllib.request.Request(url)
try:
html = urllib.request.urlopen(request).read()
#取表单参数
EVENTVALIDATION = getParm(html.decode('gbk'),'__EVENTVALIDATION')
VIEWSTATEGENERATOR = getParm(html.decode('gbk'),'__VIEWSTATEGENERATOR')
VIEWSTATE = getParm(html.decode('gbk'),'__VIEWSTATE')
btnsubmit = getParm(html.decode('gbk'),'sbtnSubmit') except urllib.request.URLError as e:
if hasattr(e,"code"):
print ('请求页面失败,请检查网络设置,错误原因' +str(e.code))
if hasattr(e,"reason"):
print ('请求页面失败,请检查网络设置,错误原因' +str(e.reason))
#取表单参数结束 id = '***'
password = '***'
postDict = {
'LoginID':id,
'Pwd':password,
'__EVENTVALIDATION':EVENTVALIDATION,
'__VIEWSTATEGENERATOR':VIEWSTATEGENERATOR,
'__VIEWSTATE':VIEWSTATE,
'btnSubmit':btnsubmit
}
postData = urllib.parse.urlencode(postDict).encode(encoding='UTF8') ##3、正式登录
request = urllib.request.Request(url, postData,headers=header)
try:
response = urllib.request.urlopen(request)
data = response.read()
except urllib.request.URLError as e:
if hasattr(e,"code"):
print ('页面加载失败,请检查网络及账号设置,错误原因' +str(e.code))
if hasattr(e,"reason"):
print ('页面加载失败,请检查网络及账号设置,错误原因' +str(e.reason)) #登录结束
print('login:',data.decode('gbk')) ##4 进入产品搜索界面进行数据提取 posturl= 'http://115.231.58.130:8021/Search/ProductFlow.aspx'
request = urllib.request.Request(posturl)
try:
html = urllib.request.urlopen(request).read()
#取表单参数
EVENTVALIDATION = getParm(html.decode('gbk'),'__EVENTVALIDATION')
VIEWSTATEGENERATOR = getParm(html.decode('gbk'),'__VIEWSTATEGENERATOR')
VIEWSTATE = getParm(html.decode('gbk'),'__VIEWSTATE')
#btnsearch = getParm(html.decode('gbk'),'btnSearcht')
except urllib.request.URLError as e:
if hasattr(e,"code"):
print ('请求页面失败,请检查网络设置,错误原因' +str(e.code))
if hasattr(e,"reason"):
print ('请求页面失败,请检查网络设置,错误原因' +str(e.reason)) postDict['__EVENTTARGET']=''
postDict['__EVENTARGUMENT']=''
postDict['__EVENTVALIDATION']=EVENTVALIDATION
postDict['__VIEWSTATEGENERATOR']=VIEWSTATEGENERATOR
postDict['__VIEWSTATE']=VIEWSTATE
postDict['PName']=''
postDict['PID']=''
postDict['txtStartDate']='2016-01-01'
postDict['txtEndDate']='2016-01-31'
postDict['ConvertToExcel.x']=''
postDict['ConvertToExcel.y']=''
postDict['btnSearch']=''
postData = urllib.parse.urlencode(postDict).encode(encoding='UTF8') print( '搜索页面数据获取成功,正在抓取流向数据...') ###登录搜索页面
request = urllib.request.Request(posturl, postData,headers=header)
try:
response = urllib.request.urlopen(request)
data = response.readlines()
except urllib.request.URLError as e:
if hasattr(e,"code"):
print ('页面加载失败,请检查网络及账号设置,错误原因' +str(e.code))
if hasattr(e,"reason"):
print ('页面加载失败,请检查网络及账号设置,错误原因' +str(e.reason))
print( '流向抓取成功,正在保存为excel...')
print('search:',data)
##5 保存为excel workbook = xlwt.Workbook(encoding='gbk')
sheet = workbook.add_sheet('Sheet1')
for row,rowdata in enumerate(data):
rowdata_list = rowdata.decode('gbk').split('\t')
for col,val in enumerate(rowdata_list):
sheet.write(row,col,val,style = xlwt.Style.default_style) ntime = time.strftime('%Y%m%d%H%M%S')
excelname = ntime+'%s.xls'%'宁波宝瑞达'
workbook.save(excelname)
print( 'excel导出成功,请查看程序目录下%s文件。'%excelname)

PYTHON流向下载的更多相关文章

  1. python爬虫下载文件

    python爬虫下载文件 下载东西和访问网页差不多,这里以下载我以前做的一个安卓小游戏为例 地址为:http://hjwachhy.site/game/only_v1.1.1.apk 首先下载到内存 ...

  2. Python package下载中遇到ReadTimeoutError: HTTPSConnectionPool?

    问题描述: Python package下载中遇到ReadTimeoutError: HTTPSConnectionPool? 问题解决: 方法1:继续重复下载 pip install virtual ...

  3. python大法好——python的下载与安装、第一个程序

    吃够了java的苦,所以python好. 打今天起,要走python了. 首先呢,学习python需要python环境.和一款得心应手的集成开发环境. python环境下载:https://mirro ...

  4. 用Python批量下载DACC的MODIS数据

    本人初次尝试用Python批量下载DACC的MODIS数据,记下步骤,提醒自己,数据还在下载,成功是否未知,等待结果中...... 若有大佬发现步骤有不对之处,望指出,不胜感激. 1.下载Python ...

  5. Python爬虫下载Bilibili番剧弹幕

    本文绍如何利用python爬虫下载bilibili番剧弹幕. 准备: python3环境 需要安装BeautifulSoup,selenium包 phantomjs 原理: 通过aid下载bilibi ...

  6. Python 的下载安装

    学习Python牛逼的教程: http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000,本文 ...

  7. 以下三种下载方式有什么不同?如何用python模拟下载器下载?

    问题始于一个链接https://i1.pixiv.net/img-zip-...这个链接在浏览器打开,会直接下载一个不完整的zip文件 但是,使用下载器下载却是完整文件 而当我尝试使用python下载 ...

  8. python版本下载时时,官方目录web-based与executable和embeddable 的区别

    背景:安装python时不知道选择哪个版本以及他们之间的意思. 1.X86和X86-64的区别:系統是32 bit 的版本还是 64bit 的 2.web-based ,executable , em ...

  9. python脚本下载 Google Driver 文件

    使用python脚本下载 Google Driver 文件 import yaml import sys import requests import os import re import tarf ...

随机推荐

  1. 警告Conversion specifies type'int' but the argument has type'size_t'

    代码: #import<Foundation/Foundation.h> int main(int argc,const char * argv[]){ const char *words ...

  2. js常用函数和常用技巧

    学习和工作的过程中总结的干货,包括常用函数.常用js技巧.常用正则表达式.git笔记等.为刚接触前端的童鞋们提供一个简单的查询的途径,也以此来缅怀我的前端学习之路. PS:此文档,我会持续更新. Aj ...

  3. easyui numberbox precision属性

    //设置easyui numbox 最小值为0,保留2为小数 <input id="payPrice" type="text" name="pa ...

  4. 【OpenGL4.0】GLSL渲染语言入门与VBO、VAO使用:绘制一个三角形 【转】

    http://blog.csdn.net/xiajun07061225/article/details/7628146 以前都是用Cg的,现在改用GLSL,又要重新学,不过两种语言很多都是相通的. 下 ...

  5. java 通过流的方式读取本地图片并显示在jsp 页面上(类型以jpg、png等结尾的图片)

    Java代码: File filePic = new File(path+"1-ab1.png"); if(filePic.exists()){ FileInputStream i ...

  6. Java程序猿修炼之道 之 Logging(3/3) - 怎么分析Log

    1. 说明 作为一个程序猿我们常常要做一件事情:获取某个Log文件,从当中找出自己想要的信息. 本文总结了我在工作中使用了哪些工具来分析Log文件获取我想要的信息,我近期几年的工作环境都是server ...

  7. 我的MAC可能在设置环境变量的时候设置错了,现在整个MAC的vi,ls等命令都执行不了了。

    1,在命令行中输入export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin这样可以保证命令行命令暂时可以使用.命令执行完之后先不要关闭终端或者c ...

  8. elasticsearch 基础性操作

    1 基础概念 Elasticsearch是一个近实时的系统,从你写入数据到数据可以被检索到,一般会有1秒钟的延时.Elasticsearch是基于Lucene的,Lucene的读写是两个分开的句柄,往 ...

  9. eclipse maven项目导入Intellij问题处理

    1.maven打包编译时后台一直输出警告信息 [WARNING] File encoding has not been set, using platform encoding GBK, i.e. b ...

  10. Sublime Text 3 文档

    中文版:http://feliving.github.io/Sublime-Text-3-Documentation/ 英文版:http://www.sublimetext.com/docs/3/