成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

用Python自動下載網站所有文件

瀏覽:162日期:2022-06-24 11:28:36

最近維基 jie mi 徹底公開了網站的全部文件,我就在想如何使用 Python 將其下載到本地永久保存,于是就有了這篇文章,寫爬蟲會遇到很多坑,借鑒他人經驗,考慮越全面,出錯的概率就越小。

用Python自動下載網站所有文件

假如一個網站,里面有很多鏈接,有指向文件的,有指向新鏈接的,新的鏈接點擊進去后,仍然是有指向文件的,有指向新鏈接的,類似一個文件夾,里面即有文件,又有目錄,目錄中又有文件和目錄。如何從這樣的網站上下載所有的文件,并按網站的目錄結構來保存這些文件呢?

關鍵詞:Python、下載、正則表達式、遞歸。

按照自頂向下來設計程序,我們整理自己的思路,然后使用 Python 語言來翻譯下即可。

思路:由于目錄的深度不固定,也不可能窮舉,且每一個目錄的處理方式和子目錄父目錄的處理流程都是一樣的,因此我們可以使用遞歸來下載所有文件。

遞歸代碼必須要有退出條件,退出條件要放在前面,本例中的遞歸退出條件就是:如果是文件就下載,下載完遞歸函數即完成任務。

總體思路:

1、給定一個 url,判斷是否是文件,如果是文件,下載即可,然后函數結束。

2、如果給定 url 不是文件,那么訪問該 url,并獲取它下面的所有鏈接。

3、遍歷步驟 2 產生的所有鏈接,遞歸的執行步驟 1 和 2,直到程序運行結束。

以上思路,用代碼描述如下:

import urllib.requestimport requestsimport re, osdef get_file(url): ’’’ 遞歸下載網站的文件 :param url: :return: ’’’ if isFile(url): print(url) try: download(url) except: pass else: urls = get_url(url) for u in urls: get_file(u)

前面導入的包在接下來函數中會用到,下面就是逐漸層向下,實現子功能。

判斷鏈接是否指向文件:

這里總結 url 規律,很容易寫出。

def isFile(url): ’’’ 判斷一個鏈接是否是文件 :param url: :return: ’’’ if url.endswith(’/’): return False else: return True下載文件:

下載文件時要從 url 中獲取文件應該存儲的位置,并使用 os.makedirs 來創建多級目錄。然后使用 urllib.request.urlretrieve 來下載文件。

def download(url): ’’’ :param url:文件鏈接 :return: 下載文件,自動創建目錄 ’’’ full_name = url.split(’//’)[-1] filename = full_name.split(’/’)[-1] dirname = '/'.join(full_name.split(’/’)[:-1]) if os.path.exists(dirname): pass else: os.makedirs(dirname, exist_ok=True) urllib.request.urlretrieve(url, full_name)獲取 url 下的所有鏈接:

這里要具體網站具體分析,看看如何使用正則表達式獲取網頁中的鏈接,這樣的正則表達式可以說是再簡單不過了。

def get_url(base_url): ’’’ :param base_url:給定一個網址 :return: 獲取給定網址中的所有鏈接 ’’’ text = ’’ try: text = requests.get(base_url).text except Exception as e: print('error - > ',base_url,e) pass reg = ’<a href='http://www.piao2010.com/bcjs/(.*)' rel='external nofollow' >.*</a>’ urls = [base_url + url for url in re.findall(reg, text) if url != ’../’] return urls

這里有個小坑,就是網站有個鏈接是返回上級頁面的,url 的后輟是 ’../’ 這樣的鏈接要去掉,否則遞歸函數就限入了死循環。

接下來就是寫主函數,執行任務了,慢慢等它下載完吧。

if __name__ == ’__main__’: get_file(’https://file.wikileaks.org/file/’)

其實,還會存兩個問題:

1、假如網站某頁有個鏈接它指向了首頁,那么遞歸程序仍然會限入一個死循環,解決方法就是將訪問過的 url 保存在一個列表里(或者其他數據結構),如果接下來要訪問的 url 不在此列表中,那么就訪問,否則就忽略。

2、如果下載的過程中程序突然報錯退出了,由于下載文件較慢,為了節約時間,那么如何讓程序從報錯處繼續運行呢?這里可采用分層遞歸,一開始時先獲取網站的所有一級 url 鏈接,順序遍歷這些一級 url 鏈接,執行上述的 get_file(url) ,每訪問一次一級 url 就將其索引位置加1(索引位置默認為0,存儲在文件中或數據庫中),程序中斷后再運行時先讀取索引,然后從索引處開始執行即可。另外,每下載成功一個文件,就把對應的 url 也保存在文件中或數據庫中,如果一級 url 下的鏈接已經下載過文件,那么就不需要重新下載了。

以上就是用Python自動下載網站所有文件的詳細內容,更多關于python 自動下載網站文件的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
亚洲欧美综合| 免费久久精品视频| 日韩黄色免费网站| 伊人蜜桃色噜噜激情综合| 精品毛片乱码1区2区3区| 国产精品一区在线观看乱码 | 在线精品观看国产| 亚洲国产日日夜夜| 国产日韩一区二区三区| 亚洲精品高清在线观看| 伊人久久成人| 自拍偷拍亚洲综合| 亚洲黄页一区| 一区二区三区在线视频播放| 91久久夜色精品国产九色| 日韩一区中文字幕| 影音先锋日韩资源| 亚洲精品欧美二区三区中文字幕| 狠狠色噜噜狠狠色综合久| 日本一区二区视频在线| 欧美成人一区二免费视频软件| 久久女同精品一区二区| av激情综合网| 国产日韩欧美一区二区三区乱码| 欧美福利一区二区三区| 国产精品毛片高清在线完整版| 伊伊综合在线| 亚洲国产成人va在线观看天堂| 久久精精品视频| 精品一区二区三区在线观看| 欧美一区二区黄| 99re这里都是精品| 国产精品全国免费观看高清| av成人黄色| 热久久久久久久| 欧美老肥妇做.爰bbww| 成人一区二区三区在线观看| 欧美精品一区二区三区在线播放 | 国产一区欧美二区| 日韩美一区二区三区| 色综合天天综合给合国产| 国产精品色婷婷久久58| 国产日韩一区欧美| 免费久久99精品国产| 欧美一级日韩不卡播放免费| 欧美国产先锋| 亚洲欧洲综合另类| 一本久久精品一区二区| 国产精品99久久久久久久vr| 久久久久久久精| 亚洲美女网站| 久久精品国产**网站演员| 日韩欧美一区二区视频| 欧美精品成人| 亚洲午夜成aⅴ人片| 欧美日韩一区国产| 91在线视频18| 亚洲亚洲人成综合网络| 欧美二区三区的天堂| 91香蕉视频污| 亚洲国产一区二区三区青草影视| 欧美人牲a欧美精品| 欧美一区二区在线| 亚洲午夜电影在线观看| 欧美丰满美乳xxx高潮www| 欧美亚州在线观看| 日韩av在线免费观看不卡| 日韩一区二区三区电影| 亚洲高清资源| 久久疯狂做爰流白浆xx| 国产欧美精品一区二区三区四区| 9色精品在线| 国产一区二区三区四| 国产精品黄色在线观看| 91成人在线精品| 91麻豆成人久久精品二区三区| 夜夜亚洲天天久久| 欧美一级爆毛片| 亚洲第一精品影视| 精品无人区卡一卡二卡三乱码免费卡 | 亚洲一区二区三区国产| 欧美精品在线观看一区二区| 激情久久五月| 国产在线视频精品一区| 久久精品一区四区| 色婷婷久久久综合中文字幕| 99久久99久久精品免费观看| 天天操天天综合网| 久久久久久99久久久精品网站| 久久精品一区二区国产| av成人免费在线观看| 亚洲成人免费视| 2021中文字幕一区亚洲| 久久五月激情| 欧美日产一区二区三区在线观看| 毛片一区二区三区| 国产精品网站一区| 欧美精品高清视频| 国产欧美日韩综合精品二区| 成人在线视频一区| 五月天亚洲精品| 国产欧美1区2区3区| 欧美视频中文一区二区三区在线观看| 黄色精品网站| 国产精品99久久久久久宅男| 亚洲亚洲精品在线观看| 久久精品在这里| 欧美日产在线观看| 午夜亚洲性色福利视频| 午夜日韩视频| 国产成人亚洲综合a∨婷婷图片 | 99re这里只有精品6| 热久久国产精品| 亚洲人成人一区二区在线观看| 日韩欧美国产一区在线观看| 久久性色av| 亚洲日本黄色| 91片黄在线观看| 老色鬼精品视频在线观看播放| 亚洲精品高清在线观看| 国产亚洲综合av| 91麻豆精品91久久久久久清纯| 久久人人精品| 亚洲深夜av| 国产精品sm| 成a人片国产精品| 激情综合亚洲精品| 日韩精品欧美成人高清一区二区| 国产精品传媒在线| 久久久国际精品| 日韩欧美中文一区| 欧美精品久久天天躁| 91福利在线观看| 亚洲在线播放电影| 亚洲国产第一| 国产精品国码视频| 欧美在线高清| 高清在线不卡av| 国模少妇一区二区三区| 日韩专区欧美专区| 亚洲精品一卡二卡| 中文字幕色av一区二区三区| 久久一区二区视频| 日韩欧美精品在线视频| 欧美日韩高清一区| 欧美一a一片一级一片| 色拍拍在线精品视频8848| 国产精品丝袜xxxxxxx| 欧美私人啪啪vps| 欧美在线精品一区| www.欧美色图| 成人av综合在线| 国产成人精品免费看| 国产一区二区伦理片| 久久国内精品视频| 精品一区二区三区免费观看| 久久精品国产亚洲aⅴ| 美女脱光内衣内裤视频久久影院| 香蕉久久夜色精品国产使用方法 | 亚洲人一二三区| 国产精品高清亚洲| 国产精品理论片| 国产精品久久久久久久久晋中 | 99精品国产99久久久久久福利| 合欧美一区二区三区| 欧美久久影院| 欧美理论在线| 黄色一区二区三区四区| 精品不卡一区| 亚洲作爱视频| 亚洲一区二区三区免费在线观看| 亚洲在线黄色| 色婷婷av一区二区| 欧美三级在线播放| 91精品国产综合久久福利软件| 4438x亚洲最大成人网| 欧美一级久久久| 欧美成人福利视频| 久久天天做天天爱综合色| 国产喂奶挤奶一区二区三区| 欧美国产综合一区二区| 欧美极品aⅴ影院| 国产精品不卡在线观看| 亚洲欧美一区二区久久| 一区二区成人在线| 日韩va亚洲va欧美va久久| 精品在线播放免费| 成人午夜看片网址| 欧美日韩视频一区二区三区| 亚洲精品美女91| 香蕉成人久久| 欧美三级在线看| 精品少妇一区二区三区视频免付费| 久久久精品人体av艺术| 日韩一区中文字幕| 亚洲成人一区在线| 韩国视频一区二区| av成人动漫在线观看| 亚洲天堂黄色| 午夜一区在线|