PYTHON流向下载
- #-*- 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流向下载的更多相关文章
- python爬虫下载文件
python爬虫下载文件 下载东西和访问网页差不多,这里以下载我以前做的一个安卓小游戏为例 地址为:http://hjwachhy.site/game/only_v1.1.1.apk 首先下载到内存 ...
- Python package下载中遇到ReadTimeoutError: HTTPSConnectionPool?
问题描述: Python package下载中遇到ReadTimeoutError: HTTPSConnectionPool? 问题解决: 方法1:继续重复下载 pip install virtual ...
- python大法好——python的下载与安装、第一个程序
吃够了java的苦,所以python好. 打今天起,要走python了. 首先呢,学习python需要python环境.和一款得心应手的集成开发环境. python环境下载:https://mirro ...
- 用Python批量下载DACC的MODIS数据
本人初次尝试用Python批量下载DACC的MODIS数据,记下步骤,提醒自己,数据还在下载,成功是否未知,等待结果中...... 若有大佬发现步骤有不对之处,望指出,不胜感激. 1.下载Python ...
- Python爬虫下载Bilibili番剧弹幕
本文绍如何利用python爬虫下载bilibili番剧弹幕. 准备: python3环境 需要安装BeautifulSoup,selenium包 phantomjs 原理: 通过aid下载bilibi ...
- Python 的下载安装
学习Python牛逼的教程: http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000,本文 ...
- 以下三种下载方式有什么不同?如何用python模拟下载器下载?
问题始于一个链接https://i1.pixiv.net/img-zip-...这个链接在浏览器打开,会直接下载一个不完整的zip文件 但是,使用下载器下载却是完整文件 而当我尝试使用python下载 ...
- python版本下载时时,官方目录web-based与executable和embeddable 的区别
背景:安装python时不知道选择哪个版本以及他们之间的意思. 1.X86和X86-64的区别:系統是32 bit 的版本还是 64bit 的 2.web-based ,executable , em ...
- python脚本下载 Google Driver 文件
使用python脚本下载 Google Driver 文件 import yaml import sys import requests import os import re import tarf ...
随机推荐
- UITableView的横向使用
UITableView只支持竖向显示,要实现横向的显示,需要设置tableView 和cell 的transform属性为CGAffineTransformMakeRotate(-M_PI/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 ...
- Android ToolBar 使用完全解析
ToolBar简介 ToolBar是Android 5.0推出的一个新的导航控件用于取代之前的ActionBar,由于其高度的可定制性.灵活性.具有Material Design风格等优点,越来越多的 ...
- django10 使用自定义标签配置说明
1).在app目录下建目录templatetags[不可改名]目录,然后在该目录下建一个空的__init__.py 2).mytags.py 在templatetags下建一个mytags.py,添加 ...
- docker ubunt镜像中文乱码,文件名问号解决
一 安装语言包 中文语言包: language-pack-zh-hans 简体中文 language-pack-zh-hans-base language-pack-zh-hant 繁体中文 lang ...
- python 处理抓取网页乱码问题一招鲜
FROM: http://my.oschina.net/012345678/blog/122355 相信用python的人一定在抓取网页时,被编码问题弄晕过一阵 前几天写了一个测试网页的小脚本,并查找 ...
- ECSHOP筛选属性修改title标题
发现百度蜘蛛爬行网站时会爬行属性链接,而且会进行收录.可是ecshop系统制作的网站,在分类页点击属性筛选出产品时,网页title不会改变.这样就会造成大量title一样的页面,不利于优化.为此,在网 ...
- SQL 关键字 'USER' 附近有语法错误怎么办
如下图所示,我想要访问我的Database1.mdf的user这张表,提示如下错误 user在SQL Server中是系统保留字,将user修改为[user]就可以了.但是直接在VS中是无法修改的 ...
- 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 ...
- 自己定义circle
写了一个还不错的自己定义控件.用来展示完毕度或能力值,程序中配置好所占百分比.图中就能够用外面的圆环来显示百分比,效果还是不错的~ watermark/2/text/aHR0cDovL2Jsb2cuY ...