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 ...
随机推荐
- Windows下将ISO镜像制作成U盘启动的工具(U盘启动工具/UltraISO/Rufus/Universal-USB)
说明:基于Windows的U盘启动制作都是非常的简单,在软件上指定ISO文件之后,一般都是选择写入到哪个U盘即可. 1.UltraISO 2.Rufus 3.Universal-USB 4.大白菜
- [置顶]
kubernetes--资源管理
概念 默认情况下,kubernetes不会限制pod等资源对象使用系统资源,单个pod或者容器可以无限制使用系统资源. kubernetes的资源管理分为资源请求(request)和资源限制(limi ...
- ElasticSearch 结构化搜索全文
1.介绍 上篇介绍了搜索结构化数据的简单应用示例,现在来探寻 全文搜索(full-text search) :怎样在全文字段中搜索到最相关的文档. 全文搜索两个最重要的方面是: 相关性(Relevan ...
- Preference Learning——Object Ranking
Basics About Orders Object Ranking应用: 量化的受訪者的感觉或印象(quantification of respondents' sensations or impr ...
- 2017.9.5 postgresql加密函数的使用
需要安装的插件的名字:pgcrypto 官网地址:https://www.postgresql.org/docs/9.4/static/pgcrypto.html stackoverflow: htt ...
- 最美应用-从Android研发project师的角度之[最美时光]
最美应用-从Android研发project师的角度之最美时光 @author ASCE1885的 Github 简书 微博 CSDN 近期发现最美应用这样一个站点.它会定期推介一些非常有意思的app ...
- foreach 加& 什么意思?
foreach 加&遍历的同时改变原数组即修改数据或者增加数据 foreach 加& 什么意思? 注意:如果我要改变数组某一个值 直接遍历的话原数组是不会变的 下面提供两种方法 1.我 ...
- KeePass 不能复制账号密码
最近一段时间发现 KeePass 不能复制账号密码了, 程序也没有任何错误提示, 没有办法定位原因, 这个就难办了. 网上搜索后发现这个帖子 Can't paste in gnome-terminal ...
- 按“开始”-“运行”,或按WIN+R,在[运行]窗口中输入
command--------CMD命令提示符 ipconfig查看本机IP chkdsk.exe-----Chkdsk磁盘检查 certmgr.msc----证书管理实用程序 calc--- ...
- Ffmpeg音频转码 卡顿(MP2转AAC)
最好经手一个小的功能将mp2实时流转成AAC并发布成rtmp音频流,本身不是很难的一个需求, 一个晚上就能将功能开发好.功能开发完毕后,找来一音频文件利用Ffmpeg命令将音视频文件推成 实时udp格 ...