requests實現全自動下載PPT模板

requests

http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕鬆下載

訪問這個主頁,我們可以看到下面的樣式
moban

點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址

download

點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包

那我們就開始做吧
首先,查看網頁的源代碼,我們可以看到每一個顯示的li都有對應的PPT詳細的鏈接,我們只要訪問這個鏈接,然後找到按鈕下載即可

source

首先導入相關的庫

# 導入requests庫
import requests
# 導入正則庫進行信息提取
import re 

獲取網頁源代碼

url = "http://www.1ppt.com/moban/"

# 設置請求頭
header = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"}

r = requests.get(url, headers=header)

try:
    # 如果請求失敗的話進行處理
    r.raise_for_status()
except:
    print(f"請求 {r.url} 失敗")
else:
    r.encoding = r.apparent_encoding
    html = r.text

提取對應的網址

# 先獲取整個 tplist
tplist = re.findall(r'<ul class="tplist">(.*?)</ul>', html, re.S)[0]

tplist

# 每一個li元素中包含多個需要的 鏈接,我們取第一個即可
# 獲取界面中需要的所有的鏈接
link_list = re.findall(r"<li>.*?<a href=\"(.*?)\"", tplist)

到詳細網址裏面找到下載地址

download


for link in link_list:
    if not link.startswith("http"):  # 如果不是絕對地址
        link = "http://www.1ppt.com" + link
    response = requests.get(link, headers=header)  # 請求對應的地址
    try:
        response.raise_for_status()
    except:
       print(f"請求 {response.url} 失敗")
    else:
        link_text = response.text 
        download_url = re.findall(r"<ul class=\"downurllist\">.*?<li.*?href=\"(.*?)\".*?</li>.*?</ul>",link_text, re.S)[0]

下載對應的文件

ppt = requests.get(download_url, headers=header) # 請求對應的文件
filename = re.findall(r"<title>(.*?)</title>", link_text, re.S)[0] # 文件名,亦可以自定義,但不能重複
with open(filename+".zip", "wb") as f: # 以二進制的形式寫入文件
    f.write(ppt.content)

當然這只是第一頁,我們還可以對其他頁面的PPT進行下載
我們隨機訪問幾個頁面,發現其url如下:

http://www.1ppt.com/moban/ppt_moban_6.html
http://www.1ppt.com/moban/ppt_moban_7.html

然後試試一個頁面也滿足這個方式,所以我們只需要進行一個循環,不斷訪問下載即可

比如:

num = 1
while True:
  downloadPPT(url="http://www.1ppt.com/moban/ppt_moban_{}.html".format(num))
  num+=1

如果中間報錯,直接停下來即可

源碼下載,可以回覆PPT

cyberist

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章