1. #-*- coding:utf-8 -*-
  2. import gzip
  3. import re
  4. import http.cookiejar
  5. import urllib.request
  6. import urllib.parse
  7. import xlwt
  8. import time,os
  9.  
  10. def saveexcel(flow,filename,coding='gbk'):
  11. #flow 需要转换为excel的里面,格式为双层列表
  12. #coding excel页面编码
  13. try:
  14. workbook = xlwt.Workbook(encoding=coding)
  15. sheet = workbook.add_sheet('Sheet1')
  16. for row,rowdata in enumerate(flow):
  17. for col,val in enumerate(rowdata):
  18. sheet.write(row,col,val.strip(),style = xlwt.Style.default_style)
  19. excelname = '\\%s.xls'%filename
  20. workbook.save(excelname)
  21. return excelname
  22.  
  23. except Exception as e:
  24. if hasattr(e,"code"):
  25. print ('excel写入失败,错误原因' +str(e.code))
  26. if hasattr(e,"reason"):
  27. print ('excel写入失败,错误原因' +str(e.reason))
  28. return None
  29.  
  30. #从指定页面中取表单参数
  31. def getParm(data,parm):
  32. cer = re.compile('name="'+parm+'".* value="(.*?)"', flags = 0)
  33. strlist = cer.findall(data)
  34.  
  35. if strlist:
  36. return strlist[0]
  37. else:
  38. return None
  39.  
  40. def getOpener():
  41. #自动设置COOKIER
  42. # deal with the Cookies
  43. print( '正在设置cookie')
  44. cj = http.cookiejar.CookieJar()
  45. pro = urllib.request.HTTPCookieProcessor(cj)
  46. opener = urllib.request.build_opener(pro, urllib.request.HTTPHandler)
  47. urllib.request.install_opener(opener)
  48. print( '设置cookie成功')
  49. return opener
  50.  
  51. header = {
  52. 'Connection': 'Keep-Alive',
  53. 'Accept': 'text/html, application/xhtml+xml, */*',
  54. 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko'
  55. }
  56.  
  57. url = 'http://115.231.58.130:8021/Default.aspx'
  58. header['Referer']='http://115.231.58.130:8021/'
  59. #1、设置Cookie
  60. opener = getOpener()
  61.  
  62. ##2、初始化数据开始
  63. request = urllib.request.Request(url)
  64. try:
  65. html = urllib.request.urlopen(request).read()
  66. #取表单参数
  67. EVENTVALIDATION = getParm(html.decode('gbk'),'__EVENTVALIDATION')
  68. VIEWSTATEGENERATOR = getParm(html.decode('gbk'),'__VIEWSTATEGENERATOR')
  69. VIEWSTATE = getParm(html.decode('gbk'),'__VIEWSTATE')
  70. btnsubmit = getParm(html.decode('gbk'),'sbtnSubmit')
  71.  
  72. except urllib.request.URLError as e:
  73. if hasattr(e,"code"):
  74. print ('请求页面失败,请检查网络设置,错误原因' +str(e.code))
  75. if hasattr(e,"reason"):
  76. print ('请求页面失败,请检查网络设置,错误原因' +str(e.reason))
  77. #取表单参数结束
  78.  
  79. id = '***'
  80. password = '***'
  81. postDict = {
  82. 'LoginID':id,
  83. 'Pwd':password,
  84. '__EVENTVALIDATION':EVENTVALIDATION,
  85. '__VIEWSTATEGENERATOR':VIEWSTATEGENERATOR,
  86. '__VIEWSTATE':VIEWSTATE,
  87. 'btnSubmit':btnsubmit
  88. }
  89. postData = urllib.parse.urlencode(postDict).encode(encoding='UTF8')
  90.  
  91. ##3、正式登录
  92. request = urllib.request.Request(url, postData,headers=header)
  93. try:
  94. response = urllib.request.urlopen(request)
  95. data = response.read()
  96. except urllib.request.URLError as e:
  97. if hasattr(e,"code"):
  98. print ('页面加载失败,请检查网络及账号设置,错误原因' +str(e.code))
  99. if hasattr(e,"reason"):
  100. print ('页面加载失败,请检查网络及账号设置,错误原因' +str(e.reason))
  101.  
  102. #登录结束
  103. print('login:',data.decode('gbk'))
  104.  
  105. ##4 进入产品搜索界面进行数据提取
  106.  
  107. posturl= 'http://115.231.58.130:8021/Search/ProductFlow.aspx'
  108. request = urllib.request.Request(posturl)
  109. try:
  110. html = urllib.request.urlopen(request).read()
  111. #取表单参数
  112. EVENTVALIDATION = getParm(html.decode('gbk'),'__EVENTVALIDATION')
  113. VIEWSTATEGENERATOR = getParm(html.decode('gbk'),'__VIEWSTATEGENERATOR')
  114. VIEWSTATE = getParm(html.decode('gbk'),'__VIEWSTATE')
  115. #btnsearch = getParm(html.decode('gbk'),'btnSearcht')
  116. except urllib.request.URLError as e:
  117. if hasattr(e,"code"):
  118. print ('请求页面失败,请检查网络设置,错误原因' +str(e.code))
  119. if hasattr(e,"reason"):
  120. print ('请求页面失败,请检查网络设置,错误原因' +str(e.reason))
  121.  
  122. postDict['__EVENTTARGET']=''
  123. postDict['__EVENTARGUMENT']=''
  124. postDict['__EVENTVALIDATION']=EVENTVALIDATION
  125. postDict['__VIEWSTATEGENERATOR']=VIEWSTATEGENERATOR
  126. postDict['__VIEWSTATE']=VIEWSTATE
  127. postDict['PName']=''
  128. postDict['PID']=''
  129. postDict['txtStartDate']='2016-01-01'
  130. postDict['txtEndDate']='2016-01-31'
  131. postDict['ConvertToExcel.x']=''
  132. postDict['ConvertToExcel.y']=''
  133. postDict['btnSearch']=''
  134. postData = urllib.parse.urlencode(postDict).encode(encoding='UTF8')
  135.  
  136. print( '搜索页面数据获取成功,正在抓取流向数据...')
  137.  
  138. ###登录搜索页面
  139. request = urllib.request.Request(posturl, postData,headers=header)
  140. try:
  141. response = urllib.request.urlopen(request)
  142. data = response.readlines()
  143. except urllib.request.URLError as e:
  144. if hasattr(e,"code"):
  145. print ('页面加载失败,请检查网络及账号设置,错误原因' +str(e.code))
  146. if hasattr(e,"reason"):
  147. print ('页面加载失败,请检查网络及账号设置,错误原因' +str(e.reason))
  148. print( '流向抓取成功,正在保存为excel...')
  149. print('search:',data)
  150. ##5 保存为excel
  151.  
  152. workbook = xlwt.Workbook(encoding='gbk')
  153. sheet = workbook.add_sheet('Sheet1')
  154. for row,rowdata in enumerate(data):
  155. rowdata_list = rowdata.decode('gbk').split('\t')
  156. for col,val in enumerate(rowdata_list):
  157. sheet.write(row,col,val,style = xlwt.Style.default_style)
  158.  
  159. ntime = time.strftime('%Y%m%d%H%M%S')
  160. excelname = ntime+'%s.xls'%'宁波宝瑞达'
  161. workbook.save(excelname)
  162. 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. UITableView的横向使用

    UITableView只支持竖向显示,要实现横向的显示,需要设置tableView 和cell 的transform属性为CGAffineTransformMakeRotate(-M_PI/2) // ...

  2. Overview of iOS Crash Reporting Tools: Part 2/2

    Thanks for joining me for the second part of this two-part series on crash reporting services! The f ...

  3. Android ToolBar 使用完全解析

    ToolBar简介 ToolBar是Android 5.0推出的一个新的导航控件用于取代之前的ActionBar,由于其高度的可定制性.灵活性.具有Material Design风格等优点,越来越多的 ...

  4. django10 使用自定义标签配置说明

    1).在app目录下建目录templatetags[不可改名]目录,然后在该目录下建一个空的__init__.py 2).mytags.py 在templatetags下建一个mytags.py,添加 ...

  5. docker ubunt镜像中文乱码,文件名问号解决

    一 安装语言包 中文语言包: language-pack-zh-hans 简体中文 language-pack-zh-hans-base language-pack-zh-hant 繁体中文 lang ...

  6. python 处理抓取网页乱码问题一招鲜

    FROM: http://my.oschina.net/012345678/blog/122355 相信用python的人一定在抓取网页时,被编码问题弄晕过一阵 前几天写了一个测试网页的小脚本,并查找 ...

  7. ECSHOP筛选属性修改title标题

    发现百度蜘蛛爬行网站时会爬行属性链接,而且会进行收录.可是ecshop系统制作的网站,在分类页点击属性筛选出产品时,网页title不会改变.这样就会造成大量title一样的页面,不利于优化.为此,在网 ...

  8. SQL 关键字 'USER' 附近有语法错误怎么办

    如下图所示,我想要访问我的Database1.mdf的user这张表,提示如下错误   user在SQL Server中是系统保留字,将user修改为[user]就可以了.但是直接在VS中是无法修改的 ...

  9. How to Configure an SSIS Package to Access a Web Service using WCF

    This information is from:http://blogs.msdn.com/b/dbrowne/archive/2010/07/08/how-to-configure-an-ssis ...

  10. 自己定义circle

    写了一个还不错的自己定义控件.用来展示完毕度或能力值,程序中配置好所占百分比.图中就能够用外面的圆环来显示百分比,效果还是不错的~ watermark/2/text/aHR0cDovL2Jsb2cuY ...