#-*- 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流向下载的更多相关文章

  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. Spring项目搭建

    1,新建web项目 2,导入jar包 3,编写配置文件 <?xml version="1.0" encoding="UTF-8"?> <bea ...

  2. UITableView的横向使用

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

  3. 廖雪峰的git教程

    http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

  4. S5PV210之内外存学习

    RAM,内部存储器,用来运行程序(DRAM,SRAM,DDR) ROM,外部存储器,存储数据.程序(硬盘,FLASH等) 内存:SRAM,静态内存,容量下,价格高,不需要初始化,上电后直接使用 DRA ...

  5. 彻底解决DZ大附件上传问题

    个. 注意:很多人遇到修改php.ini后重应WEB服务后仍然不能生效.这种情况应该先确认一下所改的php.ini是不是当前PHP所使用的.您可以在WEB目录下建立一个php文件,内容很简单就一句话& ...

  6. redis打开非英文存储显示问题

    使用jedis 在redis中如果存储非英文的值,入 中文,印地语,马拉蒂语,泰米尔语等.在执行get 或者 hget的时候查询出来的数据会以16进制显示.如何显示原有的值 在redis启动的时候加上 ...

  7. linux下rar包的解压方法

    linux下rar包的解压方法 学习了:https://blog.csdn.net/yonggeit/article/details/72190246?utm_source=itdadao&u ...

  8. TestNG+ReportNG+IDEA+Git+Jenkins+surefire持续集成数据驱动dubbo接口测试

    一.pom.xml增加testng相关配置 <!--添加插件 关联testNg.xml--><plugin> <groupId>org.apache.maven.p ...

  9. 利用gearman同步mysql数据到redis

    一.Gearman 1.Gearman是一个分发任务的程序框架. 2.体系:a.client:发送一个jobb.server:找到合适的worker,把job交给该workerc.worker:处理j ...

  10. 标准库Allocator的使用(一)

    上一篇我们提到了new运算符以及它的工作步骤,其实无非是把两项工作独立出来: 1.申请原始内存 2.执行构造函数 delete也涉及了两个工作: 1.执行析构函数 2.释放原始内存 其实标准库提供了另 ...