1. 程式人生 > >python3.6爬蟲案例:爬取某網站所有PPT(下)。

python3.6爬蟲案例:爬取某網站所有PPT(下)。

上篇部落格:python3.6爬蟲案例:爬取某網站所有PPT(上)給大家介紹了爬取(http://www.1ppt.com/)網站中的ppt檔案,爬下來的檔案如下:


所以,我們就要考慮將其名稱修改為其在網頁中顯示的名字,並將其批量解壓到指定資料夾。

一、批量修改壓縮檔名稱。

細心的夥伴可以從上圖發現,壓縮檔案的格式不同有zip、rar兩種格式,所以我們需要分別處理,在後續的批量解壓檔案中需要不同的python模組進行處理。批量修改壓縮檔名稱的思路不難,主要運用os模組,依次開啟每個主題中每個欄目下的壓縮檔案,同時開啟zip_utl.txt檔案,匹配壓縮檔名,匹配成功將中文名稱重新命名為壓縮檔名稱。py檔案為Change_file_name.py,程式碼如下:

import os

#開啟類目url,選中資料夾
def split_(string):
    st = string.strip().split(';')
    return st

#處理資料夾名稱
def judgeName(name):
    fh = ['?','\\','/',':','*','"','<','>','|']
    for fh_ in fh:
        if fh_ in name:
            name = name.replace(fh_, '_')
    return name


#傳入一個當前資料夾名稱,對其子檔案進行更改名稱
def change_file_name(current_file_path):#變數格式:'F://ppt//中國風背景圖片//'
    print("正在更改"+current_file_path+"資料夾下的內容")
    current_file_names = os.listdir(current_file_path)
    if len(current_file_names)>2:
        f = open(current_file_path+'zip_url.txt','r',encoding='utf-8')
        current_zip_url_names = f.readlines()
        f.close()
        for current_file_name in current_file_names:
            file_format = current_file_name[current_file_name.find("."):]#讀取當前檔案格式

        #讀取檔名稱
            file_name = current_file_name[:current_file_name.find(".")]
        #在zip_url檔案中遍歷
            for zip_url_name in current_zip_url_names:
                zip_url_name = split_(zip_url_name)
                zip_name = zip_url_name[0]
        #         print(name)
                zip_url = zip_url_name[1]
                file_real_name = zip_url.split('/')[-1][:zip_url.split('/')[-1].find(".")]#在zip_url中的連結中找到壓縮檔名
                if file_name == file_real_name:
                    try:
                        if file_format == '.rar':#判斷格式,精確重新命名,後面檔案批量解壓不同的格式有不同的方法。
                            os.rename(current_file_path+file_name+'.rar',current_file_path+zip_name+'.rar')
                        else:
                            os.rename(current_file_path+file_name+'.zip',current_file_path+zip_name+'.zip')
                    except:
                        pass
                else:
                    pass

def main():

    with open('F://ppt//url.txt','r') as f_root_url:
        zhu_ti_names = f_root_url.readlines()
    for zhu_ti_item in zhu_ti_names:
        print("正在處理"+zhu_ti_item+'_資料夾下的內容')
        zhu_ti_name = split_(zhu_ti_item)[0]#提取主題名
        with open('F://ppt//'+zhu_ti_name+'//url.txt','r') as f:
            lei_bie_names = f.readlines()
        for lei_bie_item in lei_bie_names:
            lei_bie_name = judgeName(split_(lei_bie_item)[0])
            change_file_name('F://ppt//'+zhu_ti_name+'//'+lei_bie_name+'//')
if __name__ =="__main__":
    main()

執行程式後,效果如下


二、批量解壓縮檔案到指定資料夾

有了這些檔案,如果我們採用批量下載檔案的那種方法,未免太浪費時間。python的zipfile與unrar中的rarfile可以分別解壓zip、rar檔案。思路是遍歷每個主題資料夾下的欄目資料夾,找到每個壓縮檔案,判斷其格式,採用相應的方法將需要的壓縮包中的檔案解壓到指定資料夾。該部分的py檔案為:ExtractArchiveFile.py,程式碼如下:

import zipfile
import os
from unrar import rarfile

#開啟類目url,選中資料夾
def split_(string):
    st = string.strip().split(';')
    return st

#處理資料夾名稱
def judgeName(name):
    fh = ['?','\\','/',':','*','"','<','>','|']
    for fh_ in fh:
        if fh_ in name:
            name = name.replace(fh_, '_')
    return name

#解壓縮檔案
def archive_extract(zip_exit_file, one_file, two_file):#zip檔案所在目錄,主題資料夾,類別資料夾
    current_file_path = 'F://ppt1//'+one_file+'//'+two_file+'//' #用於建立新的主題資料夾和類別資料夾
    current_file_names = os.listdir(zip_exit_file) #壓縮檔案所在的類別資料夾下的所有檔案
    for current_file_name in current_file_names:
        print(current_file_name)
        archive_format = current_file_name[current_file_name.find('.'):] #壓縮檔案格式
        archive_name =  current_file_name[:current_file_name.find('.')]#壓縮檔名稱
        if archive_format == '.zip':#判斷壓縮檔案型別,不同的型別解壓所用的包不同
            azip = zipfile.ZipFile(zip_exit_file+current_file_name,'r')#讀取壓縮包裡面的檔案
            try:
                zip_num = 1#如果壓縮檔案中有多個檔案,命名以此加1
                for filename in azip.namelist():#遍歷所有檔案
#                     print('---'+filename)
                    filename_lenth = len(filename)
                    file_format = filename[filename.find('.',filename_lenth-5):]#提取壓縮檔案中子檔案的格式
    #                 print(file_format)
                    if file_format in ['.pptx', '.ppt' , '.jpg', 'JPG']:#判斷是否是需要的檔案,如果是則解壓到指定資料夾

                        try:
                            azip.extract(filename, path=current_file_path)#解壓
                        except:
                            continue
                        if zip_num == 1:#首個檔案命名格式
                            os.rename(current_file_path+filename,current_file_path+archive_name+file_format)
                            zip_num += 1
                        else:#如果是多個檔案,命名加1
                            os.rename(current_file_path+filename,current_file_path+archive_name+str(zip_num)+file_format)
                            zip_num += 1
            finally:
                pass
            azip.close()
        if archive_format == '.rar':
            arar = rarfile.RarFile(zip_exit_file+current_file_name,'r')
            try:
                rar_num = 1
                for filename in arar.namelist():
    #                 print(filename)
                    filename_lenth = len(filename)
                    file_format = filename[filename.find('.',filename_lenth-5):]
                    if file_format in ['.pptx', '.ppt' , '.jpg', 'JPG']:
                        try:
                            arar.extract(filename, path=current_file_path)
                        except:
                            continue
                        if rar_num == 1:
                            os.rename(current_file_path+filename,current_file_path+archive_name+file_format)
                            rar_num += 1
                        else:
                            os.rename(current_file_path+filename,current_file_path+archive_name+str(rar_num)+file_format)
                            rar_num += 1
    #                 break
            finally:
                pass
    #     break
    print('結束')


def main():

    with open('F://ppt//url.txt','r') as f_root_url:
        zhu_ti_names = f_root_url.readlines()
    for zhu_ti_item in zhu_ti_names:
        print("正在處理"+zhu_ti_item.strip()+'_資料夾下的內容')
        zhu_ti_name = split_(zhu_ti_item)[0]#提取主題名
        try:
            with open('F://ppt//'+zhu_ti_name+'//url.txt','r') as f:
                lei_bie_names = f.readlines()
            for lei_bie_item in lei_bie_names:
                print("   正在解壓"+lei_bie_item.strip()+"_類別下的壓縮檔案")
                lei_bie_name = judgeName(split_(lei_bie_item)[0])
                extract_file = 'F://ppt//'+zhu_ti_name+'//'+lei_bie_name+'//'#壓縮檔案所在位置
                archive_extract(extract_file, zhu_ti_name, lei_bie_name)
        except:
            with open('F://ppt//'+zhu_ti_name+'//url.txt','r',encoding='utf-8') as f:
                lei_bie_names = f.readlines()
            for lei_bie_item in lei_bie_names:
                print("   正在解壓"+lei_bie_item.strip()+"_類別下的壓縮檔案")
                lei_bie_name = judgeName(split_(lei_bie_item)[0])
                extract_file = 'F://ppt//'+zhu_ti_name+'//'+lei_bie_name+'//'#壓縮檔案所在位置
                archive_extract(extract_file, zhu_ti_name, lei_bie_name)
            
if __name__ =="__main__":
    main()

這部分程式碼的註釋較詳細,大家可以看下,細節性的問題比較多,不再一一囉嗦了。我將檔案批量解壓到f盤下的PPT1檔案下,執行程式之後效果如下:



結束語

到這裡,這個網站的PPT按照這樣方法基本被我們爬下來了。從這樣的網站爬取內容,雖然難度上不是很大,由於網路的原因、網頁本身結構的原因,在程式執行的過程中會遇到很多問題,要根據問題能夠修改程式碼使其穩健執行。這些ppt足以滿足平時的使用,演示的時候我只做了兩個主題中的部分欄目,其他的以後有時間再自己爬下來。

如果有什麼問題歡迎留言交流,喜歡本篇文章記得關注我哦。

相關推薦

python3.6爬蟲案例網站所有PPT

上篇部落格:python3.6爬蟲案例:爬取某網站所有PPT(上)給大家介紹了爬取(http://www.1ppt.com/)網站中的ppt檔案,爬下來的檔案如下:所以,我們就要考慮將其名稱修改為其在網頁中顯示的名字,並將其批量解壓到指定資料夾。一、批量修改壓縮檔名稱。細心的

python3.6爬蟲案例朝秀幫圖片

一、寫在前面        之前寫的兩篇部落格:python3.6爬蟲案例:爬取百度歌單點選開啟連結;python3.6爬蟲案例:爬取頂點小說(愛看小說同學的福利)點選開啟連結第一個案例寫了如何在百度音樂歌單中欄中爬取其歌曲以及對應的歌手和歌曲所在的連結,並儲存在相應的資料夾

python3程式設計07-爬蟲實戰新聞網站資訊3

本篇部落格在爬取新聞網站資訊2的基礎上進行。   主要內容如下: 1.定義獲取一頁20條連結內容的函式 2.構造多個分頁連結 3.抓取多個分頁連結新聞內容 4.用pandas整理爬取的資料 5.儲存資料到csv檔案 6.Scrapy的安裝  

[python3.6]爬蟲實戰之淘女郎圖片

原博主地址:http://cuiqingcai.com/1001.html 原博是python2.7寫的,並且隨著淘寶程式碼的改版,原博爬蟲已經不可用。 參考 http://minstrel.top/TaoBaoMM 這位博主跟我一樣最近正在學習爬蟲。 1 定個小目標 l

Python3爬蟲實戰大眾點評網地區所有酒店相關資訊

歷時一下午加一晚上,終於把這個爬蟲程式碼寫好,後面還有很多想完善的地方(譬如資料儲存用redis、使用多執行緒加快速度、爬取圖片、細分資料等等),待有空再做更改,下面是具體的步驟與思路: 工具:PyC

python 3.x 爬蟲基礎---正則表示式案例貓眼資訊,寫入txt,csv,下載圖片

python 3.x 爬蟲基礎 前言   正則表示式是對字串的一種邏輯公式,用事先定義好的一些特定字元、及這些特定字元的組合,組成一個“規則的字串”,此字串用來表示對字串的一種“過濾”邏輯。正在在很多開發語言中都存在,而非python獨有。對其知識點進行總結後,會寫一個demo。 1.正

python3程式設計08-爬蟲實戰網路圖片

本篇部落格爬取內容如下: 爬取校花網的圖片   準備工作: 1.安裝python3 2.安裝pycharm 3.安裝Scrapy,參考:Scrapy安裝   cmd命令新建Scrapy工程 1. 在D:\PythonProjects目錄下新建

爬蟲記錄6——爬蟲實戰知乎網站內容,儲存到資料庫,並匯出到Excel

前面幾篇文字我們介紹了相關的爬蟲的方法爬取網站內容和網站的圖片,且儲存到資料庫中。 今天呢,我們來次實戰練習,爬取知乎網站跟話題網站top的幾個問題和答案,然後儲存到資料庫中,最後把資料庫中的所有內容再匯出到Excel中。我們還是繼續之前的程式碼,同樣的程式碼

2-6-1 應用案例豆瓣 TOP250 電影資訊並存儲版本py3——學習筆記

爬取電影名稱、連結並寫入檔案 import urllib.request as urlrequest from bs4 import BeautifulSoup import time #休息時間 import random #為了時間隨機 top250_url="htt

Python爬蟲例項B站《工作細胞》短評——非同步載入資訊的

《工作細胞》最近比較火,bilibili 上目前的短評已經有17000多條。 先看分析下頁面   右邊 li 標籤中的就是短評資訊,一共20條。一般我們載入大量資料的時候,都會做分頁,但是這個頁面沒有,只有一個滾動條。 隨著滾動條往下拉,資訊自動載入了,如下圖,變40

爬蟲小程式鬥魚所有房間資訊】Xpath(執行緒池版)

# 本程式親測有效,用於理解爬蟲相關的基礎知識,不足之處希望大家批評指正 from queue import Queue import requests from lxml import etree from multiprocessing.dummy import Pool import t

爬蟲小程式鬥魚所有房間資訊】Xpath(多執行緒版)

    # 本程式親測有效,用於理解爬蟲相關的基礎知識,不足之處希望大家批評指正 from queue import Queue import requests from lxml import etree from threading import Thread "

爬蟲小程式鬥魚所有房間資訊】Xpath(多程序版)

  # 本程式親測有效,用於理解爬蟲相關的基礎知識,不足之處希望大家批評指正 1 import requests 2 from lxml import etree 3 from multiprocessing import JoinableQueue as Queue 4 from

Python爬蟲教程百度貼吧

貼吧爬取 寫程式碼前,構思需要的功能塊;寫程式碼時,把各個功能模組名提前寫好 初始化 初始化必要引數,完成基礎設定 爬取百度貼吧lol吧:爬取地址中的get引數須傳遞(可以指定不同主題的貼吧和頁碼) 主題名 初始網址 請求頭 生成網址 生成每一頁的路由

Python爬蟲教程崗位分析報告

本篇以拉勾網為例來說明一下如何獲取 Ajax 請求內容 本文目標 獲取 Ajax 請求,解析 JSON 中所需欄位 資料儲存到 Excel 中 資料儲存到 MySQL, 方便分析 簡單分析 五個城市 Python 崗位平均薪資水平 Python 崗位要求學歷分佈

Python爬蟲案例豆瓣程式設計類高評分書籍

對於很多正在學習計算機的朋友來說,選擇合適的學習材料是非常重要的。 本文將通過 Python 來爬取豆瓣程式設計類評分大於 9.0 的書籍。 此案例很適合入門爬蟲的朋友學習,總共也就 3 個函式。 下圖是最終的結果: 下面進入正題: 一、採集源分析: 首先我們

Python爬蟲例項 “最好大學網”大學排名

例項2 爬取大學排名 上海交通大學設計了一個“最好大學網”,上面列出了當前的大學排名。我們要設計爬蟲程式,爬取大學排名資訊。 爬蟲功能要求: 輸入:大學排名URL連結輸出:大學排名資訊的螢幕輸出(排名,大學名稱,總分)工具:python3、requests、beauti

爬蟲智聯招聘職位資訊

1. 簡介 因為想要找到一個數據分析的工作,能夠了解到市面上現有的職位招聘資訊也會對找工作有所幫助。 今天就來爬取一下智聯招聘上資料分析師的招聘資訊,並存入本地的MySQL。   2. 頁面分析 2.1 找到資料來源 開啟智聯招聘首頁,選擇資料分析師職位,跳轉進入資料分析師的詳情頁面。我

網路爬蟲之scrapy招聘網手機APP釋出資訊

1 引言 2 APP抓包分析 3 編寫爬蟲昂 4 總結   1 引言          過段時間要開始找新工作了,爬取一些崗位資訊來分析一下吧。目前主流的招聘網站包括前程無憂、智聯、BOSS直聘、拉勾等等。有

python爬蟲貼吧資料

# -*- coding: utf-8 -*- import requests import time from bs4 import BeautifulSoup import io import sys #sys.stdout = io.TextIOWrapper(sys