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 ...
随机推荐
- 集合框架(高级for的使用)
高级for循环 格式: for(数据类型 变量名 :被遍历的集合(collection)或者数组){} 对集合进行遍历,只能获取元素,但是不能对元素进行过多的操作 迭代器除了遍历,还可以进行remov ...
- 所有iOS设备的屏幕分辨率
iPhone设备 物理分辨率是硬件所支持的,逻辑分辨率是软件可以达到的. 代数 设备 操作系统 逻辑分辨率(point) 物理分辨率(pixel) 屏幕尺寸(对角线长度) 缩放因子 iPhone ...
- nodejs处理高并发问题
做了一个nodejs并发测试,先描述一下环境 数据库mysql,大概两张表,读取第一张表test的数据,拿出来-1,存到第二张testlog表记录一下,用jmeter同事模拟50个请求,结果发现, ...
- 十步完全理解 SQL
很多程序员视 SQL 为洪水猛兽.SQL 是一种为数不多的声明性语言,它的运行方式完全不同于我们所熟知的命令行语言.面向对象的程序语言.甚至是函数语言(尽管有些人认为 SQL 语言也是一种函数式语言) ...
- 让用VS2012/VS2013编写的程序在XP中顺利执行
微软为了推销自家平台,默认配置下VS2012和VS2013编写的应用程序仅仅能在Vista/Win7/Win8上执行.但幸好还保留了生成XP程序的设置项.XP和Win2003的用户还是大量存在的,我们 ...
- ECSHOP热门搜索关键词随机显示
实现ECSHOP热门搜索关键词随机显示,需要修改ECSHOP模板和ECShOP程序,按照步骤修改即可. 一.打开 include/lib_main.php 文件,找到下面这段代码,删除之(大概在165 ...
- 转: 理解UDDI (from IBM Dev)
from: http://www.ibm.com/developerworks/cn/webservices/ws-featuddi/index.html 何为 UDDI? UDDI 项目鼓励 Web ...
- 自定义 alert 弹窗
1.css样式 li-alert.css @-webkit-keyframes opacity { 0% { opacity: 0; /*初始状态 透明度为0*/ } 50% { opacity: 0 ...
- Android Studio加入插件(Genymotion)
官方模拟器的龟速已让我们无力吐槽.幸好有genymotion这款逆天的Android虚拟机,它有着高速的开启速度,良好的交互界面. 是Android开发必备的良品.甚至有些玩家已经用genymotio ...
- Yii 获得当前控制器和方法
[怎样获得当前控制器和方法] 控制器:$this -> id ; 方法:$this->action->id ; 这主要是用在视图中,进行高亮显示. <div id=" ...