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 ...
随机推荐
- 警告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 ...
- js常用函数和常用技巧
学习和工作的过程中总结的干货,包括常用函数.常用js技巧.常用正则表达式.git笔记等.为刚接触前端的童鞋们提供一个简单的查询的途径,也以此来缅怀我的前端学习之路. PS:此文档,我会持续更新. Aj ...
- easyui numberbox precision属性
//设置easyui numbox 最小值为0,保留2为小数 <input id="payPrice" type="text" name="pa ...
- 【OpenGL4.0】GLSL渲染语言入门与VBO、VAO使用:绘制一个三角形 【转】
http://blog.csdn.net/xiajun07061225/article/details/7628146 以前都是用Cg的,现在改用GLSL,又要重新学,不过两种语言很多都是相通的. 下 ...
- java 通过流的方式读取本地图片并显示在jsp 页面上(类型以jpg、png等结尾的图片)
Java代码: File filePic = new File(path+"1-ab1.png"); if(filePic.exists()){ FileInputStream i ...
- Java程序猿修炼之道 之 Logging(3/3) - 怎么分析Log
1. 说明 作为一个程序猿我们常常要做一件事情:获取某个Log文件,从当中找出自己想要的信息. 本文总结了我在工作中使用了哪些工具来分析Log文件获取我想要的信息,我近期几年的工作环境都是server ...
- 我的MAC可能在设置环境变量的时候设置错了,现在整个MAC的vi,ls等命令都执行不了了。
1,在命令行中输入export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin这样可以保证命令行命令暂时可以使用.命令执行完之后先不要关闭终端或者c ...
- elasticsearch 基础性操作
1 基础概念 Elasticsearch是一个近实时的系统,从你写入数据到数据可以被检索到,一般会有1秒钟的延时.Elasticsearch是基于Lucene的,Lucene的读写是两个分开的句柄,往 ...
- eclipse maven项目导入Intellij问题处理
1.maven打包编译时后台一直输出警告信息 [WARNING] File encoding has not been set, using platform encoding GBK, i.e. b ...
- Sublime Text 3 文档
中文版:http://feliving.github.io/Sublime-Text-3-Documentation/ 英文版:http://www.sublimetext.com/docs/3/