Potewoのブログ

電子工作が好きな学生の書く技術系のブログです。

Pythonistaでウェブサイト上よりZipファイルのダウンロードを自動化

url変数に入れたURLのウェブサイト上のaタグからZipファイルをダウンロードし、展開するスクリプトです。 aタグのhrefにZipファイルへのリンクが直で書かれている場合に使えます。

url変数を適宜入れ替えて使います。 DOS攻撃にならないように適当にtime.sleep()を入れてます。

筆者はこのスクリプトに対して一切責任を負いません。

この記事は書きかけです。

import requests
from bs4 import BeautifulSoup
import time
import os
import shutil
from datetime import datetime as dt

# Scrape
url = "https://example.com"

r = requests.get(url)
r.encoding = r.apparent_encoding
res = r.text
# print(res)

soup = BeautifulSoup(res, 'html.parser')

atags = soup.find_all('a')

# print(atags)

links = set()

for atag in atags:
    #print(atag)
    link = atag.get('href')
    if link:
        if link.endswith(".zip"):
            # print(link)
            links.add(link)
            
print(links)
dir_name = dt.now().strftime("%Y-%m-%d-%H-%M")
os.makedirs(dir_name + '_archive', exist_ok=True)
    
for link in links:
    filename = os.path.basename(link)
    print(f"downloading: {filename}")
    # Download
    data = requests.get(link).content
    with open(filename, 'wb') as f:
        f.write(data)
    # Unzip
    shutil.unpack_archive(filename, dir_name)
    shutil.move(filename, dir_name + "_archive")
    time.sleep(0.5)