python自动打开浏览器下载zip并提取内容写入excel

前言

佬们轻喷,里面有些代码都是现学现写的,一些细节没处理好的地方还请指出来~~~

首先贴上效果图:有些部分我没有放进来,比如浏览器的启动,但我详细聪明的你们那个玩意肯定一学就会。有些东西我没放进来

下载

使用到的库和总体思路

这部分用到time,selenium,urllib,re,requests,os这几个库。

代码

#!/usr/bin/python3
# coding=utf-8
import time
from selenium import webdriver
from urllib.parse import quote,unquote
import re
import requests
import os
# 下面两个参数是防止反爬的,别的文章也是这么写的,但我这里没用到
headers = {
 'Accept': '*/*',
 'Accept-Language': 'en-US,en;q=0.5',
 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36'
}
params = {
 'from': 'search',
 'seid': '9698329271136034665'
}

class Download_file():
 def __init__(self,url,order_number,file_path):
 self.url=url
 self.order_number=order_number
 self.file_path=file_path

 # 拿到文件对应的下载链接
 def _get_files_url(self):
 # 用谷歌浏览器打开
 driver=webdriver.Chrome()
 # 拿到url
 driver.get(self.url)
 print(driver.title)
 time.sleep(5)
 # 通过标签id拿到对应操作对象
 driver.switch_to.frame(0)
 driver.find_element_by_id('search_id').send_keys(self.order_number)
 # 具体页面有具体的操作,这里我需要找的button没有id,他是用ng-click="queryCheckRecordByTid(queryInfo.queryTid)"
 driver.find_element_by_class_name('btn').click()
 # driver.find_element_by_id('su').click()
 time.sleep(3)
 # AngularJS语法写的标签很烦。。。我这里先找到目标标签的父标签
 # 然后通过父标签拿到目标标签
 dd=driver.find_elements_by_class_name('col-xs-2')
 # 我这个父标签下有两个<a></a>标签,只能要第一个
 url_list=[]
 for i in dd:
 # 因为下载的url正好是第一个,然后这里取得是element,所以正好取到正确的url
 a=i.find_element_by_xpath('.//a')
 # print(a.get_attribute('href'))
 url_list.append(a.get_attribute('href'))
 # download_btn[0].click()
 time.sleep(3)
 driver.close()
 return url_list

 # 下载文件
 def download_save(self):
 # 匹配出来的可能有None,所以要做一下处理
 url_list=self._get_files_url()
 url_list=list(filter(lambda x:x!=None,url_list))
 if len(url_list)==0:
 return False
 # 创建一个保存zip的文件夹
 # 更改执行路径的原因是这样可以灵活的在用户指定的目录下创建文件
 os.chdir(self.file_path)
 if os.path.exists(self.file_path+'/'+'Download_Files') == False:
 os.mkdir('Download_Files')
 # 更改执行路径
 os.chdir(self.file_path + '/'+'Download_Files/')
 for url in url_list:
 # 链接中附带了作者和文件名,但是需要解码,所以先用正则语言提取目标串,然后转换成中文
 ret = re.search(r'_.*\.zip$',url)
 file_info=unquote(ret.group())
 file_author=file_info.split('_')[1]
 file_title=file_info.split('_')[2]
 file_object=requests.get(url)
 file_name=file_author+'_'+file_title
 print('正在下载:%s'%file_name)
 with open(file_name,'wb') as f:
 f.write(file_object.content)

 # def auto_fill(self):

if __name__ == '__main__':
 url='http://***'
 order_id='***'
 file_path='D:/For discipline/Get_excel'
 test=Download_file(url,order_id,file_path)
 test.download_save()

解释

用selenium库访问目标页面,我这里通过_get_files_url方法定位输入框和超链接地址,然后返回超链接地址。之后在download_save方法内通过request.get拿到文件,然后存在本地,里面的一些存放目录、文件名处理等细节看代码就可以了。
注意,这只是一个案例,不具备普适性,因为每个页面的前端编写方法不尽相同,具体页面需要具体分析,我这里不贴我的网站是涉及到女朋友的业务,所以不适合贴。

提取内容并填写

使用到的库

这部分用到time,xlwt,urllib,re,pickle,os,zipfile,BeautifulSoup这几个库。

代码

#!/usr/bin/python3
# coding=utf-8
import os
import time
import xlwt
import zipfile
import re
import pickle
from bs4 import BeautifulSoup
from Download_files import Download_file
class get_excel():
 def __init__(self,file_path):
 self.file_path=file_path

 # 解压出目标文件
 def _unzip_files(self):
 '''
 这个函数具备解压目标文件的功能并且返回需要处理的文件列表
 :return:
 '''
 files_list=os.listdir(self.file_path)
 # 文件名存放在列表中,为了防止处理了别的文件,先用正则匹配一下
 files_list=list(filter(lambda x:re.search(r'\.zip$',x)!=None,files_list))
 title_list=[]
 for file in files_list:
 title=file.split('.')[0].split('_')[1]
 with zipfile.ZipFile(self.file_path+'/'+file,'r') as z:
 # 代码有点长,主要是用于筛选出目标文件
 target_file=list(filter(lambda x:re.search(r'比对报告.html$',x)!=None,z.namelist()))
 # 下面的方法就是比较灵活的
 contentb=z.read(target_file[0])
 # 这里很头痛的一点是返回值是二进制的,就算decode了也没办法正则匹配
 # 所以我想把它存一下再用utf8格式读取
 # 当然我也尝试了decode,但网页内的有些东西还是没办法转换,也会导致正则无法匹配
 if os.path.exists(self.file_path+'/'+title+'_'+'比对报告.html')==False:
 with open(self.file_path+'/'+title+'_'+'比对报告.html','wb') as fb:
 pickle.dump(contentb,fb)
 # with open(self.file_path+'/'+target_file[0],'r',encoding='utf-8') as fa:
 # contenta=fa.read()
 # print(contenta)
 # sentence=str(re.search(r'<b [^"]*red tahoma.*</b>$',contenta))
 # value=re.search(r'\d.*%', sentence)
 # info=[author,title,value]
 # repetition_rate.append(info)
 title_list.append(target_file[0])
 return files_list,title_list

 # 读取html文件内容
 def read_html(self):
 '''
 之前的函数已经把目标文件解压出来了,但html文件的读取比较麻烦,
 所以这里用到了BeautifulSoup库来读取我想要的信息,
 然后把想要的东西存在列表里面返回回来。
 :return:
 '''
 files_list,title_list=self._unzip_files()
 repetition_rate=[]
 for file in files_list:
 # 取出作者和标题,这两个数据要写到excel里面
 file=file.split('.')
 file=file[0].split('_')
 author=file[0]
 title=file[1]
 # 比对报告已经解压出来了,直接读取就可以
 with open(self.file_path+'/'+title+'_比对报告.html','rb') as f:
 # 下面是BeautifulSoup的用法,看不懂的话可以去官网
 content=f.read()
 content=BeautifulSoup(content,"html.parser")
 # print(type(content))
 # 网上搜了很多,终于可以找到我想要的重复率了
 value=content.find('b',{"class":"red tahoma"}).string
 repetition_rate.append([author,title,value])
 return repetition_rate

 def write_excel(self):
 '''
 生成xls表格
 :return:
 '''
 workbook=xlwt.Workbook(encoding='utf-8')
 booksheet=workbook.add_sheet('Sheet1')
 # 设置边框
 borders = xlwt.Borders() # Create Borders
 borders.left = xlwt.Borders.THIN #DASHED虚线,NO_LINE没有,THIN实线
 borders.right = xlwt.Borders.THIN #borders.right=1 表示实线
 borders.top = xlwt.Borders.THIN
 borders.bottom = xlwt.Borders.THIN
 borders.left_colour=0x40
 borders.right_colour = 0x40
 borders.top_colour = 0x40
 borders.bottom_colour = 0x40
 style1=xlwt.XFStyle()
 style1.borders=borders
 # 设置背景颜色,这些操作搞得很像js和css
 pattern = xlwt.Pattern()
 pattern.pattern = xlwt.Pattern.SOLID_PATTERN
 pattern.pattern_fore_colour = 44
 style = xlwt.XFStyle() # Create the Pattern
 style.pattern = pattern
 repetition_rate=self.read_html()
 # 写一个标题
 booksheet.write(0,0,'作者',style)
 booksheet.write(0,1,'标题',style)
 booksheet.write(0,2,'重复率',style)
 for item in repetition_rate:
 booksheet.write(repetition_rate.index(item)+1,0,item[0],style1)
 booksheet.write(repetition_rate.index(item)+1,1,item[1],style1)
 booksheet.write(repetition_rate.index(item)+1,2,item[2],style1)
 s='重复率.xls'
 workbook.save(self.file_path+'/'+s)

if __name__ == '__main__':
 # 判断一下Download_files文件夹
 file_path='D:/For discipline/Get_excel'
 url='http://***'
 order_number='***'
 if os.path.exists('./Download_Files')==False:
 get_file=Download_file(url,order_number,file_path)
 get_file.download_save()
 os.chdir(file_path+'/Download_Files')
 test=get_excel('D:/For discipline/Get_excel/Download_Files')
 test.write_excel()

解释

由于我下载的zip文件,这就需要先解压,解压的库是zipfile,当然这种解压只是在执行的时候解开,不是实际解压到目录下面的。解压出来的文件比较冗杂,所以我用正则匹配了一个最合适(能够减少编写工作量)的文件,这部分代码中的大部分工作都是为了拿到我的目标值(其中包括字节流和字符串的转换工作,我就是失败了才会选择保存html文件并重新读取信息的多余过程),也就是(作者,标题,repetition rate),信息写入excel的过程倒不是很复杂。我基本上没有解释方法是因为这些百度一下或者看官网就行了,主要还是阐述一下我的编写思路

附:Python使用beautifulSoup获取标签内数据

from bs4 import BeautifulSoup

for k in soup.find_all('a'):
 print(k)
 print(k['class'])#查a标签的class属性
 print(k['id'])#查a标签的id值
 print(k['href'])#查a标签的href值
 print(k.string)#查a标签的string
 #tag.get('calss'),也可以达到这个效果

到此这篇关于python自动打开浏览器下载zip并提取内容写入excel的文章就介绍到这了,更多相关python自动浏览器下载zip并提取内容内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

参考文章

  • Excel的操作: Python3读取和写入excel表格数据.
  • selenium的操作: selenium之 定位以及切换frame(iframe) . Python Selenium库的使用.
  • zip文件的解压和读取:Python读写zip压缩文件.
(0)

相关推荐

  • Python压缩和解压缩zip文件

    zip文件是我们经常使用的打包格式之一,python解压和压缩zip效率非凡. python解压zip文档: 复制代码 代码如下: #/usr/bin/python #coding=utf-8 import os,sys,time import zipfile filename = 'callofdutyblackopszombies_1349649132343_my.zip'  #要解压的文件 filedir = 'data/'  #解压后放入的目录 r = zipfile.is_zipfil

  • python中zip和unzip数据的方法

    本文实例讲述了python zip和unzip数据的方法.分享给大家供大家参考.具体实现方法如下: # zipping and unzipping a string using the zlib module # a very large string could be zipped and saved to a file speeding up file writing time # and later reloaded and unzipped by another program spee

  • python写入已存在的excel数据实例

    python可以使用xlrd读excel,使用xlwt写excel,但是如果要把数据写入已存在的excel,需要另外一个库xlutils配合使用. 大概思路: 1.用xlrd.open_workbook打开已有的xsl文件 注意添加参数formatting_info=True,得以保存之前数据的格式 2.然后用,from xlutils.copy import copy;,之后的copy去从打开的xlrd的Book变量中,拷贝出一份,成为新的xlwt的Workbook变量 3.然后对于xlwt的

  • Python读写zip压缩文件的方法

    Python 内置的 zipfile 模块可以对文件(夹)进行ZIP格式的压缩和读取操作.要进行相关操作,首先需要实例化一个 ZipFile 对象.ZipFile 接受一个字符串格式压缩包名称作为它的必选参数,第二个参数为可选参数,表示打开模式,类似于文件操作,有r/w/a三种模式,分别代表读.写.添加,默认为r,即读模式. Python自带模块zipfile可以完成zip压缩文件的读写,而且使用非常方便,下面我们就来演示一下Python读写zip文件. Python读zip文件 下面的代码给出

  • Python向excel中写入数据的方法

    最近做了一项工作需要把处理的数据写入到Excel表格中进行保存,所以在此就简单介绍使用Python如何把数据保存到excel表格中. 数据导入之前需要安装 xlwt依赖包,安装的方法就很简单,直接 pip install xlwt ,如果电脑中安装过就不需要重复安装. 接下来就做一个简单的demo ,把三行数据添加到excel中. 具体代码如下: #!/usr/bin/env python # coding=utf-8 from xlwt import * #需要xlwt库的支持 #import

  • python实现数据写入excel表格

    本文实例为大家分享了python数据写入excel表格的具体代码,供大家参考,具体内容如下 安装: xlsxwriter第三方库 code: #!/usr/bin/env/python #_*_coding:utf-8_*_ #Data:2017-08-13 #Auther:苏莫 #Link:http://blog.csdn.net/lingluofengzang #PythonVersion:python2.7 #filename:xlsx.py import sys # import os

  • python zip文件 压缩

    从简单的角度来看的话,zip格式会是个不错的选择,而且python对zip格式的支持够简单,够好用.1)简单应用 如果你仅仅是希望用python来做压缩和解压缩,那么就不用去翻文档了,这里提供一个简单的用法,让你一看就能明白. import zipfile f = zipfile.ZipFile('filename.zip', 'w' ,zipfile.ZIP_DEFLATED) f.write('file1.txt') f.write('file2.doc') f.write('file3.r

  • Python将列表数据写入文件(txt, csv,excel)

    写入txt文件 def text_save(filename, data):#filename为写入CSV文件的路径,data为要写入数据列表. file = open(filename,'a') for i in range(len(data)): s = str(data[i]).replace('[','').replace(']','')#去除[],这两行按数据不同,可以选择 s = s.replace("'",'').replace(',','') +'\n' #去除单引号,

  • python自动打开浏览器下载zip并提取内容写入excel

    前言 佬们轻喷,里面有些代码都是现学现写的,一些细节没处理好的地方还请指出来~~~ 首先贴上效果图:有些部分我没有放进来,比如浏览器的启动,但我详细聪明的你们那个玩意肯定一学就会.有些东西我没放进来 下载 使用到的库和总体思路 这部分用到time,selenium,urllib,re,requests,os这几个库. 代码 #!/usr/bin/python3 # coding=utf-8 import time from selenium import webdriver from urlli

  • 让webpack+vue-cil项目不再自动打开浏览器的方法

    当我们用vue-cil建立一个完整的webpack+vue的项目之后,它的设置选项还是蛮多的.比如,当我们输入npm run dev开始跑起项目之后,就会自动的打开浏览器,并把页面打开. 按理说,这是一个很方便的配置.问题是,我们在调试的过程中,可能需要不断的重启项目.每一次重启,就会开一个网页,让我非常头疼. 查看了一下,找到了解决方法,分享给各位看官. 打开 /build/dev-server.js 文件 末尾,代码如下: // when env is testing, don't need

  • Vue 项目运行完成后自动打开浏览器的方法汇总

    目录 方法一:package.json(适用于vue3) 方法二:vue.config.js 方法三:插件+webpack 方法一:package.json(适用于vue3) 在文件中找到scripts–serve,在后面添加 --open 方法二:vue.config.js 该方法适用于 有vue.config.js的项目 找到vue.config.js文件,找到devServer,添加下面代码 open : true 方法三:插件+webpack 该方法存在局限性,仅适用于当前只运行一个项目

  • vue配置启动项目自动打开浏览器方式

    目录 vue配置启动项目自动打开浏览器 1.找到项目中的config文件夹内的index.js 2.打开package.json找到启动命令 3.在根目录下新建vue.config.js文件 npm run dev运行项目自动打开浏览器 vue配置启动项目自动打开浏览器 1.找到项目中的config文件夹内的index.js 里面有一个配置是autoOpenBrowser:false: 设置为true即可(或者全局搜索autoOpenBrowser设置为true) 2.打开package.jso

  • python自动从arxiv下载paper的示例代码

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2020/02/11 21:44 # @Author : dangxusheng # @Email : dangxusheng163@163.com # @File : download_by_href.py ''' 自动从arxiv.org 下载文献 ''' import os import os.path as osp import requests from lxml impor

  • vue-cli3启动服务如何自动打开浏览器配置

    目录 vue-cli3启动服务自动打开浏览器配置 vue-cli自动打开默认浏览器0.0.0:8080 vue-cli3启动服务自动打开浏览器配置 1.首先创建一个vue-cli3项目. 2.找到package.json文件 3.找到配置项‘scripts’ 4.找到配置项‘serve’ 5.修改下,加个字段 “serve”: “vue-cli-service serve --open” 如果不想每次默认打开浏览器还可以将上图中的 --open,替换成 --copy (将本地 URL 复制到剪切

  • Python实现读写sqlite3数据库并将统计数据写入Excel的方法示例

    本文实例讲述了Python实现读写sqlite3数据库并将统计数据写入Excel的方法.分享给大家供大家参考,具体如下: src = 'F:\\log\\mha-041log\\rnd-log-dl.huawei.com\\test' # dst = sys.argv[2] dst = 'F:\\log\\mha-041log\\rnd-log-dl.huawei.com\\test\\mha-041log.db' # dst_anylyzed = sys.argv[3] dst_anylyze

  • Python实现自动打开电脑应用的示例代码

    由于时间原因,有时候可能会错过某个上网课的时间段.因此想要实现自动定时启动DingDing. 新手一枚,如有不当勿喷望大佬指正. 自动打开DingDing可以由两种方法实现: 通过找出找出软件在电脑中快捷方式的位置(电脑屏幕中的坐标),使用代码模拟鼠标进行双击打开. 通过输入软件在电脑中的安装路径打开软件. 1.第一种方法: ​在python中,使用pip install pyautogui 安装第三方库,在此库中,可以使用pyautogui.position()获取当前鼠标放置位置的坐标.我们

  • 用python制作个视频下载器

    前言 某个夜深人静的夜晚,夜微凉风微扬,月光照进我的书房~ 当我打开文件夹以回顾往事之余,惊现许多看似杂乱的无聊代码.我拍腿正坐,一个想法油然而生:"生活已然很无聊,不如再无聊些叭". 于是,我决定开一个专题,便称之为kimol君的无聊小发明. 妙-啊~~~ 众所周知,视频是一个学习新姿势知识的良好媒介.那么,如何利用爬虫更加方便快捷地下载视频呢?本文将从数据包分析到代码实现来进行一个相对完整的讲解. 一.爬虫分析 本次选取的目标视频网站为某度旗下的好看视频: https://haok

  • 用python制作个音乐下载器

    前言 某个夜深人静的夜晚,我打开了自己的文件夹,发现了自己写了许多似乎很无聊的代码.于是乎,一个想法油然而生:"生活已经很无聊了,不如再无聊一点叭". 说干就干,那就开一个专题,我们称之为kimol君的无聊小发明. 妙-啊~~~ 直奔主题!本文主题是用python做一个音乐下载器(MusicLover),直接上图: 想必看到这里,各位看官的脑海中已经脑补出各种JS解密,参数分析等等让初学者很头疼的东东了. 然而,我并不打算这么干~(小声嘀咕:"没想到吧") 本文很友

随机推荐